夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

UnityEditor拡張でオブジェクトのレイアウトを行う機能を実装する その②配置間隔の定義

本日はUnity枠です。

昨日作成したオブジェクトをレイアウトするエディタ拡張を調整していきます。

redhologerbera.hatenablog.com

〇環境

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);
        }
        
    }

これによって任意の間隔を与えてレイアウトを行えるようになりました。

本日は以上です。