Unityで値を触りやすいデータを作ろう -拡張編-

こんにちは。インターン生の東谷太喜です。

本日は、ScriptableObjectのEditor拡張について書いていきます。

前回のデータを見やすく、使いやすいように改良していきます。

拡長編では、最終的にここまで説明していこうと思います。

1.Editorフォルダを作成・Scriptの作成

Editor拡張は必ず「Editor」という名前のフォルダ内にScriptを置かないといけません。

Editorフォルダ内に新しいフォルダを作成し、その中にScriptを置いても大丈夫です。

なので、カテゴリ毎に分けることをお勧めします。

作成したScriptの名前は、自由にして大丈夫です。私は「StageDataEditor」にします。

作成後はScriptを開いてください。

2.Editor拡張の準備

作成し、開いたScriptを編集していきます。

Script内、クラス宣言の上部に書かれている using の欄に新しく1行追加します。

using UnityEditor;
を新しく追加してください。

その後、クラスの宣言の上の行に

[CustomEditor(typeof(拡張したいクラス名))]
を書きます。

拡張したいクラス名 の場所は前回の記事に作成したクラスを書きます。

そして、継承先を「Monobehaviour」から

Editor
にします。

これでエディタ拡張の準備はできました。

3.OnInspectorGUIの作成
インスペクターの表示をしている関数を書きます。

public override void OnInspectorGUI() {}
関数を作成した際に「base.OnInspectorGUI()」が自動生成されます。

3.5では、その説明をしていきます。

3.5. OnInspectorGUI の必要な知識

まずインスペクターのEditor拡張をする上で、知っておく必要がある関数の説明をしていきます。

base.OnInspectorGUI();
元々インスペクターに表示されてた内容をこれで表示させてるという認識で大体はあってると思います。

厳密には、この関数は拡張対象であるクラス内のインスペクター表示処理を呼び出しています。

なので消した場合、拡張対象が表示をしているインスペクター内の表示が全て消えます。

今回は元のインスペクターの表示をする予定はないので、コメントアウトしておきます。

serializedObject.Update();
この関数はシリアライズされたオブジェクトの最新データを取得する関数です。

この関数を書いておかないと、表示されるデータがおかしくなることがあるので書いておきます。

serializedObject.ApplyModifiedProperties();
この関数は内部キャッシュに変更点を保存する関数です。

インスペクター上で値を変更してに、この関数を書いていない場合は値が保存されませんので書いておきます。

4.OnInspectorGUIの編集

最初に、3.5で説明した2つの関数を書きます

serializedObject.Update();
serializedObject.ApplyModifiedProperties();
書く場所はこの2つの関数の間の行です。

処理の順番を間違えた場合に値が変わらない、保存されない可能性があるので注意してください。

まずはこの2行を追加し、スコアを1行だけ表示させてみましょう。

var serialized = serializedObject.FindProperty(“拡張したいクラスに存在する変数名”);
EditorGUILayout.PropertyField(serialized);
私の場合は、「”拡張したいクラスに存在する変数名”」の場所を、「”goalScore”」としました。

今回はここまでにしようと思います。

次回はUnityで値を触りやすいデータを作ろう -拡張編2-です。

インターンシップへの申し込み・お問い合わせ先

インターンシップへの申し込み・お問い合わせ先
メールでのお問い合わせは、下記フォームに入力して送信してください。
ご氏名 (例)山田 太郎
メールアドレス 半角英数字:ご入力間違いのないようにご注意ください
メールアドレス(確認用) 半角英数字:ご入力間違いのないようにご注意ください
電話番号 (例)0354339211 ※ハイフン抜きで入力してください
題名
お問合わせ内容

アーカイブ

カテゴリー