
自定义Unity组件时如果不加以控制,会按照Unity默认的方式来排布显示可序列化属性。
如果我们向让属性显示得更个性化一些,可以自定义PropertyDrawer。
这个PropertyDrawer它可以指定Serializable类(可序列化类)或PropertyAttribute( 自定义属性 ),这样就有了两种使用:
另注 :
组件为什么能显示在Inspector面板上?
因为组件都继承自Monobehaviour,父类的initiate方法起到了序列化和反序列化的作用。这样就能保存为MetaData,供下次使用。
Serializable类(可序列化类)在Unity中有什么含义呢?
默认地,Unity只给自定义的公有变量、继承自MonoBehaviour的类执行序列化,所以如果想让一个类序列化,那么就要指定[Serializable]标签。它将MetaData放入可以通过反射重新获取并由Unity使用的类中。有了这个Unity知道它应该/可以序列化类。
Unity序列化的关键字是 Serializable 和 SerializeField,具体描述可以翻阅api。
假设我们在写一个组件需要把一个引用字段里的属性都显示出来供配置,那么,根据上面的介绍我们要分两步。
前文链接:自定义menuItem
下文:针对自定义特性创建PropertyDrawer
注:配套案例可在 EditorExtensionDemo 仓库中查看。
使用getcomponent方法获取该物体上你所需要的组件,可以是你的脚本也可以是unity的脚本,如果没有该脚本则返回null,如果有就返回你获取的类型,然后这个获取的类就是该物体的相应类的实例,你可以对其进行 *** 作
使用GetComponentsInChildren, 得到脚本集 脚本名[]后,进行for循环 看哪个的gameobjectname 是你想要的;
或者 父对象transformfind("子对象的名字")GetComponent<xx>();
以上就是关于编辑器扩展基础3-自定义PropertyDrawer全部的内容,包括:编辑器扩展基础3-自定义PropertyDrawer、unity3d中如何获取所选对象的类型,挂载的脚本能否解析和更改呢、unity3d 使用GetComponentInChildren,父子对象都有同一个控件,怎么跳过父对象获取子对象的控件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)