FloatFieldの作成 その2(Editor拡張)

FloatFieldの作成 その2(Editor拡張)

 以前にFloatFieldを作成した際(FloatFieldの作成)、横幅の計算にEditorWindow.positionを用いていました。しかし、スクロールバーが表示された場合、EditorWindow.positionはウィンドウの幅をであるためFloatFieldがスクロールバーで隠れてしまいます。そこで、横幅の計算をGUILayoutUtility.GetRectへ変更し、さらにPrefixLabelを使用する等の変更を行いました。

Script

 作成したScriptは以下の通りです。新たにクラスを作成し、様々な場合に対応できるよう、複数のFloatFieldを作成しました。

 テキストエリア部分の大きさを65と固定し、コントロール全体の幅をウィンドウ幅としています。コントロールの描画領域をGUILayoutUtility.GetRectを用いて取得しているため、スクロールバーが表示された場合にはそれに応じて横幅が調整された描画領域を取得できます。

 先程と同様にテキストエリアの幅は65に固定されていますが、GUILayoutOptionによってコントロール全体の幅等を変更すことができます。

 今まで固定されていたテキストエリアの幅を変更できるようにしています。コントロール全体の幅はウィンドウの幅となります。

 先程と同様にテキストエリアの幅を変更ができます。また、GUILayoutOptionによってコントロール全体の幅等を変更できるようにしています。

 下記Scriptでは、コントロールの位置を左右中央へ調整できるようにしています。位置調整にはGUILayout.FlexibleSpaceを用いており、これはGUILayoutUtility.GetRectで取得できるRectに作用し、スペースを挿入することができます。今回は、水平方向へスペースを挿入したいので、EditorGUILayout.BeginHorizontal()~EditorGUILayout.EndHorizontal()で囲っています。

また、位置の指定には新たに作成した以下の列挙型を用いています。 

以下のScriptでFloatFieldの作成を行っています。EditorGUI.PrefixLabelを用いることで、LabelのGUIStyleを変更する処理を記述する必要がなくなっています。

実行結果

 作成したFloatFieldを実行するScriptは以下の通りです。

このScriptを実行すると以下の結果が得られます。様々なレイアウトのFloatFieldが作成できるようになりました。