<em id="lwy0s"></em>
      1. <div id="lwy0s"></div>
      2. 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.40288265.com

        在这一篇Unity C#教程中£¬将在编辑器中创建一个自定义可视化序列和列表¡£你将学会£º

        这个教程?#35270;?#20110;Unity4.3版本或以上¡£?#20064;?#26412;的可以点击这里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£©下载分享的?#35797;µA?br>
        ?#24471;?/font>
        £º本教程来源互联网或网友分享或出版商宣传分享£¬仅为学习研究或?#25945;?#25512;广£¬51zixue.net不保证资料的完整性¡£
        ¡¡
        上一篇£º¡¾Unity C#编程¡¿自定义编辑器£¨二£©  下一篇£ºUnity动态字体文?#21046;?#30862;的解决方法(Dynamic Font Broken)
        ±±¾©11Ñ¡5¼¼ÇÉ

            <em id="lwy0s"></em>
          1. <div id="lwy0s"></div>

                <em id="lwy0s"></em>
              1. <div id="lwy0s"></div>