フィールドを並べていくときに、多くのフィールドをスクロールでまとめたい場合はBeginScrollView~EndScrollViewを使います。
EditorGUILayoutSample obj = target as EditorGUILayoutSample; obj.scrollPosition = EditorGUILayout.BeginScrollView (obj.scrollPosition); obj.name = EditorGUILayout.TextField ("name", obj.name); obj.address = EditorGUILayout.TextField ("address", obj.address); obj.intValue = EditorGUILayout.IntField ("intValue", obj.intValue); obj.floatValue = EditorGUILayout.FloatField ("floatValue", obj.floatValue); obj.doubleValue = EditorGUILayout.DoubleField ("doubleValue", obj.doubleValue); obj.boundsValue = EditorGUILayout.BoundsField ("boundsValue", obj.boundsValue); EditorGUILayout.EndScrollView ();
とすると、
こんな感じに。
デフォルトでは下がずいぶん空いてますね。
スクロールバーの位置は第一引数のVector2に記録されるので、それもちゃんと引き継いでいく必要があります。
obj.scrollPosition = EditorGUILayout.BeginScrollView (obj.scrollPosition, GUILayout.Width(200), GUILayout.Height(100));
というように、引数にGUILayout.WidthとGUILayout.Heightを指定してやると、スクロールビューの大きさを調整できます。
また、第二、第三引数にboolを指定してやると、常にスクロールバーを表示するようになります。
bool alwaysShowHorizontal = true; bool alwaysShowVertical = true; obj.scrollPosition = EditorGUILayout.BeginScrollView (obj.scrollPosition, alwaysShowHorizontal, alwaysShowVertical);
第二引数が横、第三引数が縦のバーですね。
どうもこの、幅と高さをインスペクタの自動調整にしている状態だと、フィールドとバーの幅が干渉してどちらかのバーを出すように指示すると両方ともバーがでるようになってしまうようなので、ちょっと高さを指定して見てみます。
bool alwaysShowHorizontal = false; bool alwaysShowVertical = true; obj.scrollPosition = EditorGUILayout.BeginScrollView (obj.scrollPosition, alwaysShowHorizontal, alwaysShowVertical, GUILayout.Height(100));
横のバーだけ消してみます。