Unity

Unity CustomEditor로 간단하게 큐브 생성하기

psb08 2024. 10. 17. 23:20
728x90
반응형

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를 정리하였습니다.

 

거리 2 큐브 수는 3으로 설정 후 Generate Cube를 클릭하면
잘 생성되는 모습입니다.

 

'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