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 属性を使用できます。
スクリプト変数を直接編集する代わりに、SerializedObject や SerializedProperty システムを使用するほうが
マルチオブジェクト編集のハンドリングや取り消し、プレハブの上書きができるというメリットがあります。このアプローチをユーザーが使用する場合、ヒエラルキーウィンドウで複数のオブジェクトを選択し、一度にすべてのオブジェクトの値を変更することができます。
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 ();
}
}
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 ();
}
}
Static 関数
CreateCachedEditor |
previousEditor は targetObject か targetObjects のためのエディターです。エディターがすでにオブジェクトを追跡しているか previousEditor を破棄して新しいのを作成する場合に関数はどちらかを返します。 |
CreateEditor |
targetObject や複数の targetObjects のためのカスタムエディターを作成します。 |
継承メンバー
メッセージ
OnDestroy | ScriptableObject が破棄されるとき、この関数は呼び出されます。 |
OnDisable | ScriptableObject クラスのオブジェクトがスコープを外れるとき、この関数は呼び出されます。 |
OnEnable | オブジェクトがロードされたとき、この関数は呼び出されます。 |