CustomEditor를 간단하게 배우며 만든 큐브 생성입니다.
먼저 CubeGenerator 스크립트를 만들고 빈 오브젝트에 스크립트를 넣었습니다.
CubeGenerator 코드 입니다.
public class CubeGenerator : MonoBehaviour
{
[SerializeField] private GameObject _cube;
[SerializeField] private float distance;
[SerializeField] private int cubeCount;
public void GenerateCube()
{
if (transform.childCount != 0)
{
for (int i = transform.childCount - 1; i >= 0; i--)
{
DestroyImmediate(transform.GetChild(i).gameObject);
}
}
for (int i = 0; i < cubeCount; i++)
{
var newCube = Instantiate(_cube);
newCube.transform.SetParent(gameObject.transform);
newCube.transform.localPosition = new Vector3(i * distance, 0f, 0f);
newCube.transform.localRotation = Quaternion.identity;
}
}
public void DeleteCube()
{
if (transform.childCount != 0)
{
for (int i = transform.childCount - 1; i >= 0; i--)
{
DestroyImmediate(transform.GetChild(i).gameObject);
}
}
}
}
[SerializeField] private GameObject _cube;
[SerializeField] private float distance;
[SerializeField] private int cubeCount;
_cube는 생성할 큐브의 프리팹을 참조하는 GameObject입니다.
distance는 큐브와 큐브 사이의 거리입니다.
cubeCount는 총 생성될 큐브의 개수입니다.
GenerateCube() 메서드는 먼저 자식 객체가 존재하면 모든 자식 큐브를 삭제합니다.
cubeCount만큼 큐브를 생성합니다. 하지만 각 큐브는 distance만큼 간격을 두고 배치 됩니다.
새로 생성된 큐브는 현재 게임 오브젝트 (스크립트가 있는 오브젝트)의 자식으로 설정됩니다.
DeleteCube()는 자식 객체가 존재하면 모든 자식 큐브를 삭제합니다.
이 코드를 실행하기 위해 CubeGenerateButton이라는 스크립트를 만들었습니다.
이 스크립트는 CustomEditor로 사용할 예정입니다.
CubeGenerateButton 코드 입니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(CubeGenerator))]
public class CubeGenerateButton : Editor
{
CubeGenerator _instance;
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
EditorGUILayout.Space();
EditorGUILayout.LabelField("CubeBtn");
CubeGenerator generator = (CubeGenerator)target;
if (GUILayout.Button("Generate Cube"))
{
generator.GenerateCube();
}
if (GUILayout.Button("Delete Cube"))
{
generator.DeleteCube();
}
EditorGUILayout.Space();
EditorGUILayout.LabelField("Test"); //얘는 아무것도 아닙니다
}
}
[CustomEditor(typeof(CubeGenerator))]
CubeGenerator 컴포넌트에 대한 커스텀 에디터를 정의하는 클래스입니다.
Editor 클래스를 상속받아, Unity 에디터에서 스크립트의 인스펙터 GUI를 사용자 정의할 수 있도록 합니다.
_instance 변수는 CubeGenerator의 인스턴스를 참조하기 위한 변수입니다.
OnInspectorGUI()
1 Unity의 기본 인스펙터 GUI를 호출하여 기존 필드를 표시합니다.
2 GenerateCube 버튼 : 이 버튼을 클릭하면 CubeGenerator의 GenerateCube() 메서드가 실행됩니다.
3 DeleteCube 버튼 : 이 버튼을 클릭하면 CubeGenerator의 DeleteCube() 메서드가 실행됩니다.
4 추가적인 Space와 Label을 사용하여 UI를 정리하였습니다.


'Unity' 카테고리의 다른 글
| Dialogue System (0) | 2024.11.21 |
|---|---|
| Unity Attribute (5번째 / 5번째) (0) | 2024.10.19 |
| Unity Attribute (4번째 / ?번째) (0) | 2024.10.16 |
| Unity Attribute (3번째/?번째) (2) | 2024.10.16 |
| Unity Attribute (2번째/?번째) (0) | 2024.10.15 |