인스펙터의 버튼
컴포넌트의 인스펙터에서 버튼을 사용하고 싶을 때가 있다.
예를 들면 플레이 모드로 진입하지 않고 에디터 모드에서 메소드를 바로 호출 하고 싶을 때.
그리고 실제로 커스텀 에디터를 이용해 버튼을 만들 수도 있다.
하지만 잠깐 테스트용으로 쓰려는데 스크립트 하나 더 만들고, 커스텀 에디터 선언하고, …
심지어 에디터 GUI좀 쓰려면 EditorGUI, EditorUtility, EditorGUILayout, GUIUtility, GUILayout, … 뭐가 이렇게 다양하고 헷갈리게 만들어 놨는지..
어쨌든 커스텀 에디터 만들어서 if(GUILayout.Button()){} 으로 버튼 하나 달아서 사용할 수 있지만,
가끔씩 이게 참 번거롭다.
bool 필드를 버튼처럼 사용하기
MonoBehaviour의 이벤트 메소드 69개 중에, OnValidate()
라는 메소드가 있다.
스크립트가 컴포넌트로 들어가거나 클래스 내의 변수의 값이 수정될 때 호출된다.
그리고 bool 타입 필드와 함께 사용하여 마치 버튼처럼 활용할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public bool _flag;
private void OnValidate()
{
if (_flag)
{
Method();
_flag = false;
}
}
private void Method()
{
Debug.Log("Method");
}
이런 식으로 작성한다.
인스펙터에서 _flag 필드를 체크하여 값을 true로 바꿨을 때 OnValidate()
가 호출되고,
다시 값을 false로 바꿔 놓으며 Method()
를 호출한다.
그러면 위처럼 에디터 모드에서도 _flag 필드를 클릭했을 때 메소드를 곧바로 호출할 수 있다.
이렇게 에디터 모드에서 다른 필드의 값을 수정할 수도 있고, 그 값이 플레이모드에 진입해도 유지된다.