- Editor
- 示例:
- 示例:
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 ();}
?
