###前提・実現したいこと
※既存のクラスにInspector拡張処理を追記する方法で、カスタムエディタを作成したいと考えています。
(EditorフォルダにInspector拡張用のクラスを用意しない方法。)
下記のようにコードを作成したのですが、変数iのフィールドがインスペクターに表示されません。
また、変数iはstaticにしないとエラーが起きてしまいます。
質問①:
staticな変数iをインスペクタに表示させるにはどうすればよいでしょうか?
「base.OnInspectorGUI();」を記述すればフィールドがインスペクタに表示される思っていたのですが、
表示されません。
「base.OnInspectorGUI();」は拡張したいコンポーネントのクラスのフィールドを表示するものではないのですか?
質問②:
変数iはstaticにしないと、SampleInspectorクラスからアクセスできないのですか?
このスクリプトをアタッチするゲームオブジェクトをプレハブ化して、staticでないインスタンス変数iにして、
SampleInspectorクラスからそのiにアクセスする方法はありますか?
ご教授のほどよろしくお願いします。
###試したこと
下記のコードを空のゲームオブジェクトにアタッチしました。
C#
1using UnityEngine; 2using System.Collections; 3using UnityEditor; 4 5public class Sample : MonoBehaviour { 6 7 [SerializeField] 8 static int i = 100; //staticでないとエラー?インスペクタに表示されない。 9 10 [CustomEditor(typeof(Sample))] 11 public class SampleInspector : Editor 12 { 13 public override void OnInspectorGUI() 14 { 15 base.OnInspectorGUI(); 16 if (GUILayout.Button("ボタン", GUILayout.Width(80f))) { 17 i+=10; 18 Debug.Log (i); 19 } 20 } 21 } 22}
上記のコードではデバッグはとれていて、iの値は変化しています。
###追記。
staticな変数の場合。
C#
1using UnityEngine; 2using System.Collections; 3using UnityEditor; 4 5public class Sample : MonoBehaviour { 6 7 [SerializeField] 8 //int i = 100; 9 //staticな変数にしてみる。 10 static int j = 50; 11 12 [CustomEditor(typeof(Sample))] 13 public class SampleInspector : Editor 14 { 15 16 //SerializedProperty spi; 17 SerializedProperty spj; 18 19 void OnEnable() 20 { 21 // SerializedProperty取得 22 //spi = serializedObject.FindProperty( "i" ); 23 spj = serializedObject.FindProperty( "j" ); 24 } 25 26 public override void OnInspectorGUI() 27 { 28 // 値の更新 29 serializedObject.Update(); 30 31 base.OnInspectorGUI(); 32 if (GUILayout.Button("ボタン", GUILayout.Width(80f))) { 33 //spi.intValue +=10; 34 spj.intValue += 10; 35 } 36 37 // 値の反映 38 serializedObject.ApplyModifiedProperties(); 39 } 40 } 41}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/11/14 14:14