【Unity】 HTFramework框架(三十七)Inspector自定义序列化检视器

更新日期:2020年8月21日。
Github源码:[点我获取源码]

索引

  • Inspector自定义序列化检视器
  • 使用
    • Dropdown下拉框检视器
      • string下拉框
      • int下拉框
      • float下拉框
    • ReorderableList可排序列表检视器
      • 数组
      • 集合
    • Enable激活状态检视器
    • Display显示状态检视器
    • Label标签检视器
    • Color颜色检视器
    • ReadOnly只读检视器
    • Hyperlink超链接检视器
    • Event事件检视器
    • Button按钮检视器

Inspector自定义序列化检视器

Inspector自定义序列化检视器支持通过简单的在序列化字段上添加特性标记从而实现在Inspector界面自定义多种实用的检视器效果。

使用

Dropdown下拉框检视器

目前可以为intstringfloat三种类型的序列化字段定义下拉框检视器,下拉框检视器使得目标字段在Inspector面板只能设置为下拉框中的几种值之一,以防止出现意外值

string下拉框

比如今有字段Sex表示性别,其值只能为男、女、未知三种,使用Dropdown限制其值:

public class Test : MonoBehaviour
{
    [Dropdown("男", "女", "未知")]
    public string Sex;
}

Inspector面板的效果:
【Unity】 HTFramework框架(三十七)Inspector自定义序列化检视器_第1张图片

int下拉框

比如今有字段Age表示青少年段的年龄,其值只能为13, 14, 15, 16, 17五种,使用Dropdown限制其值:

public class Test : MonoBehaviour
{
    [Dropdown("男", "女", "未知")]
    public string Sex;

    [Dropdown(13, 14, 15, 16, 17)]
    public int Age;
}

Inspector面板的效果:
【Unity】 HTFramework框架(三十七)Inspector自定义序列化检视器_第2张图片

float下拉框

比如今有字段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;
}

Inspector面板的效果:
【Unity】 HTFramework框架(三十七)Inspector自定义序列化检视器_第3张图片

ReorderableList可排序列表检视器

目前可以为任意类型的数组、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;
}

Inspector面板的效果:
【Unity】 HTFramework框架(三十七)Inspector自定义序列化检视器_第4张图片

集合

比如今有字段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;
}

Inspector面板的效果:
【Unity】 HTFramework框架(三十七)Inspector自定义序列化检视器_第5张图片

Enable激活状态检视器

目前可以为任意的序列化字段定义激活状态检视器,激活状态检视器使得目标字段可以根据相应的条件来决定其自身是否激活

比如今有如下需求,年龄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变为灰色未激活状态):
【Unity】 HTFramework框架(三十七)Inspector自定义序列化检视器_第6张图片

Display显示状态检视器

目前可以为任意的序列化字段定义显示状态检视器,显示状态检视器使得目标字段可以根据相应的条件来决定其自身是否显示

比如今有如下需求,年龄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字段直接隐藏了):
【Unity】 HTFramework框架(三十七)Inspector自定义序列化检视器_第7张图片

Label标签检视器

目前可以为任意的序列化字段定义标签检视器,标签检视器使得目标字段始终以标签指定的名称显示在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面板的效果:
【Unity】 HTFramework框架(三十七)Inspector自定义序列化检视器_第8张图片

Color颜色检视器

目前可以为任意的序列化字段定义颜色检视器,颜色检视器使得目标字段始终以指定的颜色显示在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面板的效果:
【Unity】 HTFramework框架(三十七)Inspector自定义序列化检视器_第9张图片

ReadOnly只读检视器

目前可以为任意的序列化字段定义只读检视器,只读检视器使得目标字段在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;
}

Inspector面板的效果:
【Unity】 HTFramework框架(三十七)Inspector自定义序列化检视器_第10张图片

Hyperlink超链接检视器

目前可以为任意的string类型序列化字段定义超链接检视器,超链接检视器使得目标字段在Inspector面板自动展示一个可以点击的超链接文本

使用Hyperlink定义检视器:

public class Test : MonoBehaviour
{
    [Hyperlink("百度一下")]
    public string Baidu = "https://www.baidu.com/";
}

Inspector面板的效果:
【Unity】 HTFramework框架(三十七)Inspector自定义序列化检视器_第11张图片

Event事件检视器

目前可以为任意的事件定义事件检视器,事件检视器使得目标事件在Inspector面板自动展开事件中包含的所有已注册方法

使用Event定义检视器:

public class Test : MonoBehaviour
{
    [Event("学习")]
    public HTFAction Study;
    
    private void Start()
    {
        Study += OnStudyYuWen;
        Study += OnStudyShuXue;
    }

    /// 
    /// 学习语文
    /// 
    private void OnStudyYuWen()
    {
        
    }

    /// 
    /// 学习数学
    /// 
    private void OnStudyShuXue()
    {

    }
}

Inspector面板的效果:
【Unity】 HTFramework框架(三十七)Inspector自定义序列化检视器_第12张图片

Button按钮检视器

目前可以为任意的方法定义按钮检视器,按钮检视器使得目标方法在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[] { "看书", "上课", "做题", "做作业", "做卷子" };
    }
}

Inspector面板的效果:
【Unity】 HTFramework框架(三十七)Inspector自定义序列化检视器_第13张图片
点击按钮设置为学霸,一个学霸就诞生了:
【Unity】 HTFramework框架(三十七)Inspector自定义序列化检视器_第14张图片

你可能感兴趣的:(Unity,HTFramework,Unity,Editor,Develop,Unity,Unity,框架,HTFramework,序列化,Inspector)