本日はUnity枠です。
昨日作成したオブジェクトをレイアウトするエディタ拡張を調整していきます。
〇環境
・Windows 11PC
・Unity2022.3.21f1
〇間隔の調整
昨日の状態では次のように隙間なくレイアウトされていました。

今回はこのオブジェクトとオブジェクトの隙間を作ります。
まずはどのくらい間隔をあけるかという変数を作成します。
public class ObjectCollection : EditorWindow
{
public GameObject _TargetObj;
public float _spacing;//追加
void OnGUI()
{
//meshオブジェクトをアタッチするGUI
GUILayout.Label("Mesh Object", EditorStyles.boldLabel);//ラベルの定義
_TargetObj = (GameObject)EditorGUILayout.ObjectField("Mesh Object", _TargetObj, typeof(GameObject), true);//フィールドの定義
_spacing = EditorGUILayout.FloatField("Spacing", _spacing); //追加
if (GUILayout.Button("Execute"))
{
if (_TargetObj != null)
{
OnTargetObjectLayoutChanged();
}
}
}
public void OnTargetObjectLayoutChanged()
{
・・・
}
}
これによってFloat型のパラメータspacingが表示されます。

次に_spacingのスペースをもってレイアウトの間隔をあけれるようにします。次のようなコードになります。
public void OnTargetObjectLayoutChanged()
{
//_TargetObjの子オブジェクトをすべて取得して等間隔にオブジェクトを配置
Transform[] children = _TargetObj.GetComponentsInChildren<Transform>();
for (int i = 0; i < children.Length; i++)
{
children[i].position = new Vector3(i * _spacing, 0, 0);
}
}
これによって任意の間隔を与えてレイアウトを行えるようになりました。

本日は以上です。