在这一篇Unity C#教程中,将在编辑器中创建一个自定义可视化序列和列表。你将学会:
这个教程适用于Unity4.3版本或以上。老版本的可以点击这里here。
自定义列表
创建测试数据
Unity默认的列表展示是可用的,但是你也可以选择自定义列表。具体细节因人而异。所以使用不同的可视化组合是非常有用的。通过给变量添加属性来具体指定编辑器如何显示它们。
我们以完成的自定义数据教程项目开始,或者创建一个新的项目并导入custom-data.unitypackage。
然后创建一个新的测试脚本,命名为ListTester ,其中有些测试序列,并用它制作一个新的预制以及预制实例,这样我们就能看到它按预期工作了。
1
2
3
4
5
6
7
8
9
10
11
12
|
using UnityEngine;
public class ListTester : MonoBehaviour {
public int[] integers;
public Vector3[] vectors;
public ColorPoint[] colorPoints;
public Transform[] objects;
}
|
新的测试对象,有着宽阔的inspector.
创建自定义Inspector
自定义列表首先要为测试组件创建自定义Inspector。创建一个C#脚本,在Editor文件夹中命名为ListTesterInspector ,作为拓展的UnityEditor.Editor,并应用UnityEditor.CustomEditor 属性,告诉Unity我们想要给组件绘图。
1
2
3
4
5
6
|
using UnityEditor;
using UnityEngine;
[CustomEditor( typeof (ListTester))]
public class ListTesterInspector : Editor {
}
|
自定义inspector脚本
为了真正改变inspector,我们需要重写Editorclass的OnInspectorGUI方法。如果该方法是空的,那么inspector也将是空的。
1
2
|
public override void OnInspectorGUI () {
}
|
空的inspector.
属性抽屉(property drawer)和编辑器(editor.)之间有三大不同点。
我们可以通过serializedObject属性序列化对象。为了准备它用来编辑,首先要把它与它所代表的组件同步,通过调用它的Update方法。然后就可以展示属性了。在我们做完之后,需要通过ApplyModifiedProperties方法提交所有修改。这将照看到Unity所有的撤销历史记录。在这两者之间我们将绘制属性。
1
2
3
4
5
6
7
8
|
public override void OnInspectorGUI () {
serializedObject.Update();
EditorGUILayout.PropertyField(serializedObject.FindProperty( "integers" ));
EditorGUILayout.PropertyField(serializedObject.FindProperty( "vectors" ));
EditorGUILayout.PropertyField(serializedObject.FindProperty( "colorPoints" ));
EditorGUILayout.PropertyField(serializedObject.FindProperty( "objects" ));
serializedObject.ApplyModifiedProperties();
}
|
空属性的Inspector
该字段再次可见了,但是它们是空的。这是因为PropertyField 不展示任何具体选项,就像序列元素一样,除非我们告诉它这么做。
1
2
3
4
5
6
7
8
|
public override void OnInspectorGUI () {
serializedObject.Update();
EditorGUILayout.PropertyField(serializedObject.FindProperty( "integers" ), true );
EditorGUILayout.PropertyField(serializedObject.FindProperty( "vectors" ), true );
EditorGUILayout.PropertyField(serializedObject.FindProperty( "colorPoints" ), true );
EditorGUILayout.PropertyField(serializedObject.FindProperty( "objects" ), true );
serializedObject.ApplyModifiedProperties();
}
|
有具体选项的Inspector
原文链接:http://catlikecoding.com/unity/tutorials/editor/custom-list/
建议使用电驴(eMule)下载分享的资源。
说明:本教程来源互联网或网友分享或出版商宣传分享,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
|