<strong id="33j4t"><kbd id="33j4t"></kbd></strong><span id="33j4t"><pre id="33j4t"></pre></span>
<em id="33j4t"></em>
    1. 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.yctjnk.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)
      亚洲第一网站男人都懂2021,中文字幕无码久久精品,大胸美女又黄又w网站,全免费a级毛片免费看