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 : [링크]
★☆☆☆☆
반응형
댓글