最近开始学unity,对于一些基础知识,还是习惯边码边写文章的形式来学习。
在js中,中括号是定义数组的,在c#中,中括号是进行声明的(c#中用{}定义数组),而声明中最常见的是序列化属性。
关于序列化:序列化(Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区,之后便可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。序列化使其他代码可以查看或修改那些不序列化便无法访问的对象实例数据。
而unity中常用的声明有以下这些:
声明 | 标记类型 | 说明 | 用法举例 |
---|---|---|---|
RequireComponent | 组件属性 | 添加组件到 game object 上,且该组件不能删除。 | [RequireComponent(typeof(Animator))]public class TestOne : MonoBehaviour {} |
HideInInspector | 成员属性 | 在Inspector 面板中隐藏public的属性,但不含序列化功能。 | [HideInInspector]public int Blood = 10; |
AddComponentMenu | 组件属性 | 在Component菜单下显示自己的类。 | [AddComponentMenu("Ahaha/TestOne")]public class TestOne : MonoBehaviour{} |
ExecuteInEditMode | 类 | 标记类。选中有该脚本的 game object时,会执行脚本,不用点play。 | [ExecuteInEditMode]public class TestOne : MonoBehaviour{} |
SerializeField | 属性 | 将私有变量强制显示出来 | [SerializeField]private int dir=0; |
NonSerialized | 属性 | 隐藏序列化的属性 | [NonSerialized]public int dir=0; |
Serializable | 类 | 仅对"类、结构、枚举、委托"声明有效,能在编辑器面板显示类的属性(可修改) | [Serializable]public class myClass{public int a=0;public int b=1;}[SerializeField, Tooltip("显示类的属性")]public myClass myclass; |
ContextMenu | 成员函数 | 允许您向组件右上角菜单菜单添加命令 | [ContextMenu("移动到111")]void MoveTo111 (){} |
range | 成员属性 | 在 Inspector 面板中显示一个滑动条。 | [Range(0.0f,10.0f)]public float bu=3.0f |
Tooltip | 成员属性 | 注释,双击编辑器中某个gameobject时脚本上某个属性名时显示 | [SerializeField, Tooltip("这是方向属性的描述")]public int dir=0 |
Multiline | 成员属性 | 使字符串可以用多行文本框编辑,没有滚动条 | [Multiline(5)]public string text="" |
TextArea | 成员属性 | 使字符串可以用多行文本框编辑,有滚动条 | [TextArea(1,5)]public string abc |
Header | 成员属性 | 在组件上下文中加入一个标题 | [Header("方向")]public int dir=0 |
DisallowMultipleComponent | 组件属性 | 确保组件唯一,约束不能增加多个同类组件 | [DisallowMultipleComponent]public class testEdit : MonoBehaviour {...} |
ContextMenuItem | 成员属性 | 为属性增加一个方法,右键编辑器中属性key值时显示 | [Multiline][ContextMenuItem("Reset", "ResetString")]public string bb;public void ResetString(){bb = "";} |
ColorUsage | 成员属性 | 颜色选择器,参数为是否包含透明度 | [ColorUsage(true)]public Color cc; |
在编辑器中要显示下选项可以用序列化的枚举声明,代码如下:
//枚举的下拉表达
[Serializable]
public enum days{a,b,c}
[SerializeField, Tooltip("枚举介绍")]
public days myDays;
还有相当多的声明可用,有空再在评论中更新。