U1L3——Inspector窗口可编辑变量

使用 Inspector 窗口可对 Unity 编辑器中几乎所有内容(包括游戏对象、Unity 组件、资源、材质)查看和编辑属性和设置,
以及查看和编辑编辑器内的设置和首选项。

Inspector 窗口 - Unity 手册

本章代码关键字

1
2
3
4
5
6
7
8
9
10
11
[SerializeField]                          //强转序列化字段特性,使私有变量或保护变量一样在Inspector窗口上显示
[HideInInspector] //隐藏显示特性,加上该特性的成员变量,无论公开与否,都不在Inspector窗口上显示
[System.Serializable] //序列化特性,属于System命名空间,使非继承MonoBehaviour的类也能在Inspector窗口上显示
[Header("分组说明")] //分组特性,为Inspector窗口上的变量分组,参数为分组名称
[Tooltip("说明内容")] //悬停注释特性,为变量添加说明,当鼠标悬停于该变量时显示
[Space()] //间隔特性,使两个字段出现间隔
[Range(最小值,最大值)] //修饰范围特性,修饰数值的滑条范围
[Multiline(显示行数)] //多行显示字符串特性,确认Inspector窗口上显示多少行,默认参数为3
[TextArea(最少显示行数, 最多显示行数)] //滚动条显示字符串特性,确认Inspector窗口上最少显示多少行,最多显示多少行后显示滚动条
[ContextMenuItem("显示按钮名", "方法名")] //为变量添加快捷方法特性,对该变量右键菜单增加以第一个参数为名字的按钮,点击直接执行第二个参数的对应方法
[ContextMenu("方法名")] //为脚本添加快捷方法特性,对本脚本右键菜单增加以参数为名的按钮,点击直接执行添加该特性的方法

Inspector窗口可编辑变量

Inspector显示的可编辑内容就是脚本的成员变量

如果想要让一个脚本在Inspector窗口的显示更加的自定义,请参考:UEDL7——Inspector窗口拓展

私有变量和保护变量的显示

私有或者保护变量无法显示编辑

1
2
private int i1;
protected string str1;

如果想要让私有或者保护变量也可以被显示编辑
需要加上强转序列化字段特性:[SerializeField]
所谓序列化就是把一个对象保存到一个文件或者数据库字段中去

1
2
3
4
[SerializeField]
private int privateInt;
[SerializeField]
protected string protectedStr;

image

脚本的公共变量

公共的可以显示编辑

1
2
public int publicInt = 10;
public bool publicBool = false;

image

若要让公共变量不在Unity编辑器内显示编辑
则要在变量前加上特性:[HideInInspector]

1
2
[HideInInspector]
public int publicInt2 = 50;

能显示编辑的类型

1
2
3
4
5
6
public enum E_TestEnum
{
Normal,
Player,
Monster
}
1
2
3
4
public int[] array;        //数值
public List<int> list; //列表
public E_TestEnum type; //枚举
public GameObject gameobj; //游戏对象

image

字典是不能被显示的

1
2
//字典是不能被显示的
public Dictionary<int, string> dic;

自定义类型也不能直接被显示

1
2
3
//自定义类型也不能直接被显示
public MyClass myClass;
public MyStruct myStruct;

若要让自定义类型可以被访问,需要为自定义类型加上序列化特性,
这里不会自动引用命名空间,需要自己指明出处:[System.Serializable]

注意!字典怎么都不能显示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[System.Serializable]
public struct MyStruct
{
public int age;
public bool sex;
}

//可以随便写类,unity只是通过文件名查找有没有同文件夹名字的类
//注意一个脚本只能有一个继承MonoBehaviour的类
[System.Serializable]
public class MyClass
{
public int age;
public bool sex;
}

image

注意!

Inspector窗口中的变量关联的就是对象的成员变量,运行时改变他们就是在改变成员变量
拖曳到GameObject对象后,再改变脚本默认值,界面上不会改变
运行中修改的信息不会保存,如果需要变为默认值则需要Reset组件


辅助特性

分组说明特性Header

为成员分组:Header特性
[Header("分组说明")]

1
2
3
4
5
6
[Header("基础属性")]
public int age;
public bool sex;
[Header("战斗属性")]
public int atk;
public int def;

image

悬停注释Tooltip

为变量添加说明:[Tooltip("说明内容")]

1
2
[Tooltip("闪避")]
public int miss;

image

间隔特性 Space()

让两个字段出现间隔:[Space()]

1
2
[Space()]
public int crit;

修饰数值的滑条范围

[Range(最小值,最大值)]

1
2
[Range(0, 10)]
public float luck;

image

image

多行显示字符串

默认不写参数显示3行,写参数就是对应行:[Multiline(4)]

1
2
[Multiline(5)]
public string Tips;

image

滚动条显示字符串

默认不写参数就是超过3行显示滚动条,[TextArea(3, 4)]
最少显示3行,最多4行,超过4行显示滚动条

1
2
[TextArea(3, 4)]
public string myLife;

image

为变量添加快捷方法

[ContextMenuItem("显示按钮名", "方法名")]

  • 参数1 显示变量名
  • 参数2 方法名 不能有参数
1
2
3
4
5
6
[ContextMenuItem("重置钱", "Test")]
public int Money;
private void Test()
{
Money = 99;
}

image

为方法添加特性能够在Inspector中执行

[ContextMenu("测试函数")]

1
2
3
4
5
[ContextMenu("TestFun")]
private void TestFun()
{
print("测试方法");
}

​​image