본문 바로가기
Unity

OnInspectorGUI 사용해서 효과적으로 입력 받기

by SimonLee 2023. 7. 13.

Unity Component에 입력을 정리된 형태로 받기 위한 방법은 다음과 같다.

아래와 같은 형태로 작성을 하게되면 입력폼을 변경할때 용이하다.

 

1) AClass.cs 파일의 Items class 항목을 늘려준다.

2) AEditor.cs의 OnEnalbe() 함수에서 FindProperty 함수로 Items class 내부 변수를 찾아준다.

3) OnInspectorGUI() 함수에서 propertyField() 함수로 입력을 받는다.

 

추가로 input params가 많은 경우,

EditorGUILayout.Foldout() 함수를 사용하면 더 깔끔한 입력폼을 만들 수 있다.

 

 

AClass.cs

public class Items 
{
    public string itmesA;
    public string itemsB;
}

public class AClass : MonoBehaviour
{
    [HideInspector][SerializedField]
    private Items items;
}

 

 

AEditor.cs

[CustomEditor(typeof(AClass))]
[CanEditMultipleObjects]
public class AEditor : Editor
{
    SerializedProperty itemsA;
    SerializedProperty itemsB;
    private bool fold = false;
}

private void OnEnable()
{
    itemsA = serializedObject.FindProperty("items.A");
    itemsB = serializedObject.FindProperty("items.B");
}

public override void OnInpectorGUI()
{
    serializedObject.Update();
    EditorGUILayout.BeginVertical();
    AClass aClass = (AClass)target;
    
    EditorGUILayout.LabelField("", GUI.skin.horizontalSlider);
    fold = EditorGUILayout.Foldout(fold, "items");
    if (fold) 
    {
    	EditorGUILayout.PropertyField(itemsA);
        EditorGUILayout.PropertyField(itemsB);
    }
    EDitorGUILayout.EndVertical();
    serializedObject.ApplyModifiedProperties();
}