인프런 커뮤니티 질문&답변

미니개발자님의 프로필 이미지
미니개발자

작성한 질문수

[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템

1번 강의 IdentifiedObjectEditor 스크립트에서 에러가 납니다.

작성

·

446

0

NullReferenceException: SerializedObject of SerializedProperty has been Disposed.

UnityEditor.SerializedProperty.get_propertyType () (at <04e0fdd0fac34142a67859e48fe87770>:0)

UnityEditor.EditorGUILayout.IsChildrenIncluded (UnityEditor.SerializedProperty prop) (at <04e0fdd0fac34142a67859e48fe87770>:0)

UnityEditor.EditorGUILayout.PropertyField (UnityEditor.SerializedProperty property, UnityEngine.GUILayoutOption[] options) (at <04e0fdd0fac34142a67859e48fe87770>:0)

IdentifiedObjectEditor.OnInspectorGUI () (at Assets/Scripts/Editor/IdentifiedObjectEditor.cs:99)

UnityEditor.UIElements.InspectorElement+<>c__DisplayClass74_0.<CreateInspectorElementUsingIMGUI>b__0 () (at <04e0fdd0fac34142a67859e48fe87770>:0)

 

이런 에러인데 에러가 나는 시점이 인스펙터에서 코드네임을 변경한 후 엔터키를 눌렀을 때 발생합니다.

EditorGUILayout.PropertyField(displayNameProperty);

이름 변경 후 displayName을 그려줄 때 에러가 나는데 아무래도 OnEable 함수에서 FindProperty함수로 값을 제대로 가져오지 못하고 있는 것 같은데 어떻게 해야할까요?

    [SerializeField] private Category[] categories;

    [SerializeField] private Sprite icon;

    [SerializeField] private int id = -1;

    [SerializeField] private string codeName;

    [SerializeField] private string displayName;

    [SerializeField] private string description;

 

        categoriesProperty = serializedObject.FindProperty("categories");
        iconProperty = serializedObject.FindProperty("icon");
        idProperty = serializedObject.FindProperty("id");
        codeNameProperty = serializedObject.FindProperty("codeName");
        displayNameProperty = serializedObject.FindProperty("displayName");
        descriptionProperty = serializedObject.FindProperty("description");

혹시 제가 직접 타이핑한게 문제일까 싶어서 코드를 다운로드 받고 복붙해봤는데도 에러가 발생합니다.

이 현상을 그대로 두고 진행해도 될까요?

이름 변경은 제대로 됩니다.

답변 1

1

Developer G님의 프로필 이미지
Developer G
지식공유자

수강해주셔서 감사합니다.

수업 자료를 복붙하셨는데도 문제가 생기신다면 유니티 내부에 뭔가 꼬인 등 프로젝트 자체의 문제일 가능성이 높습니다. 여러 번의 테스트에서 최소한 저는 수강생분과 같은 문제가 한번도 생긴 적이 없습니다. 이름 변경이 제대로 되고, GUI가 그려지는데도 문제가 없으시다면 그냥 진행하셔도 됩니다. 오류가 뜬게 꺼림직하시다면 완성된 프로젝트를 압축해제하셔서 그 프로젝트로 이후를 진행하시면 될 것 같습니다.

감사합니다.

유니티 버전 2023.2에선 에러가 발생했는데 2023.1에서는 에러가 발생하지 않는 것 같습니다.

Developer G님의 프로필 이미지
Developer G
지식공유자

말씀하신 부분을 확인해봤습니다. 말씀해주신대로 2023.2.14f 버전에서 해당 에러가 뜨는걸 확인했구요, 이번 버전과 Beta인 Unity 6에서는 문제가 없는 것으로 보아 Engine Bug로 보입니다. 해당 문제는 Skill System Window에서 IO객체의 CodeNam을 변경할 때는 생기지 않으므로 무시하고 진행하셔도 됩니다.

추가적으로 해당 부분을 확실히 수정할 수는 있는 방법은 IdentifiedObjectEditor 140번쨰 줄 아래에

EditorGUILayout.EndVeritical();
EditorGUILayout.EndHorizontal();
serializedObject.ApplyModifiedProperties();
return;

를 추가하시면 됩니다.
Raname을 하자마자 정렬들을 모두 끝내고 Apply를 한 다음 OnInpectorGUI를 바로 빠져나가는 것입니다.
말씀드렸듯이 이는 Engine Bug이고 Skill System Window에서 제어할 때는 문제가 없으므로 굳이 수정을 안하셔도 됩니다.


감사합니다.

미니개발자님의 프로필 이미지
미니개발자

작성한 질문수

질문하기