Version: 5.3 (switch to 5.4b)
言語English
  • C#
  • JS

スクリプト言語

好きな言語を選択してください。選択した言語でスクリプトコードが表示されます。

Editor

class in UnityEditor

/

継承:ScriptableObject

フィードバック

ありがとうございます

この度はドキュメントの品質向上のためにご意見・ご要望をお寄せいただき、誠にありがとうございます。頂いた内容をドキュメントチームで確認し、必要に応じて修正を致します。

閉じる

送信に失敗しました

なんらかのエラーが発生したため送信が出来ませんでした。しばらく経ってから<a>もう一度送信</a>してください。ドキュメントの品質向上のために時間を割いて頂き誠にありがとうございます。

閉じる

キャンセル

マニュアルに切り替える

説明

カスタムエディターを派生する基本クラス。これを使用して独自のインスペクターとオブジェクト用のエディターを作成します。

鎧や、ダメージ、銃の GameObject へ参照する変数のスクリプト MyPlayer があるとします。


        
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... } }

カスタムエディターを使用して、インスペクター上のスクリプトの表示を例えば次のように変更することができます。


インスペクターのカスタムエディター

エディターをカスタムのコンポーネントにアタッチするために CustomEditor 属性を使用できます。

カスタムエディターを設計するには複数の方法があります。 エディターが複数オブジェクトの編集をサポートするためには CanEditMultipleObjects 属性を使用できます。 スクリプト変数を直接編集する代わりに、SerializedObjectSerializedProperty システムを使用するほうが マルチオブジェクト編集のハンドリングや取り消し、プレハブの上書きができるというメリットがあります。このアプローチをユーザーが使用する場合、ヒエラルキーウィンドウで複数のオブジェクトを選択し、一度にすべてのオブジェクトの値を変更することができます。


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

代わりに、もしマルチオブジェクト編集のハンドリングや取り消し、 プレハブの上書きを必要としない場合、スクリプト変数は SerializedObjectSerializedProperty を使用せずに 次のサンプルのようにエディター上で直接編集できます。


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

変数

serializedObjectobject や objects の SerializedObject
targetターゲットとなるオブジェクト
targets複数選択された場合のターゲットとなるオブジェクト群

Public 関数

DrawDefaultInspectorデフォルトのインスペクターを描画します
DrawHeaderEditor のヘッダーを描画するためにはこの関数を呼び出します。
DrawPreviewプレビュー描画するための最初のエントリーポイントです。
GetInfoStringプレビューにアセットの情報を表示するにはこのメソッドを使用します。
GetPreviewTitleプレビューのタイトルを変更したい場合はこのメソッドをオーバーライドします。
HasPreviewGUIOnPreviewGUI を実装する場合は Editor を継承したクラスでオーバーライドします。
OnInspectorGUIカスタムインスペクターを作成するためにこの関数を実装します
OnInteractivePreviewGUI自身のカスタムのインタラクティブなプレビューを作成するために実装します。カスタムのインタラクティブなプレビューはインスペクター上のプレビューエリアとオブジェクト選択ツールで使用されます
OnPreviewGUI自身のカスタムのプレビューをインスペクター上のプレビューエリア、プライマリ Editor ヘッダーとオブジェクト選択ツールで作成するために実装します。
OnPreviewSettingsプレビューのヘッダーを自由にカスタマイズしたい場合にオーバーライドして使用します。
RenderStaticPreview表示する静的なプレビューを描画したい場合、このメソッドを上書きします。
Repaintこの Editor を表示しているインスペクターを再描画させます。
RequiresConstantRepaintこの編集結果は現在の状態で常に再描画される必要があるかどうか。
UseDefaultMarginsデフォルトのマージンを取らせたくない場合、Editor を継承したクラスでメソッドをオーバーライドし、false を返すようにします

Static 関数

CreateCachedEditor previousEditor は targetObject か targetObjects のためのエディターです。エディターがすでにオブジェクトを追跡しているか previousEditor を破棄して新しいのを作成する場合に関数はどちらかを返します。
CreateEditor targetObject や複数の targetObjects のためのカスタムエディターを作成します。

メッセージ

OnSceneGUIEditor がシーンビューでイベントの処理が可能となります

継承メンバー

変数

hideFlagsオブジェクトは非表示、シーンに保存、ユーザーが編集可能、などを設定する。
nameオブジェクト名

Public 関数

GetInstanceIDオブジェクトのインスタンス ID を返します
ToStringゲームオブジェクトの名前を返します

Static 関数

Destroyゲームオブジェクトやコンポーネント、アセットを削除します
DestroyImmediate直ちにオブジェクトを破壊する (Destroy 関数の方を使うことを推奨します)
DontDestroyOnLoad新しいシーンを読み込んでもオブジェクトが自動で破壊されないように設定します
FindObjectOfTypeタイプ type から最初に見つけたアクティブのオブジェクトを返します
FindObjectsOfTypeタイプから見つけたすべてのアクティブのオブジェクト配列を返します
Instantiateオブジェクト original のコピーを返します
CreateInstanceScriptableObject のインスタンスを作成します。

Operator

boolオブジェクトが存在するかどうか
operator !=二つのオブジェクトが異なるオブジェクトを参照しているか比較します
operator ==2つのオブジェクト参照が同じオブジェクトを参照しているか比較します。

メッセージ

OnDestroyScriptableObject が破棄されるとき、この関数は呼び出されます。
OnDisableScriptableObject クラスのオブジェクトがスコープを外れるとき、この関数は呼び出されます。
OnEnableオブジェクトがロードされたとき、この関数は呼び出されます。