topaz-dev’s

ああああああ

GUILayoutoption

Unityのエディタ拡張をリファレンスを見ているとよく出てくるparams GUILayoutOption[] optionsの引数。色々指定できて便利なのでできることをざっとメモ。指定しなくても平気なパラメタだから拘らなければ使う必要は全くない。

// このような形で出てくる。
public static void LabelField(string label, params GUILayoutOption[] options);

出来ること

GUILayoutOptionを指定することで、EditorGUILayoutやGUILayoutを使っていい感じにUnityに描画サイズを決めてもらう時のサイズを変更することが出来る。

GUILayoutOptionの生成方法

公式のリファレンスによると「直接GUILayoutOptionを作成しないで、GUILayoutのstatic関数から生成してくれ!」と書いてある。言われた通りにしておきましょう。使用できる関数は、GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight。となっていて、横幅系4つと縦幅系4つになっている。

使用方法

GUILayoutOptionはparamsを用いた可変長引数で定義されているので、引数に入れたい分だけ羅列していけば良い。可変長引数について分からなければ、未確認飛行Cのサイトがとてもわかりやすくて助かる。
見た目的に囲われてわかりやすいボタンで書いてみる。

        if (GUILayout.Button("height 70のボタン", GUILayout.Height(70)))
        {// 高さの変更
        }
        if (GUILayout.Button("width 200のボタン", GUILayout.Width(200)))
        {// 横幅の変更
        }
        if (GUILayout.Button("width 200,height 70のボタン", GUILayout.Width(200), GUILayout.Height(70)))
        {// 高さと横幅の変更
        }
        if (GUILayout.Button("width 200,800,400のボタン", GUILayout.Width(200), GUILayout.Width(800), GUILayout.Width(400)))
        {// 同じパラメタを設定した場合は最後に指定した値(400)が適用される
        }

表示してみると確かにWidthHeightが適用されていることが分かる。この二つのパラメタは確かに使えそうだと分かったが、MInMax Expandがまだ存在する。またGUILayoutの機能を使っているため要素は縦に並んでいくようになっている。

ボタンなどの要素を横に並べるためにはEditorGUILayout.HorizontalScope()を使えばよい。昔はBeginHorizontalEndHorizontalという関数が使われていたらしい。。。使い方はusingステートメントを使用してブロック内に横に並べたい要素を書いていきます。

        using (var w = new EditorGUILayout.HorizontalScope())
        {
            if (GUILayout.Button("ボタン1"))
            {
            }
            if (GUILayout.Button("ボタン2"))
            {
            }
        }

使用してみるとブロック内の要素数に応じて自動でボタンのサイズを調整してくれます。

ここでMInWidthを使用して左側のボタンの最小の横幅を指定します。これはウィンドウのサイズ自体が変化した時に効力を発揮する等になります。

    GUILayout.Button("ボタン1 : minwidth 200", GUILayout.MinWidth(200))


www.youtube.com

下に並んでいるボタンの左側のボタンだけにMinWidthを設定したんですが、なぜか最初のウィンドウの大きさでのWidthも変更されてしまっています。Unity側がいい感じに設定していそうなのですが、分かる方いましたら教えてください。

MaxWidthはそのままの意味で横幅の最大値を記載することができます。

最後のExpandWidthはデフォルトでtrueになっており、falseを設定することで文字の幅に合わせたサイズのボタンが生成されるようになっています。

        GUILayout.Button("expandWidth : false", GUILayout.ExpandWidth(false)))
        GUILayout.Button("expandWidth : false あああああああああああああああ", GUILayout.ExpandWidth(false)))

まとめ

GUILayoutOptionを使っていい感じの配置を作ることでかっこいいエディタを簡単に作れる。
文字の色などはGUIStyleを使ってさらにかっこよく出来る。今回のGUILayoutOptionはレイアウトを決めるためのものということを理解しておきたい。