본문 바로가기
Unity/Manual

Unity에서 ExecuteInEditMode를 사용하여 에디터 모드에서 스크립트 실행하기

by Dev_카페인 2024. 6. 12.
반응형

Unity에서 ExecuteInEditMode를 사용하여 에디터 모드에서 스크립트 실행하기

Unity에서 게임 개발을 하다 보면 때때로 에디터 모드에서도 스크립트를 실행하고 싶을 때가 있습니다. 이러한 기능을 가능하게 해주는 것이 바로 ExecuteInEditMode 특성입니다. 이 블로그 포스트에서는 ExecuteInEditMode를 사용하여 에디터 모드에서도 스크립트를 실행하는 방법과 이를 활용하는 몇 가지 유용한 예제에 대해 설명하겠습니다.

ExecuteInEditMode란 무엇인가?

ExecuteInEditMode는 Unity에서 제공하는 특성(Attribute)으로, 스크립트가 에디터 모드에서도 실행될 수 있도록 합니다. 기본적으로 Unity의 MonoBehaviour 스크립트는 플레이 모드에서만 실행되지만, ExecuteInEditMode 특성을 사용하면 에디터 모드에서도 동일한 스크립트를 실행할 수 있습니다.

ExecuteInEditMode 사용법

간단한 사용법은 매우 직관적입니다. 스크립트의 클래스 선언 위에 [ExecuteInEditMode] 특성을 추가하면 됩니다.

using UnityEngine;

[ExecuteInEditMode]
public class ExampleScript : MonoBehaviour
{
    void Update()
    {
        Debug.Log("This runs in edit mode too");
    }
}

위의 예제에서 Update 메서드는 플레이 모드와 에디터 모드 모두에서 실행됩니다.

 

추가적으로, 스크립트가 항상 실행되는 것을 방지하고 싶다면 Update 대신 OnValidate 메서드를 사용하여 오브젝트가 변경될 때만 위치를 조정할 수 있습니다.

using UnityEngine;

[ExecuteInEditMode]
public class ValidateTest : MonoBehaviour
{
    void OnValidate()
    {
        // 작성
    }
}

 

ExecuteInEditMode를 활용한 예제

게임 오브젝트 자동 배치

게임 개발 중 여러 개의 오브젝트를 정렬하거나 배치할 때도 ExecuteInEditMode를 유용하게 사용할 수 있습니다. 예를 들어, 특정 간격으로 오브젝트를 배치하는 스크립트를 작성해 보겠습니다.

using UnityEngine;

[ExecuteInEditMode]
public class ObjectArranger : MonoBehaviour
{
    public GameObject prefab;
    public int count = 10;
    public float spacing = 2.0f;

    void OnValidate()
    {
        ArrangeObjects();
    }

    void ArrangeObjects()
    {
        if (prefab == null) return;

        // 기존 자식 오브젝트 삭제
        foreach (Transform child in transform)
        {
            DestroyImmediate(child.gameObject);
        }

        // 새 오브젝트 배치
        for (int i = 0; i < count; i++)
        {
            GameObject newObj = Instantiate(prefab, transform);
            newObj.transform.localPosition = new Vector3(i * spacing, 0, 0);
        }
    }
}

이 스크립트는 OnValidate 메서드를 사용하여 Inspector에서 값이 변경될 때마다 오브젝트를 자동으로 배치합니다. ExecuteInEditMode와 함께 사용하여 에디터 모드에서도 즉시 변화를 확인할 수 있습니다.

ExecuteInEditMode의 장점

  • 즉각적인 피드백: 에디터 모드에서도 스크립트가 실행되기 때문에 즉각적인 피드백을 받을 수 있습니다.
  • 디버깅 용이: 플레이 모드에 들어가지 않고도 스크립트를 디버깅할 수 있습니다.
  • 생산성 향상: 반복적인 작업을 자동화하여 개발 시간을 절약할 수 있습니다.

주의사항

ExecuteInEditMode를 사용할 때는 몇 가지 주의사항이 필요합니다.

  • 퍼포먼스: 에디터 모드에서도 스크립트가 계속 실행되므로, 퍼포먼스에 영향을 줄 수 있습니다. 따라서 무거운 연산은 피하는 것이 좋습니다.
  • 데이터 변경: 에디터 모드에서 실행되는 스크립트가 게임 데이터를 변경할 수 있으므로, 중요한 데이터는 조심스럽게 다뤄야 합니다.

결론

Unity에서 ExecuteInEditMode를 사용하면 에디터 모드에서도 스크립트를 실행할 수 있어 개발 과정에서 유용하게 활용할 수 있습니다. 오브젝트의 위치 조정, 자동 배치, 디버깅 등 다양한 용도로 사용할 수 있으며, 이를 통해 개발 효율을 크게 높일 수 있습니다. 이 포스트가 Unity 개발자들에게 도움이 되기를 바랍니다.

추가적인 질문이나 도움이 필요하시면 언제든지 문의해 주세요! Happy coding!

반응형