에디터에서 개발자는 효율적인 게임 레벨 디자인과 시각적 일관성을 위해 오브젝트 위치를 편리하게 정렬해야할 필요가 있습니다. 이번 글에서는 특정 오브젝트를 기준으로 동일한 간격으로 편하게 정렬하는 기능을 구현하고 이를 정리하였습니다.
📺 미리보기
💬 서론
- 이 기능은 유니티 에디터 기능으로 빌드 후 런타임 도중 실행되는 기능은 아닙니다.
⚒️ 구현
- 해당 스크립트를 그대로 복사하여 프로젝트에 추가하면 바로 사용이 가능합니다.
· 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 파트너로써 아래의 배너를 통해 접속하신경우 수수료를 받을 수 있습니다.
- 아래 배너의 에셋들은 '실시간 무료 에셋 랭킹'을 나타냅니다.
'unity tools & functions' 카테고리의 다른 글
[유니티] 유니티 에디터 스크린샷 캡쳐 도구 (0) | 2023.06.28 |
---|---|
[유니티] Hex를 RGB Color로 변환 (0) | 2023.06.27 |
[유니티] InputField Tab Navigation, Button Event (0) | 2023.06.22 |
[유니티] 파일 암호화 (json 암호화) (0) | 2023.04.03 |
[유니티] UI 창 드래그 (0) | 2023.04.03 |