Unity之Editor
特性介绍之UnityEngine
- [HideInInspector] :隐藏公共成员变量; 防止Inspector的值影响,同时保证变量可访问度
- [SerializeField] :私有变量,检视面板可见; Unity会将对象进行序列化存储,所以即使是私有的,那么标记为可序列化后,就会显示,公有默认就是可序列化的
- [Serializable] :可序列化对象; 对象如果不标记为可序列化,则Unity在存储的时候,会认为它不可被序列化,无法被显示,Unity的内置JSON工具原理类似
- [Range(0,150)] : 限制变量范围,0-150的范围
- [Tooltip(“移动到变量上显示提示问题内容”)] : 添加变量悬浮提示文字,一个成员变量可添加多个特性
- [Header(“名字”)] : 常显示内容; 当前成员变量上方加入一个标题文字
- [Space(50)] :留出空间, 在当前成员变量上方留50像素距离
- [Multiline(5)] : 指定输入框,拥有5行
- [TextArea(5,10)] :默认显示5行,最多显示10行内容,再多就变成滚动条显示区域.
- [ContextMenu(“输出内容”)] : 给小齿轮增加一个回调函数
- [ContextMenuItem(“输出内容”,“调用的函数名”)] : 给成员变量添加右键菜单,第一个参数是菜单名称,第二个参数是右键点击的回调函数
- [RequireComponent(typeof(BoxCollider))] : 当前组件依赖于盒子碰撞器,当前组件挂载在对象上时,盒子碰撞体会一起被添加上去,当player组件没有被移除时,盒子碰撞体不能被删除
- [ExecuteInEditMode] :使生命周期函数,在编辑器状态下可以执行,游戏中也可以正常使用,Update()在场景中对象发生变化或项目组织发生变化时会在编辑器模式下执行
- [AddComponentMenu(“自定义控制器/玩家控制器”, 1)] :将类组件添加到AddComponent上,第一个参数:分类名/组件名, 第二个参数:列表显示顺序
- [] :
特性介绍之UnityEditor
- [CustomEditor(typeof(Player))] :将编辑器开发脚本与需要编辑的组件建立外挂关系
Tip:dll动态库可替换; C#特性[System.Serializable]传递元素; Develop Tool开发工具;异或位运算:相同为0,不同为1,A与B异或得到C,这是可逆的.
特殊目录:
唯一性 | 非唯一性 |
---|---|
[SreamingAssets]只读存储跟随游戏包的资源目录 | [Resources]资源目录/存储时跟随游戏包 |
[Editor]编辑器目录,不会被打包到项目中 | |
[Plugins]需要跨语言调用的代码逻辑代码存储目录,SDK接入 |
Editor与Engine交互
需求:Editor里面的类B里的函数b 生成数据实体类C, 我需要在游戏进行时重置一下实体类C.
尝试不知道大家有没有尝试过在普通的脚本里面调用 Editor里面的函数.
结果是: 这样是调用不到的, 连Editor里面的脚本都获取不到.
于是想了个办法 借用中间者.
方案:在普通类里面声明一个静态的 事件A , 在Editor中的脚本,把需要回调的函数b注册到 事件A中, 然后在普通类里面执行事件A,就能执行函数b了.
关键点 如何在Editor中的脚本,把需要回调的函数b注册到 事件A中.要注意这里不能手动!,如果手动那就没有意义了, 因为 打包成游戏后,没有编辑模式,也没办法手动注册.
所以 注册方法的过程需要自动化!
利用特性:[InitializeOnLoad] ,在类上批注[InitializeOnLoad], 这时,该类B就能在游戏启动时 执行 该类B的静态构造函数. static B(){} . 把注册方法写在 静态构造函数里面即可.