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#編程】自定義編輯器(一)

51自學網 2014-05-24 http://www.0532cf.com

在這一篇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

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


建議使用電驢(eMule)下載分享的資源。

說明
:本教程來源互聯網或網友分享或出版商宣傳分享,僅為學習研究或媒體推廣,51zixue.net不保證資料的完整性。
 
上一篇:【Unity C#編程】自定義編輯器(二)  下一篇:Unity動態字體文字破碎的解決方法(Dynamic Font Broken)
彩客网 台中 | 博罗 | 驻马店 | 通化 | 西双版纳 | 澳门澳门 | 滨州 | 景德镇 | 宁波 | 宜春 | 正定 | 桐城 | 鞍山 | 图木舒克 | 阿坝 | 象山 | 随州 | 海拉尔 | 如皋 | 海丰 | 鄢陵 | 岳阳 | 辽阳 | 威海 | 陵水 | 酒泉 | 牡丹江 | 广西南宁 | 三门峡 | 株洲 | 榆林 | 阳泉 | 晋城 | 吉安 | 桐乡 | 巴彦淖尔市 | 江门 | 德宏 | 龙岩 | 宣城 | 乌海 | 巢湖 | 温州 | 汕头 | 临海 | 甘肃兰州 | 凉山 | 大兴安岭 | 章丘 | 眉山 | 沛县 | 新余 | 淄博 | 鞍山 | 南安 | 汝州 | 茂名 | 眉山 | 三沙 | 宜宾 | 新乡 | 北海 | 宣城 | 张家界 | 大庆 | 东营 | 宿州 | 朔州 | 盐城 | 黑河 | 晋城 | 和县 | 三亚 | 泰州 | 梧州 | 安徽合肥 | 灌南 | 海南海口 | 吴忠 | 黔东南 | 锦州 | 泉州 | 大庆 | 广元 | 曹县 | 邹平 | 义乌 | 厦门 | 阿克苏 | 新泰 | 汉中 | 湘西 | 惠州 | 大丰 | 临沧 | 澳门澳门 | 六盘水 | 金坛 | 莱州 | 铁岭 | 北海 | 株洲 | 达州 | 亳州 | 淮安 | 青州 | 靖江 | 燕郊 | 南安 | 阳江 | 宜昌 | 德阳 | 忻州 |