AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 内蒙古时时彩平台 > Unity3D

【Unity C#编程】自定义编辑器(一)

内蒙古时时彩平台 2014-05-24 //www.3rmtj.cn

在这一篇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,而不是单独的SerializedProperty。
  • 第二:只要对象保持选定,编辑器实例就会存在,保持引用它的数据,而不是通过方法参数得到它。
  • 第三:我们可以使用EditorGUILayout,这个会自动为我们定位位置。

我们可以通过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

原文链接://catlikecoding.com/unity/tutorials/editor/custom-list/


建议使用电驴(eMule)下载分享的资源。

说明
:本教程来源互联网或网友分享或出版商宣传分享,仅为学习研究或媒体推广,www.3rmtj.cn不保证资料的完整性。
 
上一篇:【Unity C#编程】自定义编辑器(二)  下一篇:Unity动态字体文字破碎的解决方法(Dynamic Font Broken)
  • 王国平应邀为杭州市农村历史建筑保护研讨会作专题讲座 2019-04-21
  • 中国这次强硬反击,传递了四个意味深长的信号! 2019-04-18
  • 黄紫昌独造5球给出最好榜样 张玉宁确定不回国吗? 2019-04-18
  • 特朗普是个典型的笑面虎,当面笑嘻嘻,底下捅刀子 2019-04-08
  • 过端午节要有“三味” 2019-04-08
  • 从拍场“老面孔”论投资的风险和机遇 2019-04-02
  • 5月份61城房价环比反弹 多地调控政策或再加码 ——凤凰网房产北京 2019-04-01
  • 因为中国人最朴素的观念就是安居乐业。家,是人立身之地,是所有努力可以得到支撑的基础,是所有固守能够成功反击的前提。这是游牧民族永远干不动搞不定这个民族的原因。它 2019-04-01
  • 回复@笑傲江湖V:七千二百多吧。 2019-03-30
  • 次仁卓玛一家的端午节 2019-03-30
  • 北欧的千湖之国被选为2018全球最幸福国家 2019-03-25
  • 东鹏控股拟发行1.5亿A股,二次上市进程加快 2019-03-23
  • 筑梦命运共同体 习近平的上合日历 2019-03-22
  • 劳动者能不能炒老板的鱿鱼?答案是不能 2019-03-20
  • 《今天我学习》第一集:如何理解党的十九大的鲜明主题 2019-03-18
  • 651| 449| 803| 405| 499| 954| 976| 250| 600| 604|