Version: 5.3 (switch to 5.4b)
언어English
  • C#
  • JS

Script language

Select your preferred scripting language. All code snippets will be displayed in this language.

Editor

class in UnityEditor

/

Inherits from:ScriptableObject

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

닫기

Submission failed

For some reason your suggested change could not be submitted. Please <a>try again</a> in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

닫기

취소

Switch to Manual

Description

Base class to derive custom Editors from. Use this to create your own custom inspectors and editors for your objects.

Consider a script MyPlayer with variables for armor, damage, and a reference to a gun GameObject:


        
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 a custom Editor, the apperance of the script in the Inspector can be changed, for example to look like this:


Custom editor in the Inspector.

You can attach the Editor to a custom component by using the CustomEditor attribute.

There are multiple ways to design custom Editors. If you want the Editor to support multi-object editing, you can use the CanEditMultipleObjects attribute. Instead of modifying script variables directly, it's advantageous to use the SerializedObject and SerializedProperty system to edit them, since this automatically handles multi-object editing, undo, and prefab overrides. If this approach is used a user can select multiple assets in the hierarchy window and change the values for all of them at once.


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

Alternatively, if automatic handling of multi-object editing, undo, and prefab overrides is not needed, the script variables can be modified directly by the editor without using the SerializedObject and SerializedProperty system, as in the example below.


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

Variables

serializedObjectA SerializedObject representing the object or objects being inspected.
targetThe object being inspected.
targetsAn array of all the object being inspected.

Public Functions

DrawDefaultInspectorDraw the built-in inspector.
DrawHeaderCall this function to draw the header of the editor.
DrawPreviewThe first entry point for Preview Drawing.
GetInfoStringImplement this method to show asset information on top of the asset preview.
GetPreviewTitleOverride this method if you want to change the label of the Preview area.
HasPreviewGUIOverride this method in subclasses if you implement OnPreviewGUI.
OnInspectorGUIImplement this function to make a custom inspector.
OnInteractivePreviewGUIImplement to create your own interactive custom preview. Interactive custom previews are used in the preview area of the inspector and the object selector.
OnPreviewGUIImplement to create your own custom preview for the preview area of the inspector, primary editor headers and the object selector.
OnPreviewSettingsOverride this method if you want to show custom controls in the preview header.
RenderStaticPreviewOverride this method if you want to render a static preview that shows.
RepaintRepaint any inspectors that shows this editor.
RequiresConstantRepaintDoes this edit require to be repainted constantly in its current state?
UseDefaultMarginsOverride this method in subclasses to return false if you don't want default margins.

Static Functions

CreateCachedEditorOn 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.
CreateEditorMake a custom editor for targetObject or targetObjects.

Messages

OnSceneGUILets the Editor handle an event in the scene view.

Inherited members

Variables

hideFlags오브젝트가 숨겨져있는 상태인지, 씬에 저장된 상태인지, 또는 사용자에 의해서 수정가능한 상태인지를 확인합니다.
name오브젝트의 이름을 나타냅니다.

Public Functions

GetInstanceID오브젝트의 인스턴스 ID를 반환합니다.
ToString게임 오브젝트의 이름을 반환합니다.

Static Functions

Destroy게임오브젝트, 컴포넌트나 애셋을 삭제합니다.
DestroyImmediate obj 오브젝트를 즉시 파괴합니다. Destroy를 사용하는 것을 추천합니다.
DontDestroyOnLoad새로운 Scene이 로드될때 자동으로 파괴되지 않는 target 오브젝트를 만듭니다.
FindObjectOfType첫번째 활성화한 로드된 type 타입의 오브젝트를 반환합니다.
FindObjectsOfType모든 활성화한 로드된 type 타입의 오브젝트 리스트를 반환합니다.
Instantiate오브젝트의 인스턴스 ID를 반환합니다.
CreateInstance/T/를 사용해서 scriptable 오브젝트의 인스턴스를 생성합니다.

Operators

boolDoes the object exist?
operator !=Compares if two objects refer to a different object.
operator ==Compares two object references to see if they refer to the same object.

Messages

OnDestroyscriptable 오브젝트가 제거될 때 호출됩니다.
OnDisablescriptable 오브젝트가 범위 밖으로 가는 경우에 호출됩니다.
OnEnable해당 오브젝트가 로드될 때 호출됩니다.