유니티 인스펙터에서 함수 실행하기!

개발을 하다보면 런타임에 돌아가지 않고 에디터 상에서 특정 함수가 실행되게 하고 싶을 때가 종종 생깁니다.

예를 들어, 10x10 블록을 배치한다거나 랜덤한 미로를 만든다 등의 경우가 있습니다.

 

저의 경우, 디버그를 할 때 사용하기 위한 Debug Color Preset을 적용해야 하기 위해 인스펙터창에서 특정 함수가 실행되게 해주어야 합니다.

예시

 


ContextMenu

[ContextMenu]는 Unity의 C# 스크립트에서 사용되는 특성(Attribute) 중 하나로, 해당 스크립트의 메서드를 인스펙터에서 실행할 수 있도록 하는 특성입니다. 

 

[ContextMenu] 특성을 메서드 위에 추가해준 다음 "이름"을 설정해주시면, 해당 메서드가 인스펙터에서 지정한 "이름"으로 나타납니다.

 

인스펙터에서 [ContextMenu] 특성이 추가된 해당 컴포넌트를 선택하고 마우스 오른쪽 버튼을 클릭하면 해당 "컨텍스트 메뉴"가 표시되고, 메서드를 선택하면 해당 메서드가 실행됩니다.

 

[ContextMenu("ApplyCustomColors")]
public void ApplyCustomColors()
{
      foreach (Preset debugPreset in debugPresets)
      {
           if (debugPreset != null)
           {
                DebugUtils.AddCustomColor(debugPresets);
           }
      }
}

위 예시 코드를 보면 ApplyCustomColors가 컨텍스트에 표기될 이름입니다.