Untiy基础学习(五)Inspector窗口中可编辑的变量
目录
一、什么是可编辑的变量——显示的可编辑内容就是脚本的成员变量
二、有哪些值得注意的点
(1)私有或者保护的变量,默认情况下是无法在外部显示的。
(2)公开变量可以直接显示在上面
(3)不让公有的变量显示
(4)有哪些类型可以直接显示在Inpsector窗口上呢,C#中的数据类型,除了字典以外都可以。
(5)自定类型如何显示,利用[System.Serializable]特性。在你自定义申明的类或者结构体前面加上这个。例如:
(6)一些辅助特性
三、总结
一、什么是可编辑的变量——显示的可编辑内容就是脚本的成员变量
当你在Untiy中选中一个对象,他一定会有一个Inspector窗口,而这些个窗口上显示的内容就是可以在外部直接调整的变量,不用到内部修改,提高了开发效率。如下图所示。Transform就是Unity给我们提供好的基本组件,你看上面的Position,Rotation都是一些可以编辑的变量。那么这些变量有什么规则呢?
二、有哪些值得注意的点
(1)私有或者保护的变量,默认情况下是无法在外部显示的。
只有在这个变量前加上加上强制序列化字段特性[SerializeField]才可以使得在Inspector窗口上显示。所谓序列化就是把一个对象保存到一个文件或数据库字段中去
例如我在VS里面写如下语句:
private int age;
private int num;
在Unity中并不会显示这两个变量信息,因为他们是私有的
给age加上特性后:
(2)公开变量可以直接显示在上面
[SerializeField]private int age;
private int num;public int classs;
(3)不让公有的变量显示
加上这个特性[HideInInspector]就没有了:
[SerializeField]private int age;
private int num;[HideInInspector] public int classs;
(4)有哪些类型可以直接显示在Inpsector窗口上呢,C#中的数据类型,除了字典以外都可以。
public int[] array;
public List<int> list;
public E_TestEnum type;
public GameObject gameObj;//字典不能被Inspector窗口显示编辑
public Dictionary<int, MyStruct> dic;
那如果你就是想用字典的数据结构怎么办,你可以自定义一个键值对类,自己手动实现一个。
(5)自定类型如何显示,利用[System.Serializable]特性。在你自定义申明的类或者结构体前面加上这个。例如:
public struct MyStruct
{public int i1;public bool sex;}
[System.Serializable]
public class MyClass
{public int age;public bool sex;
}
(6)一些辅助特性
①为成员分组特性Header
为成员分组,就是在Insoector窗口上一块一块显示
Header特性
[Header("分组说明")]
示例:
[Header("基础属性")]
public int age;
public bool sex;[Header("战斗属性")]
public int hp;
public int mp;
②悬停注释特性Tooltip
为变量添加说明,就是你鼠标放在那里会显示一些内容
[Tooltip("说明内容")]
示例:
[Tooltip("闪避")]
public int miss;
③间隔特性 Space()
让两个字段中间出现间隔,没什么好说的,就是和上一个字符分隔开来,里面可以填数字,越大越开
[Space()]
④修饰数值的滑条范围特性Range
[Range(最小值, 最大值)]
示例:
[Range(0, 10)]
public float luck;
在0~10之间可以滑动
⑤多行显示字符串 默认不写参数显示3行
写参数就是对应行
[Multiline(4)]
示例:
[Multiline(4)]
public string tips;
⑥滚动条显示字符串 //默认不写参数就是超过3行显示滚动条
[TextArea(3, 5)] //最少显示3行,最多显示5行
[TextArea(3,4)]
public string tips2;
和上面那个的区别就是一个有滚动条一个莫得。
⑦为变量添加快捷方法 ContextMenuItem
参数一:显示按钮名
参数二:方法名不能有参数
示例:
[ContextMenuItem("重置钱", "Test")]
public int money;
初始情况:
右击这个名字:就可以看到我们实现的重置钱的方法,点一下看看效果。就会变成1500
⑧为方法添加特性能够在Inspector窗口中执行
[ContextMenu("方法名")]
示例:
[ContextMenu("哈哈哈哈")]
private void TestFun()
{ print("执行了TestFun方法");}
点击脚本文件的右上角三个点会出现你自定义的方法:
点一下看看效果:
三、总结
特性名称 | 功能描述 | 用法示例 | 命名空间 | 备注 |
---|---|---|---|---|
[SerializeField] | 强制序列化私有字段 | [SerializeField] private int score; | UnityEngine | 使私有变量在Inspector可见 |
[HideInInspector] | 隐藏公有字段 | [HideInInspector] public float hiddenValue; | UnityEngine | 配合public使用 |
[Header] | 添加分组标题 | [Header("角色属性")] public int hp; | UnityEngine | 纯文本信息展示 |
[Tooltip] | 鼠标悬停显示提示信息 | [Tooltip("移动速度")] public float speed; | UnityEngine | 帮助文档说明 |
[Range] | 数值滑动条约束 | [Range(0, 100)] public int successRate; | UnityEngine | 仅适用数值类型 |
[Space] | 插入垂直间距 | [Space(20)] public Vector3 position; | UnityEngine | 参数为像素高度 |
[Multiline] | 多行文本输入框 | [Multiline(4)] public string description; | UnityEngine | 指定可见行数 |
[TextArea] | 带滚动条的文本域 | [TextArea(3, 10)] public string story; | UnityEngine | 可设置最小/最大行数 |
[ContextMenu] | 在组件菜单添加自定义方法 | [ContextMenu("初始化数据")] private void InitData() { ... } | UnityEngine | 方法需无参数 |
[ContextMenuItem] | 为字段添加右键菜单方法 | [ContextMenuItem("随机数值", "RandomValue")] public int value; | UnityEngine | 需同时指定方法名 |
[System.Serializable] | 使自定义类型可序列化 | [System.Serializable] public class Weapon { ... } | System | 需应用于class/struct |
[RequireComponent] | 强制依赖组件 | [RequireComponent(typeof(Rigidbody))] public class Player : MonoBehaviour { ... } | UnityEngine | 自动添加必要组件 |
[DisallowMultipleComponent] | 禁止同一物体挂载多个实例 | [DisallowMultipleComponent] public class Singleton : MonoBehaviour { ... } | UnityEngine | 适用于单例组件 |
[ExecuteInEditMode] | 脚本在编辑器模式下运行 | [ExecuteInEditMode] public class EditorTool : MonoBehaviour { ... } | UnityEngine | 慎用性能消耗大的操作 |