에디터에서 개발자는 효율적인 게임 레벨 디자인과 시각적 일관성을 위해 오브젝트 위치를 편리하게 정렬해야할 필요가 있습니다. 이번 글에서는 특정 오브젝트를 기준으로 동일한 간격으로 편하게 정렬하는 기능을 구현하고 이를 정리하였습니다.

 

📺 미리보기

 

💬 서론

  • 이 기능은 유니티 에디터 기능으로 빌드 후 런타임 도중 실행되는 기능은 아닙니다.

 

⚒️ 구현

  • 해당 스크립트를 그대로 복사하여 프로젝트에 추가하면 바로 사용이 가능합니다.

· Script

using UnityEditor;
using UnityEngine;

public class ObjectAlignWindowViaVector : EditorWindow
{
    private GameObject baseObject;
    private Vector3 spacing;

    [MenuItem("Tools/Bonnate/Object Align Via Vector3 Value")]
    private static void OpenWindow()
    {
        ObjectAlignWindowViaVector window = GetWindow<ObjectAlignWindowViaVector>();
        window.titleContent = new GUIContent("Object Align");
        window.Show();
    }

    private void OnGUI()
    {
        baseObject = EditorGUILayout.ObjectField("기준이 될 오브젝트", baseObject, typeof(GameObject), true) as GameObject;
        spacing = EditorGUILayout.Vector3Field("간격", spacing);

        if (GUILayout.Button("정렬"))
        {
            AlignObjects();
        }

        GUILayout.Label("기준이 될 오브젝트 프로퍼티에 할당합니다.");
        GUILayout.Label("Scene에서 기준이 될 오브젝트로부터 간격마다 정렬할 오브젝트들을 선택합니다.");
        GUILayout.Label("[정렬] 버튼을 눌러 정렬합니다.");        
    }

    private void AlignObjects()
    {
        if (baseObject == null)
        {
            Debug.LogError("기준이 될 오브젝트가 없음!");
            return;
        }

        GameObject[] selectedObjects = Selection.gameObjects;
        int objectCount = selectedObjects.Length;

        if (objectCount == 0)
        {
            Debug.LogError("선택된 오브젝트가 없음!");
            return;
        }

        Undo.RegisterCompleteObjectUndo(selectedObjects, "Align Objects");

        Vector3 currentPosition = baseObject.transform.position + spacing;

        for (int i = 0; i < objectCount; i++)
        {
            GameObject obj = selectedObjects[i];

            if (obj == baseObject)
                continue;

            Undo.RecordObject(obj.transform, "Move Object");

            obj.transform.position = currentPosition;
            currentPosition += spacing;
        }
    }
}

 

 

✅ 사용 방법

  • Tools > Bonnate > Object Align Via Vector3 Value을 눌러 윈도우 창을 엽니다.

 

  • 정렬 시 기준이 될 오브젝트를 프로퍼티에 할당합니다.

 

  • Vector3 타입인 [간격] 프로퍼티에 기준 오브젝트로부터 월드좌표계 기준으로 정렬할 벡터값을 정한 후 [정렬] 버튼을 누릅니다.

 

🕹️ Unity Affiliate

  • Unity Affiliate Program 파트너로써 아래의 배너를 통해 접속하신경우 수수료를 받을 수 있습니다.
  • 아래 배너의 에셋들은 '실시간 무료 에셋 랭킹'을 나타냅니다.
bonnate