top of page
BTA(Kelorin Jo)

エディタ拡張で配列変数の入力欄を出すには

更新日:2020年1月14日


普通ならpublicにしとけばインスペクタに即出る配列変数やリストですが、

エディタ拡張で自作ウィンドゥから出そうとするとアホみたいに難易度が上がる。

少なくとも日本語の記事を検索したら長いコードばっかだったのでびびりますが、

英語のフォーラムで、これはというのがあったので控えます。

(エディタ拡張の質問では高確率で「変数ならパブリックてつければインスペクタに表示されるよ(ニッコリ)」「エディタ拡張の話だっつってんだろ!」なやり取りがあるのはテンプレかなにか?)

このコード、特定の型の変数だけでなく、汎用的に使えるぽいすぐれものでした。

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor;

public class MyEditorWindow : EditorWindow { [MenuItem("Window/My Editor Window")] public static void ShowWindow() { GetWindow<MyEditorWindow>(); }

//↑メニュー追加とウィンドゥ開くためのテンプレ

//↓ここから本編

public GameObject[] AThings ;

void OnGUI() { ScriptableObject target = this; SerializedObject so = new SerializedObject(target); SerializedProperty stringsProperty = so.FindProperty("AThings");

EditorGUILayout.PropertyField(stringsProperty, true); so.ApplyModifiedProperties(); } }

この

public GameObject[] AThings ;

public 変数の型[] 変数名 ;

SerializedProperty stringsProperty = so.FindProperty("AThings");

SerializedProperty stringsProperty = so.FindProperty("変数名");

この2つを変更するだけでいいなんて。エディタ拡張にしちゃ融通がきくじゃない

追記…エディタ拡張ってスクリプタブルオブジェクトの一種なのね?

そして""でくくった変数はスクリプタブルオブジェクトの中のプロパティ扱い

stringsProperty は、命名には意味ないただの変数なのね?なるほどわからん

・追記

自作クラスも、テンプレにちょっと追加したら使えました。

1.まずクラスの設定の前に[System.Serializable]をつける

2.自作クラスの定義の変数はすべてpublic

3.List<自作クラス名>の前に[SerializeField] もつける

4.上記の配列のテンプレの一節

EditorGUILayout.PropertyField(objectProperty,, true);

EditorGUILayout.PropertyField(objectProperty, new GUIContent("好きなリスト名"), true);

に。

これでクラスにも対応できました。

というかクラスの中にさらに配列変数があってもあっさり入力欄が出てくれて、変数単体は入力GUI出すだけであんなに苦しんだのに、なんであっさり出るんだよという気持ちに。

まあクラスを入力して、セッターで送る工程でまたいろいろ詰まるんですが


・入力欄にScriptableObjectを入れたい場合はどうするのか?

ScriptableObjectの型はなんなんだ.ろ?object型でした

またプリセットを書き出して揃えるとこまでいけてないので未検証です

先に進めたら記事を加筆します


・VSでコードを打ち込み保存してもなぜかstringsProperty がnullになってエラーになる時があり、しばらくするとなにかの拍子で何事もなく通るようになる…となった時があったので、なにかデメリットがあるのかも

・配列でないScriptableObjectだったら、テンプレ名(クラス名)=presetとすると

変数名= (Object)EditorGUILayout.ObjectField("", 変数名, typeof(preset), true) as preset;

でいけましたが。入力フォームには同じテンプレのスクしか入れなくなります

閲覧数:6,252回0件のコメント

最新記事

すべて表示

noteはじめました。

というかnoteに移行します。このブログ微妙に使いづらいんですよ https://note.com/funsetmodev 内容は大体同じプログラムの話し多め、時々雑感日常です。

bottom of page