[Unity 3d] EditorButton (Inspector按钮)- GitHub

GitHub 上的工程多如繁星,有些好的仓库,但凡不经意间错过了就很难找回,故稍作采撷,希望能帮助到有心人。
本文集以一个小的功能点为单位行文,也便于拾取罢!

简介

笔者今天要推荐的仓库叫 EditorButton
看名字就知道这个是编辑器模式下使用的啦!对,猜的没错,他就是在 Inspector 绘制按键的。
不管是编辑器在运行时还是没有运行,button Mapping的逻辑都可以被执行。

其具备以下特性:

  • Multiple arguments - 可指定多参数
  • Arguments can have default values - 支持带默认值的参数
  • Coroutines are automatically started - 支持协程的运行
  • Return values are printed to the console - 支持返回值(返回值将由 Console 输出)

演示

转载,侵立删

使用

只需要将属性[EditorButton]写在需要被测试的方法上方即可:

    [EditorButton]
    public void PrintStuff(float floatVal, int intVal, string stringVal, bool boolVal) 
    {
        Debug.Log("floatVal "+floatVal);
        Debug.Log("intVal "+intVal);
        Debug.Log("stringVal "+stringVal);
        Debug.Log("boolVal "+boolVal);
    }

上面代码得到的 Inspector 绘制效果如下:



指定好参数后执行,即可得到对应的输出:


情景实战

实际使用中,笔者多用于预制体动态配置和生成,以及场景文件的管理,因为播放时可以出效果但停止后会重置。
实例:场景中存在N多模型,你要随机减一半去,然后呢,还要能恢复回去,那该怎么做呢?
借助 EditorButton 原来可以如此简单:

using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    [SerializeField] Transform target;
    [SerializeField] List<Transform> HidedCubes; //记录被隐藏的对象(必须被序列化在面板上,只有这样才会记录在YAML文件中)
    //演示测试 Random.Range API (返回随机数包含最小值不含最大值)
    [EditorButton]
    private void TestRandom()
    {
        for (int i = 0; i < 20; i++)
        {
            Debug.Log(Random.Range(0, 2));
        }
    }

    //打散这些cube
    [EditorButton]
    private void SeparateCube()
    {
        foreach (Transform item in target)
        {
            item.position = new Vector3(Random.Range(0, 4), Random.Range(0, 4), Random.Range(0, 4));
        }
    }
    //随机隐掉一半左右的Cube
    [EditorButton]
    private void HideHalf()
    {
        foreach (Transform item in target)
        {
            if (Random.Range(0, 2) == 0)
            {
                item.gameObject.SetActive(false);
                HidedCubes.Add(item);
            }
        }
    }
    //将随机隐掉的一半在显出来
    [EditorButton]
    private void ShowHidedCube()
    {
        foreach (Transform item in HidedCubes)
        {
            item.gameObject.SetActive(true);
        }
        HidedCubes.Clear(); //清除记录
    }
}

效果如下:



是不是挺有意思的:

  • 演示了 Random.Range API 的测试,
  • 演示了场景文件的管理 - Cube随机分布
  • 实现了上面提到的需求 - Cube随机隐藏一半且可恢复显示

结语

可以这么理解:EditorButton 就是直接在Inspector面板上给我们写的逻辑(方法)植入一个入口。
这样一来,方便咱们对撰写的功能点做单例测试啦~

链接

EditorButton

备注:

  • 该组件不能与 InspectorFoldoutGroup 等其他编辑器扩展 共存在工程中,因为它的存在会覆盖其他编辑器扩展的绘制。

扩展阅读

此处更新笔者瞧见的其他功能类似的仓库
QuickButtons

上面的内容童靴们还喜欢吗,本文集持续更新ing哦!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容