Unity/TopdownEngine

Inspector에서 변수 타입을 동적으로 설정 (MMEnumCondition)

lipnus 2023. 8. 15. 16:35
반응형

MMEnumCondition을 이용해서 Custom Editor클래스 안만들고 바로, 데이터 타입을 Inspector에서 선택할 수 있게 할 수 있음

 

 

* 자세한 구현은 MMLoot 클래스 참조

List의 경우 바로 쓰면, 다른 enum이 선택되어도 사라지지 않고 계속 남아있어서 클래스로 한번 싸서 적용. 

 

 

        public enum ExpModes { Unique, List, ScriptableObject }
        
        [Space(10)]
        [Header("데이터 타입")]
        public ExpModes ExpMode = ExpModes.Unique;

        [MMEnumCondition("ExpMode", (int)ExpModes.Unique)]
        [SerializeField] private int expPoint;
        
        [MMEnumCondition("ExpMode", (int)ExpModes.List)]
        [SerializeField] private MMCustomList<int> expList;
        
        [MMEnumCondition("ExpMode", (int)ExpModes.ScriptableObject)]
        [SerializeField] private EnemyData expData;
        
        
        private int GetExp()
        {
            switch (ExpMode)
            {
                case ExpModes.Unique:
                    return expPoint;
                case ExpModes.List:
                    if (expList == null) return 100;
                    return expList.data[level-1];
                case ExpModes.ScriptableObject:
                    return expData.Exp + expData.ExpDiff * (level-1);
                default:
                    throw new ArgumentOutOfRangeException();
            }
        }

 

 

[System.Serializable]
public class MMCustomList<T>
{
    public List<T> data;
}

System.Serializable 안쓰면 Inspector에 안뜸

반응형