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 ();
}
🔚