更新日期:2020年8月21日。
Github源码:[点我获取源码]
Inspector自定义序列化检视器支持通过简单的在序列化字段上添加特性标记从而实现在Inspector界面自定义多种实用的检视器效果。
目前可以为int
,string
,float
三种类型的序列化字段定义下拉框检视器,下拉框检视器使得目标字段在Inspector面板只能设置为下拉框中的几种值之一,以防止出现意外值:
比如今有字段Sex
表示性别,其值只能为男、女、未知
三种,使用Dropdown
限制其值:
public class Test : MonoBehaviour
{
[Dropdown("男", "女", "未知")]
public string Sex;
}
比如今有字段Age
表示青少年段的年龄,其值只能为13, 14, 15, 16, 17
五种,使用Dropdown
限制其值:
public class Test : MonoBehaviour
{
[Dropdown("男", "女", "未知")]
public string Sex;
[Dropdown(13, 14, 15, 16, 17)]
public int Age;
}
比如今有字段Height
表示青少年段的身高分段,其值只能为1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.7f
六种,使用Dropdown
限制其值:
public class Test : MonoBehaviour
{
[Dropdown("男", "女", "未知")]
public string Sex;
[Dropdown(13, 14, 15, 16, 17)]
public int Age;
[Dropdown(1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.7f)]
public float Height;
}
目前可以为任意类型的数组、List集合
的序列化字段定义可排序列表检视器,可排序列表检视器使得目标字段在Inspector面板生成一个美观的、可拖动子元素排序、可增删的列表(自己在Editor类中实现一个ReorderableList比较复杂,需要写很多代码,这里只需要一个特性标记):
比如今有字段Interest
表示青少年的爱好,使用ReorderableList
定义检视器:
public class Test : MonoBehaviour
{
[Dropdown("男", "女", "未知")]
public string Sex;
[Dropdown(13, 14, 15, 16, 17)]
public int Age;
[Dropdown(1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.7f)]
public float Height;
[ReorderableList]
public string[] Interest;
}
比如今有字段Uniform
表示青少年的校服种类,使用ReorderableList
定义检视器:
public class Test : MonoBehaviour
{
[Dropdown("男", "女", "未知")]
public string Sex;
[Dropdown(13, 14, 15, 16, 17)]
public int Age;
[Dropdown(1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.7f)]
public float Height;
[ReorderableList]
public string[] Interest;
[ReorderableList]
public List<Material> Uniform;
}
目前可以为任意
的序列化字段定义激活状态检视器,激活状态检视器使得目标字段可以根据相应的条件来决定其自身是否激活:
比如今有如下需求,年龄Age
大于15岁的青少年将不再有爱好,使用Enable
定义检视器:
public class Test : MonoBehaviour
{
[Dropdown("男", "女", "未知")]
public string Sex;
[Dropdown(13, 14, 15, 16, 17)]
public int Age;
[Dropdown(1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.7f)]
public float Height;
//Enable 特性的参数 AgeGreater15 为方法名,该方法的返回值决定此字段的激活状态,所以该方法必须是bool型返回值
[Enable("AgeGreater15")]
[ReorderableList]
public string[] Interest;
[ReorderableList]
public List<Material> Uniform;
private bool AgeGreater15()
{
return Age <= 15;
}
}
在Inspector
面板的效果(Age大于15,Interest变为灰色未激活状态):
目前可以为任意
的序列化字段定义显示状态检视器,显示状态检视器使得目标字段可以根据相应的条件来决定其自身是否显示:
比如今有如下需求,年龄Age
大于15岁的青少年不只是没有爱好,同时还要忘掉过去的爱好,使用Display
定义检视器:
public class Test : MonoBehaviour
{
[Dropdown("男", "女", "未知")]
public string Sex;
[Dropdown(13, 14, 15, 16, 17)]
public int Age;
[Dropdown(1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.7f)]
public float Height;
//Display 特性的参数 AgeGreater15 为方法名,该方法的返回值决定此字段的显示状态,所以该方法必须是bool型返回值
[Display("AgeGreater15")]
[ReorderableList]
public string[] Interest;
[ReorderableList]
public List<Material> Uniform;
private bool AgeGreater15()
{
return Age <= 15;
}
}
在Inspector
面板的效果(Age大于15,Interest字段直接隐藏了):
目前可以为任意
的序列化字段定义标签检视器,标签检视器使得目标字段始终以标签指定的名称显示在Inspector面板:
使用Label
定义检视器:
public class Test : MonoBehaviour
{
[Label("性别")]
[Dropdown("男", "女", "未知")]
public string Sex;
[Label("年龄")]
[Dropdown(13, 14, 15, 16, 17)]
public int Age;
[Label("身高")]
[Dropdown(1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.7f)]
public float Height;
[Label("爱好")]
[ReorderableList]
public string[] Interest;
[Label("校服")]
[ReorderableList]
public List<Material> Uniform;
}
目前可以为任意
的序列化字段定义颜色检视器,颜色检视器使得目标字段始终以指定的颜色显示在Inspector面板:
使用Color
定义检视器:
public class Test : MonoBehaviour
{
[Color(1, 0, 0, 1)]
[Label("性别")]
[Dropdown("男", "女", "未知")]
public string Sex;
[Color(0, 1, 0, 1)]
[Label("年龄")]
[Dropdown(13, 14, 15, 16, 17)]
public int Age;
[Color(0.48f, 0.5f, 0.3f, 1)]
[Label("身高")]
[Dropdown(1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.7f)]
public float Height;
[Label("爱好")]
[ReorderableList]
public string[] Interest;
[Color(0.78f, 0.89f, 0.1f, 1)]
[Label("校服")]
[ReorderableList]
public List<Material> Uniform;
}
目前可以为任意
的序列化字段定义只读检视器,只读检视器使得目标字段在Inspector面板为只读的,不可编辑的:
使用ReadOnly
定义检视器:
public class Test : MonoBehaviour
{
[ReadOnly]
[Label("性别")]
[Dropdown("男", "女", "未知")]
public string Sex;
[ReadOnly]
[Label("年龄")]
[Dropdown(13, 14, 15, 16, 17)]
public int Age;
[Label("身高")]
[Dropdown(1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.7f)]
public float Height;
[Label("爱好")]
[ReorderableList]
public string[] Interest;
[Label("校服")]
[ReorderableList]
public List<Material> Uniform;
}
目前可以为任意的string
类型序列化字段定义超链接检视器,超链接检视器使得目标字段在Inspector面板自动展示一个可以点击的超链接文本:
使用Hyperlink
定义检视器:
public class Test : MonoBehaviour
{
[Hyperlink("百度一下")]
public string Baidu = "https://www.baidu.com/";
}
目前可以为任意的事件
定义事件检视器,事件检视器使得目标事件在Inspector面板自动展开事件中包含的所有已注册方法:
使用Event
定义检视器:
public class Test : MonoBehaviour
{
[Event("学习")]
public HTFAction Study;
private void Start()
{
Study += OnStudyYuWen;
Study += OnStudyShuXue;
}
///
/// 学习语文
///
private void OnStudyYuWen()
{
}
///
/// 学习数学
///
private void OnStudyShuXue()
{
}
}
目前可以为任意的方法
定义按钮检视器,按钮检视器使得目标方法在Inspector面板自动生成一个按钮,点击按钮可以执行到该方法:
使用Button
定义检视器:
public class Test : MonoBehaviour
{
[Label("性别")]
[Dropdown("男", "女", "未知")]
public string Sex;
[Label("年龄")]
[Dropdown(13, 14, 15, 16, 17)]
public int Age;
[Label("身高")]
[Dropdown(1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.7f)]
public float Height;
[Label("爱好")]
[ReorderableList]
public string[] Interest;
[Label("校服")]
[ReorderableList]
public List<Material> Uniform;
//一键设置目标为学霸
[Button(text: "设置为学霸")]
private void SetToZha()
{
Age = 13;
Height = 1.7f;
Interest = new string[] { "看书", "上课", "做题", "做作业", "做卷子" };
}
}