이제 에디터를 커스터마이징하기 위한 매우 기본적인 내용들은 하나씩 다뤄본 것 같다. 새로운 건 앞으로 진행하면서 발견할때마다 공부해보기로 하고 그동안 배운걸 응용해서 간단한 예제 하나를 만들어보자.
커스텀 에디터의 가장 큰 장점 중 하나가 오브젝트 생성의 자동화이다.
에디터를 익히지 못했을 때는 그리드(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;
}
}
결과
'아카이빙 > Unity3D' 카테고리의 다른 글
[Unity3D] JsonUtility 사용법 익히기 (0) | 2017.04.17 |
---|---|
[Unity3D] Singleton 클래스 구현 (4) | 2017.04.15 |
[Unity3D] 커스텀 에디터(5) - EditorStyles (0) | 2017.04.14 |
[Unity3D] 커스텀 에디터(4) - GUILayout (0) | 2017.04.11 |
[Unity3D] 커스텀 에디터(3) - EditorWindow (0) | 2017.04.10 |