Editor
| 变量 | 说明 | 
|---|---|
| serializedObject | A SerializedObject representing the object or objects being inspected. | 
| target | The object being inspected. | 
| targets | An array of all the object being inspected. | 
| 公有函数 | 说明 | 
|---|---|
| DrawDefaultInspector | Draw the built-in inspector. | 
| DrawHeader | Call this function to draw the header of the editor. | 
| DrawPreview | The first entry point for Preview Drawing. | 
| GetInfoString | Implement this method to show asset information on top of the asset preview. | 
| GetPreviewTitle | Override this method if you want to change the label of the Preview area. | 
| HasPreviewGUI | Override this method in subclasses if you implement OnPreviewGUI. | 
| OnInspectorGUI | Implement this function to make a custom inspector. | 
| OnInteractivePreviewGUI | Implement to create your own interactive custom preview. Interactive custom previews are used in the preview area of the inspector and the object selector. | 
| OnPreviewGUI | Implement to create your own custom preview for the preview area of the inspector, primary editor headers and the object selector. | 
| OnPreviewSettings | Override this method if you want to show custom controls in the preview header. | 
| RenderStaticPreview | Override this method if you want to render a static preview that shows. | 
| Repaint | Repaint any inspectors that shows this editor. | 
| RequiresConstantRepaint | Does this edit require to be repainted constantly in its current state? | 
| UseDefaultMargins | Override this method in subclasses to return false if you don't want default margins. | 
| 静态方法 | 说明 | 
|---|---|
| CreateCachedEditor | On return previousEditor is an editor for targetObject or targetObjects. The function either returns if the editor is already tracking the objects, or Destroys the previous editor and creates a new one. | 
| CreateEditor | Make a custom editor for targetObject or targetObjects. | 
| Messages | 说明 | 
|---|---|
| OnSceneGUI | Enables the Editor to handle an event in the scene view. | 
示例:
    using UnityEngine;
    using System.Collections;
    // This is not an editor script.
    public class MyPlayer : MonoBehaviour {
        public int armor = 75;
        public int damage = 25;
        public GameObject gun;
        void Update () {
        // Update logic here...
        }
    }

    using UnityEditor;
    using UnityEngine;
    using System.Collections;
    // Custom Editor using SerializedProperties.
    // Automatic handling of multi-object editing, undo, and prefab overrides.
    [CustomEditor(typeof(MyPlayer))]
    [CanEditMultipleObjects]
    public class MyPlayerEditor : Editor {
        SerializedProperty damageProp;
        SerializedProperty armorProp;
        SerializedProperty gunProp;
        void OnEnable () {
            // Setup the SerializedProperties.
            damageProp = serializedObject.FindProperty ("damage");
            armorProp = serializedObject.FindProperty ("armor");
            gunProp = serializedObject.FindProperty ("gun");
        }
        public override void OnInspectorGUI() {
            // Update the serializedProperty - always do this in the beginning of OnInspectorGUI.
            serializedObject.Update ();
            // Show the custom GUI controls.
            EditorGUILayout.IntSlider (damageProp, 0, 100, new GUIContent ("Damage"));
            // Only show the damage progress bar if all the objects have the same damage value:
            if (!damageProp.hasMultipleDifferentValues)
                ProgressBar (damageProp.intValue / 100.0f, "Damage");
            EditorGUILayout.IntSlider (armorProp, 0, 100, new GUIContent ("Armor"));
            // Only show the armor progress bar if all the objects have the same armor value:
            if (!armorProp.hasMultipleDifferentValues)
                ProgressBar (armorProp.intValue / 100.0f, "Armor");
            EditorGUILayout.PropertyField (gunProp, new GUIContent ("Gun Object"));
            // Apply changes to the serializedProperty - always do this in the end of OnInspectorGUI.
            serializedObject.ApplyModifiedProperties ();
        }
        // Custom GUILayout progress bar.
        void ProgressBar (float value, string label) {
            // Get a rect for the progress bar using the same margins as a textfield:
            Rect rect = GUILayoutUtility.GetRect (18, 18, "TextField");
            EditorGUI.ProgressBar (rect, value, label);
            EditorGUILayout.Space ();
        }
    }
另外,如果自动处理多对象编辑、撤销、和预制重写是不需要的,脚本变量可以直接修改由编辑器不使用serializedobject和serializedproperty系统,如下面的例子。
    using UnityEditor;
    using UnityEngine;
    using System.Collections;
    // Example script with properties.
    public class MyPlayer : MonoBehaviour {
        public int damage;
        public int armor;
        public GameObject gun;
        // ...other code...
    }
    // Custom Editor the "old" way by modifying the script variables directly.
    // No handling of multi-object editing, undo, and prefab overrides!
    [CustomEditor (typeof(MyPlayer))]
    public class MyPlayerEditor : Editor {
        public override void OnInspectorGUI () {
            MyPlayer mp = (MyPlayer)target;
            mp.damage = EditorGUILayout.IntSlider ("Damage", mp.damage, 0, 100);
            ProgressBar (mp.damage / 100.0f, "Damage");
            mp.armor = EditorGUILayout.IntSlider ("Armor", mp.armor, 0, 100);
            ProgressBar (mp.armor / 100.0f, "Armor");
            bool allowSceneObjects = !EditorUtility.IsPersistent (target);
            mp.gun = (GameObject)EditorGUILayout.ObjectField ("Gun Object", mp.gun, typeof(GameObject), allowSceneObjects);
        }
        // Custom GUILayout progress bar.
        void ProgressBar (float value, string label) {
            // Get a rect for the progress bar using the same margins as a textfield:
            Rect rect = GUILayoutUtility.GetRect (18, 18, "TextField");
            EditorGUI.ProgressBar (rect, value, label);
            EditorGUILayout.Space ();
        }
    }
    void OnSceneGUI()
    {
        m_pEvent = Event.current;
        if (m_pEvent.type == EventType.mouseDown && m_pEvent.button == 1) {
            Ray ray = HandleUtility.GUIPointToWorldRay(m_pEvent.mousePosition);
            if(isAddNode && Physics.Raycast(ray, out hit))
            {
                GameObject go = GameObject.CreatePrimitive(PrimitiveType.Cube);
                go.transform.position = hit.point;
                go.transform.SetParent(emiter.transform);
            }
        }
        GUILayout.BeginArea (new Rect (Screen.width - 200, Screen.height - 100, 100, 50));
        isAddNode = GUILayout.Toggle (isAddNode, "isAddNode");
        GUILayout.EndArea ();
    }
🔚