Unity 2018.3
首先,关于Unity在Inspector中显示属性的文档可以在Unity的Wiki找到。
具体做法,首先创建一个脚本用于编写自定义Attribute,并添加如图所示Attribute。
接着,在Editor文件夹(任意位置的文件夹都可)中创建两个脚本文件。ExposeProperties.cs 提供一些可重用的函数,XXXXEditor.cs 则用于覆盖默认Editor的显示。
在ExposeProperties.cs中,按照Wiki文档创建代码即可。
在XXXEditor.cs文件中,则需要按照需要显示Property的组件类来设置。我的类是MQTTDevice,设置如图。同时在CustomEditorAttribute上添加editorForChildClasses参数,目的是让子类组件也按照这种方式显示。
然后就可以使用实现好的属性和配套Editor类。在脚本中(我的是MQTTDevice)中对一些public且可读可写的property添加[ExposeProperty]。
在Unity编辑器中,立刻可以看到效果,属性被显示了出来。
但是,如果我们设置这些属性值,再运行,会发现属性值消失。这是因为属性的序列化和运行时读写不是一回事,属性不是字段,Unity中默认未序列化/未保存。
只读属性如图所示,只有getter,或者setter为私有。
对于这种情况,我们需要修改ExposeProperties代码,第一处修改是修改其生成EditorGUILayout的过程,仅生成一个LabelField简单的显示属性的字符串形式即可。
第二处修改是GetProperties函数,所有可读的属性都处理即可。
回到unity editor,可以看到可读的公共属性以标签的形式显示了出来。
读写属性:1、首先,关于Unity在Inspector中显示属性的文档可以在Unity的Wiki找到。 2、具体做法,首先创建一个脚本用于编写自定义Attribute,并添加如图所示Attribute。 3、接着,在Editor文件夹(任意位置的文件夹都可)中创建两个脚本文件。ExposeProperties.cs 提供一些可重用的函数,XXXXEditor.cs 则用于覆盖默认Editor的显示。 4、在ExposeProperties.cs中,按照Wiki文档创建代码即可。 5、在XXXEditor.cs文件中,则需要按照需要显示Property的组件类来设置。我的类是MQTTDevice,设置如图。同时在CustomEditorAttribute上添加editorForChildClasses参数,目的是让子类组件也按照这种方式显示。 6、然后就可以使用实现好的属性和配套Editor类。在脚本中(我的是MQTTDevice)中对一些public且可读可写的property添加[ExposeProperty]。 7、在Unity编辑器中,立刻可以看到效果,属性被显示了出来。 8、但是,如果我们设置这些属性值,再运行,会发现属性值消失。这是因为属性的序列化和运行时读写不是一回事,属性不是字段,Unity中默认未序列化/未保存。
只读属性:1. 只读属性如图所示,只有getter,或者setter为私有。2. 对于这种情况,我们需要修改ExposeProperties代码,3. 第一处修改是修改其生成EditorGUILayout的过程,仅生成一个LabelField简单的显示属性的字符串形式即可。4. 第二处修改是GetProperties函数,所有可读的属性都处理即可。
如果遇到问题,可以在下面提出疑问。