在简书上整理一个与 Unity 有关的一系列 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面板上给我们写的逻辑(方法)植入一个入口。
这样一来,方便咱们对撰写的功能点做单例测试啦~
链接
备注:该组件不能与 InspectorFoldoutGroup 等其他编辑器扩展 共存在工程中,因为它的存在会覆盖其他编辑器扩展的绘制。
上面的内容童靴们还喜欢吗,本文集持续更新ing哦!
网友评论