본문 바로가기
개발/Unity

Unity) ScriptableObject Insecptor 조건부 노출 (Custom Editor)

by 테샤르 2024. 1. 17.

ScriptableObject Insecptor 조건부 노출 (Custom Editor)

 

Scriptable Object를 사용하다보면 조건에 따라서 너무 많은 불필요한 조건이 노출되는 경우가  있다.

단순하게 룰이라고 기억하고 사용하기에는 휴먼이슈도 생기고 생각보다 직관적이지 않다.

불필요한 데이터를 넣을수도있고 정보가 많다보니 헷갈릴수도 있다.

조건부로 노출하는 방법으로 수정해보자.

 

< 기존 ScriptableObject > 

 

< Custom Editor 코드 >

using UnityEditor;

[CustomEditor(typeof(CardScriptableObject))]
public class CardScriptableObjectInspector : Editor
{
	private SerializedProperty cardImageProperty = default;
	private SerializedProperty cardInfoProperty = default;
	private SerializedProperty infoProperty = default;

	void OnEnable()
	{
		cardImageProperty = serializedObject.FindProperty("cardImage");
		cardInfoProperty = serializedObject.FindProperty("cardInfo");
		infoProperty = serializedObject.FindProperty("info");
	}

	public override void OnInspectorGUI()
	{
		serializedObject.Update();

		EditorGUILayout.PropertyField(cardImageProperty);
		EditorGUILayout.PropertyField(cardInfoProperty);

		AbilityInfo.ActionType actionType = (AbilityInfo.ActionType)infoProperty.FindPropertyRelative("actionType").enumValueIndex;

		EditorGUILayout.PropertyField(infoProperty.FindPropertyRelative("actionType"));
		switch (actionType)
		{
			case AbilityInfo.ActionType.Card:
				EditorGUILayout.PropertyField(infoProperty.FindPropertyRelative("cardValueList"), true);
				break;

			case AbilityInfo.ActionType.GameValue:
				EditorGUILayout.PropertyField(infoProperty.FindPropertyRelative("gameValueList"), true);
				break;
		}

		// Apply changes to the serialized object
		serializedObject.ApplyModifiedProperties();
	}
}
반응형

< 결과 확인 >

 Action Type : Card 인 경우 Action Type : Game Value 인 경우

 

 

조건에 따라(ActionType) Inspector 의 Property가 다르게 노출되는 형식으로 해당 방식의 이점은 휴먼이슈가 줄어든다.

가독성이 높아지고 불필요한 데이터가 생길가능성이 적어진다.(사이드 이펙트)

 

 

Unity Custom Editor : [링크]

 

커스텀 에디터 - Unity 매뉴얼

게임 제작 속도를 높이는 비결은 많이 사용되는 컴포넌트에 대해 커스텀 에디터를 만드는 것입니다. 여기서는 오브젝트가 항상 한 포인트를 바라보도록 하는 매우 간단한 스크립트를 예로 들어

docs.unity3d.com

 

★☆☆☆☆

 

반응형

댓글