多语言展示
当前在线:805今日阅读:176今日分享:34

Unity 编辑器中如何显示脚本组件的属性

本经验介绍在Unity 编辑器中,如何显示脚本组件的属性。本经验所提的显示脚本组件的属性需要创建新的Editor对象,这也意味着这种方式只能对一个脚本及其子类起作用。
工具/原料

Unity 2018.3

读写属性的处理
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代码,第一处修改是修改其生成EditorGUILayout的过程,仅生成一个LabelField简单的显示属性的字符串形式即可。

3

第二处修改是GetProperties函数,所有可读的属性都处理即可。

4

回到unity editor,可以看到可读的公共属性以标签的形式显示了出来。

总结
1

读写属性: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中默认未序列化/未保存。

2

只读属性:1. 只读属性如图所示,只有getter,或者setter为私有。2. 对于这种情况,我们需要修改ExposeProperties代码,3. 第一处修改是修改其生成EditorGUILayout的过程,仅生成一个LabelField简单的显示属性的字符串形式即可。4. 第二处修改是GetProperties函数,所有可读的属性都处理即可。

注意事项

如果遇到问题,可以在下面提出疑问。

推荐信息