아카이빙/Unity3D

[Unity3D] 커스텀 에디터 - 반복문으로 오브젝트 생성 쉽게하기

셩님 2017. 4. 14. 17:08

유니티 커스텀 에디터 - 반복문으로 오브젝트 생성 쉽게하기

이제 에디터를 커스터마이징하기 위한 매우 기본적인 내용들은 하나씩 다뤄본 것 같다. 새로운 건 앞으로 진행하면서 발견할때마다 공부해보기로 하고 그동안 배운걸 응용해서 간단한 예제 하나를 만들어보자.

커스텀 에디터의 가장 큰 장점 중 하나가 오브젝트 생성의 자동화이다.

에디터를 익히지 못했을 때는 그리드(Grid)식 오브젝트 배치를 하기위해서는 일일이 하나씩 좌표를 정해주고 생성하거나, 그냥 에디터에서 확인하는 걸 포기하고 게임이 실행되었을 때 동적으로 생성하는 방법으로 진행했었다. (ㅠㅠ 무식하면 몸이 고생이라더니...)

이제 에디터 버튼과 반복문으로 쉽게 생성할 수 있다.


준비

다음 스크립트를 실행하기 위해서는 Resources 폴더에 "Square" Sprite를 하나 만들어주면 된다.

Square는 Sprite 기본 모델이므로 Hierarchy창에서 우클릭으로 바로 생성할 수 있다.


예제

using UnityEngine;
using UnityEditor;

public class ExampleWindow : EditorWindow {

    [MenuItem("Example/Example 1 #_c")]
    static void Init()
    {
        ExampleWindow window = (ExampleWindow)EditorWindow.GetWindow(typeof(ExampleWindow));
        window.Show();
    }

    void OnGUI()
    {
        if (GUILayout.Button ("Create Object")) {
            CreateObject ();
        }
    }

    void CreateObject(){
        Debug.Log ("Create Object");

        GameObject baseObj = new GameObject("Base");

        for (int x = 0; x < 10; x++) {
            for (int y = 0; y < 10; y++) {
                GameObject childObj = new GameObject (string.Format ("Child-{0}-{1}", x, y));
                SpriteRenderer sr = childObj.AddComponent<SpriteRenderer> ();
                sr.sprite = Resources.Load ("Square", typeof(Sprite)) as Sprite;
                sr.color = new Color (Random.Range (0f, 1f),
                                      Random.Range (0f, 1f),
                                      Random.Range (0f, 1f));

                childObj.transform.position = new Vector3 (x, y, 0);
                childObj.transform.SetParent (baseObj.transform);       
            }
        }

        Undo.RegisterCreatedObjectUndo (baseObj, "Create Custom Object");

        Selection.activeObject = baseObj;
    }
}


결과