Unity & C#

CustomEditor 활용하기 - Inspector Button만들기

왼손잡이개발자 2022. 4. 6. 01:12

 

최근 CustomEditor 활용하기 기능에 대해서 작성한 글을 이어서 이번엔 Inspector에서 Button을 만들어서 활용하는 방법을 알아보도록 하겠습니다. 이전 글에서 bool 값을 variable 보여주기를 했다면 이번엔 Button을 만들어서 자식들의 Transform을 List로 가져오게 해보도록하겠습니다. (이전 글 참조: https://lefthanddeveloper.tistory.com/21)

 

MonoBehviour를 상속받는 InspectorButton 클래스를 작성해보겠습니다. 이 InspectorButton 클래스는 컴포넌트로 오브젝트에 붙게됩니다.

public class InspectorButton : MonoBehaviour
{
	public List<Transform> childrenTr = new List<Transform>();
	public bool includeSelf = false;
    public void FindChildrenAndAddToList()
	{
		childrenTr.Clear();
		foreach(Transform child in GetComponentsInChildren<Transform>())
		{
			if(!includeSelf)
			{
				if (child == transform) continue;
			}

			childrenTr.Add(child);
		}
	}
}

InspectorButton 클래스에는 자식들의 Transform을 보관하는 List<Transform> childrenTr 과 자기 자신의 Transform을 포함할지 여부를 확인하는 bool includeSelf 가 변수로 있고, 자식들의 Transform을 찾고 List에 추가하는 FindChildrenAndAddToList() 메소드가 있습니다. 

 

다음은 Insepctor창에서 버튼을 추가해주는 InspectorButton_Editor 클래스를 작성하겠습니다. 이 InspectorButton_Editor 클래스는 Editor 클래스를 상속받습니다 (Editor 클래스를 사용하기위해선 using UnityEditor문을 작성해주어야합니다)

 

[CustomEditor(typeof(InspectorButton))]
public class InspectorButton_Editor : Editor
{
	public override void OnInspectorGUI()
	{
		base.OnInspectorGUI();

		InspectorButton script = target as InspectorButton;
		if(GUILayout.Button("Find Children Transforms"))
		{
			script.FindChildrenAndAddToList();
		}
	}
}

클래스 이름 위에 [CustomEditor(typeof(InspectorButton))]를 작성해서 InspectorButton 클래스에 관한 Editor 클래스 임을 명시해줍니다. if(GUILayout.Button("Find Children Transforms")... 구문이 버튼을 인스펙터에 그려주고 버튼을 눌렀을 시 FindChildrenAndAddToList() 함수를 실행 시켜주는 것을 실행해줍니다.

 

 

이번 예제에서는 단순하게 구현하기 위해 Transform List를 가져오는것만했지만 이후 확장하여 다양하게 활용할 수 있을 것 같습니다. 인터페이스를 활용하여 인터페이스를 List로 가져와서 활용할 수도 있겠군요 ㅎㅎ (개인적으로 인터페이스를 다양하게 활용하는 것을 좋아해서요 😄)