[Unity3D][C#][Unity:Editor]GUILayout/EditorGUILayout/ObjectFieldまとめ

UnityEditorの出題2とGUILayoutやらEditorGUILayoutやら

引き続き、Editor拡張の会の出題と解答を参考に作成してます。

CodeIQにも出題されているのでやってみると面白いと思います。
日本Androidの会 秋葉原支部 Unity部 安藤 圭吾さんの問題に挑戦中!

[wp_ad_camp_1]

Q 2

  • お題:EditorWindow
    • ウィンドウを出現させて各パラメータの調整項目を出現させてね!
  1. EditorWindow継承クラスをGetWindow、またはCreateWindowで出現させる。
  2. OnGUIイベント内でEditorGUILayoutを使ってパラメータの反映をさせるためのUIを作成する記述をする。

GUILayoutはUnityの用意したゲーム画面用のGUIでやたらと重いクラス。
とはいえ3Dをバリバリ使う事が無ければそれほど気にならない。
GUILayoutにEditro部分のように描画させようとしても記述が増えてしまう。

EditorGUILayoutに名前部分の記述をさせるとこうなる

this.name = EditorGUILayout.TextField("名前",this.name);
EditorGUILayoutだとこんなにシンプル。
実際に表示される内容は、項目名と入力ボックス。入力をすると自動的に参照先に上書きされる。

GUILayoutに同じ事やらせるとこうなる

GUILayout.BeginHorizontal();<br />
GUILayout.Label("名前");<br />
this.str = GUILayout.TextField("Default Name");<br />
GUILayout.EndHorizontal();

お分かりいただけただろうか…。長い。

ただ、UnityEngine内にあるし、ゲーム画面側にも描画できるので覚えて居た方が良い。
実機デバッグでむちゃくちゃ重宝する。

そしてwindow.Show();は忘れずに。

Q 2 Pratical

  • 追加:基礎編に追加でテクスチャをD&Dする矩形を設けてくださいな。
    解答例

できませんでした。

回答例から何をすべきだったかを導きだす。
– テクスチャ格納メンバの追加
– テクスチャ格納領域の表示

テクスチャはUnityEngine.Texture2Dを使用することで解決できるが、問題はDrag&Dropする領域。
EditorGUILayoutを見てみるとオブジェクトを格納できるのは1つだけ。
EditorGUILayout.ObjectFieldを参照してみる。

実際、出題中もここは確認したのだけれど、そもそも格納メンバがTexture2Dというところまで到達できていなかったので、この項目を使うべきだとは思わなかった。これはUnityが用意しているObject型に対する造詣がまだまだ甘かったということの証左。精進します。

“`
Texture2D texture;

texture = (Texture2D)EditorGUILayout.ObjectField(texture, typeof(Texture2D), false, GUILayout.Width(64), GUILayout.Height(64));

“`

回答例をみてみると、EditorGUILayout.ObjectFieldの表示サイズを変更している。
第四引数、第五引数だ。これについては後述する。

ObjectFieldの引数について

ドキュメントの丸写しだけれども。
– label
– フィールドの戦闘にだすためのラベル
– obj
– 実際にターゲットになるオブジェクト
– objType
– オブジェクトのタイプ
– allowSceneObjects
– シーン内のオブジェクトを受け入れるか否か。後述。
– options
– 次の項目で解説。

allowSceneObjectsについて

これをfalseにすると、assetの一部のオブジェクトを参照していた場合、assetはシーン内の参照を保持する事は出来ない。
– ※訳あってんのか…?

試しにGameObjectを格納することができるフィールドを用意して試してみたところ、Trueにするとシーン内(Hierarchy)内からD&Dすることができ、selectボタンをクリックした際もAssetsとSceneが選択できる。
逆にfalseにするとDrag&Dropをしようにも矩形は反応してくれないし、selectボタンをクリックしてもAssetsのみしかタブが表示されない。

つまり、そういうこと。

Gitポケットリファレンス

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です