해결된 질문
작성
·
678
1
안녕하세요.
코딩을 시작한 지 얼마 안 되어 공부 겸 실제 게임 발매를 경험하기 위해 강의를 수강한 학생입니다.
잘 따라가던 도중에 '젬 떨구기' 강의 부분에서 xml 파일이 로드되지 않는 문제가 발생하였는데요. 이를 수정하기 위해 구글링부터 시작해서 챗GPT4에 물어보는 등 여러 시도를 해보았으나, 도저히 저 혼자 힘으로는 해결이 어려워 고심 끝에 질문 글을 남기게 되었습니다.
Addressables Groups에는 강사님이 하신 것과 동일하게 프리팹, xml, png 파일 등을 등록하고 Label을 PreLoad로 설정한 상태이고, 코드는 제가 쓴 코드가 혹시 문제가 있나 싶어 강의 자료로 첨부해 두신 코드로 덮어씌워봤는데도 아래와 같이 xml 파일 로드 시 null이 반환되는 상태입니다.
현재 진행 중인 프로젝트가 문제가 있을까 싶어 새 프로젝트를 만든 후 폴더 경로부터 시작해서 모든 과정들을 다시 진행해 보았으나 동일한 에러가 발생하더군요.
되도록이면 제 스스로 이 문제를 해결해 보려고 했지만 유니티란 툴도 처음이고, 코드를 배운 것도 이번이 처음인지라 들이는 시간에 비해 도저히 진척이 없어서 염치 불구하고 이렇게 글 남깁니다.
바쁘시겠지만 확인 부탁 드리겠습니다.
좋은 강의 만들어 주셔서 감사합니다.
NullReferenceException: Object reference not set to an instance of an object
DataManager.LoadXml[Loader,Key,Item] (System.String name) (at Assets/@Scripts/Managers/Core/DataManager.cs:43)
DataManager.Init () (at Assets/@Scripts/Managers/Core/DataManager.cs:21)
GameScene.StartLoaded () (at Assets/@Scripts/Scenes/GameScene.cs:22)
GameScene.<Start>b__0_0 (System.String key, System.Int32 count, System.Int32 totalCount) (at Assets/@Scripts/Scenes/GameScene.cs:13)
ResourceManager+<>c__DisplayClass5_2`1[T].<LoadAllAsync>b__1 (T obj) (at Assets/@Scripts/Managers/Core/ResourceManager.cs:86)
ResourceManager+<>c__DisplayClass4_0`1[T].<LoadAsync>b__0 (UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle`1[TObject] op) (at Assets/@Scripts/Managers/Core/ResourceManager.cs:69)
DelegateList`1[T].Invoke (T res) (at ./Library/PackageCache/com.unity.addressables@1.21.12/Runtime/ResourceManager/Util/DelegateList.cs:75)
UnityEngine.Debug:LogException(Exception)
DelegateList`1:Invoke(AsyncOperationHandle`1) (at ./Library/PackageCache/com.unity.addressables@1.21.12/Runtime/ResourceManager/Util/DelegateList.cs:79)
UnityEngine.ResourceManagement.Util.DelayedActionManager:LateUpdate() (at ./Library/PackageCache/com.unity.addressables@1.21.12/Runtime/ResourceManager/Util/DelayedActionManager.cs:162)
답변 1
0
위 내용만으론 알 수 없습니다.
오히려 실제 xml 파일이 정말 잘 있는지, Addressable 등록이 되어 있는지
및 파일 파싱 부분 등의 스샷을 보여주셔야 합니다.
여기에 breakpoint를 걸고 실행했을 때 textAsset이 로드는 됐나요?
즉 파일은 로딩했는데 파싱이 실패했는지,
파일 로딩조차 실패했는지를 확인해보시기 바랍니다.
textAsset 부분이 null로 출력되고 있습니다.
Assets\@Resources\Data
올려주신 수업 자료도 그렇고, 제 프로젝트에서도 그렇고 현재 PlayerData.xml 파일은 위 경로에 위치해 있는데, 혹시 경로가 잘못된 걸까요?
아 GameScene에서
Managers.Resource.LoadAllAsync<GameObject>("PreLoad", (key, count, totalCount)
GameObject를 Object로 바꾸지 않아서 GameObject가 아닌 xml 파일은 불러오지 못했던 것을 확인했습니다.
강의를 꼼꼼하게 보지 않아서 생긴 이 간단한 문제 때문에 며칠 동안 끙끙댄 게 참 허무하네요. 그래도 한편으로는 기억에 남을 공부가 된 것 같기도 하네요.
시덥잖은 문제로 강사님 시간을 뺏은 것 같아 죄송스럽네요.
확인 감사 드립니다.
앞으로 남은 강의도 잘 보고 배우도록 하겠습니다!
답글 감사합니다.
말씀하신 스크린샷 첨부 드립니다.
DataManagers에 있는 Init() 함수의
SkillDic = LoadXml<Data.SkillDataLoader, int, Data.SkillData>("SkillData.xml").MakeDict();
이 부분은 스크린샷에 있는 것과 다르게 아직 진행하지 않은 부분이라 주석 처리한 상태입니다.