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

dbsxogml59885님의 프로필 이미지

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

UI 자동화 #2

NullReferenceException 오류 입니다 ㅠㅠ..

작성

·

889

·

수정됨

0

 void Start()
    {
        Bind<Button>(typeof(Buttons));
        Bind<TextMeshProUGUI>(typeof(Texts));

        Get<TextMeshProUGUI>((int)Texts.ScoreText).text = "Bind Test";
    }

    void Bind<T>(Type type) where T : UnityEngine.Object //reflection 사용
    {
        string[]names = Enum.GetNames(type);

        UnityEngine.Object[] objects = new UnityEngine.Object[names.Length];
        _objects.Add(typeof(T), objects);

        for (int i = 0; i<names.Length;i++)
        {
            objects[i] = Util.FindChild<T>(gameObject, names[i], true);
            
        }
    }

    T Get<T>(int idx) where T : UnityEngine.Object
    {
        UnityEngine.Object[] objects = null;
        if (_objects.TryGetValue(typeof(T), out objects)==false)
            return null;

        return objects[idx] as T;
    }

기존에 Text를 TextMeshProUGUI로 바꾸고 using TMPro;도 추가했는데도 계속해서 해당 오류가 발생하네요...도저히 원인을 못찾겠습니다 ㅠㅠ

답변 3

0

ㅎㅎ.. 감사합니다 뭐가 틀렸는지 감도 안와서 오래걸릴뻔했는데 덕분에 바로 찾았네요... 아오 레거시... Unity text할때는 항상 조심해야겠네요

0

dbsxogml59885님의 프로필 이미지
dbsxogml59885
질문자

TextMeshProUGUI를 사용한것 까진 좋았으나 실제 Unity에서 Text 생성 시에 Legacy > text를 사용해서 못찾았었네요 다른 분들은 고생 안하셨으면 좋겠습니당 헤헤..

0

Bind할 때 Texts에 ScoreText가 맞는지 확인해보세요

for (int i = 0; i<names.Length;i++) { objects[i] = Util.FindChild<T>(gameObject, names[i], true); }

이 부분에 breakpoint를 잡고 정확하게 들어가는지 확인해보시면 될 것 같습니다.

dbsxogml59885님의 프로필 이미지
dbsxogml59885
질문자

image맞게 들어온거 아닌가요? ㅠㅠ

 

지금 보여주신 부분 말고 objects에 null값이 아니라 Object가 제대로 들어가는지 확인해야 합니다. 지금 보여주신 부분은 그냥 enum값 입니다

dbsxogml59885님의 프로필 이미지
dbsxogml59885
질문자

스크린샷 2023-04-14 오후 2.50.36.png이 부분 말씀하시는게 맞을까용

네 맞습니다 FindChild가 null을 반환하는지 확인해보시고 null을 반환한다면 왜 null을 반환하는지 FindChild함수에서 breakpoint를 잡아가면서 디버깅 해보시면 될 듯 합니다

dbsxogml59885님의 프로필 이미지
dbsxogml59885
질문자

스크린샷 2023-04-14 오후 4.35.28.png왜 이렇게 뜨는지는 알 수 있을까요.. 자꾸 물어봐서 죄송합니다 ㅠㅠ

dbsxogml59885님의 프로필 이미지
dbsxogml59885
질문자

메일 보냈습니다..