• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

17:20 오류문의

22.06.11 14:15 작성 조회수 147

0


NullReferenceException: Object reference not set to an instance of an object QuestSystem.Awake () (at Assets/Inf_scripts/Quest/QuestSystem.cs:71) UnityEngine.GameObject:AddComponent() QuestSystem:get_Instance() (at Assets/Inf_scripts/Quest/QuestSystem.cs:35) QuestGiver:Start() (at Assets/Inf_scripts/Quest/QuestGiver.cs:14)
뭐가 빠진건지 잘모겠어요

답변 3

·

답변을 작성해보세요.

0

안녕하세요.

스샷으로 파악되는 것은 Quest Tracker View가 없다는 것입니다.
지금 Quest Tracker를 넣으셨는데 Quest Tracker View와 헷갈리신 것 같습니다.
Quest Tracker가 아닌 Quest Tracker View를 넣으셔야합니다.

Quest Tracker View를 넣어도 작동을 안하신다면 '메인 퀘스트 제작' 이전 강좌인 '퀘스트 추적을 위한 Quest Tracker UI 제작' 강좌를 보시고 다시 한번 천천히 따라해보시면 될 것 같습니다.

감사합니다.

UniTea님의 프로필

UniTea

질문자

2022.06.15

완강을 했습니다. 초보라서 일단 강의내용 완성하는것에 중점을 두고 스크립트는 완성본을 사용하였습니다. 강의중에 완성본이랑 일부 차이가 보이는 부분이 있어서 강의내용에 있는것으로 수정을 했습니다.

강의 보면서 스크랩데이블오브젝트(모듈) 파일들 만들고 장착시키고 해보았습니다.

다시 강의영상 보면서 스크립팅에 주석을 달아가면서 응용을 해보려고 하는데요

퀘스트_모듈 옵션에 isSaveble에 체크 다 했거든요 4개파일 전부

게임을 진행하다가 끄고 다시 플레이 하면 에러메세지가 나오는데 

뭐를 빼먹은건지 무슨 체크를 했는지 못찾겠습니다.

알고 나면 간단해 보일듯 한데 아직은 헷갈려서 잘모르겠습니다.

에러코드는 아래와 같습니다.

NullReferenceException: Object reference not set to an instance of an object

QuestSystem.LoadSaveDatas (Newtonsoft.Json.Linq.JToken datasToken, QuestDatabase database, System.Action`2[T1,T2] onSuccess) (at Assets/Inf_scripts/Quest/QuestSystem.cs:188)

QuestSystem.Load () (at Assets/Inf_scripts/Quest/QuestSystem.cs:159)

QuestSystem.Awake () (at Assets/Inf_scripts/Quest/QuestSystem.cs:69)

UnityEngine.GameObject:AddComponent()

QuestSystem:get_Instance() (at Assets/Inf_scripts/Quest/QuestSystem.cs:35)

QuestTrackerView:Start() (at Assets/Inf_scripts/UI/Quest Tracker/QuestTrackerView.cs:18)

 

PlayerPrefsUtility에서 DeleteSaveData 클릭하면 리셋은 잘됩니다.

두번째 질문이 응용시에 다른 씬에 UI를 만들고 업적 퀘스트 화면을 보여지게 해도

저장은 똑같이 되는걸까요? 

안녕하세요.

1. QuestSystem의 188번줄 null 에러라는 것은 LoadSaveDatas 함수의 세번째 인자인 onSuccess Action이 null이라는 소리입니다. 그래서 188번줄 onSuccess.Invoke(saveData, quest); 코드가 null 에러를 띄우는거죠.
QuestSystem의 Load함수를 살펴보셔야하는데요, 159번째 줄이

LoadSaveDatas(root[kCompletedQuestsSavePath], questDatatabase, LoadCompletedQuest);

위와 같이 정확히 작성되어있는지 확인해보셔야할 것 같습니다.
빨간색으로 표시한 인자가 지금 null이라는 소리입니다.

2. 저장 유무는 QuestSystem의 Save 함수로 결정되므로 QuestSystem.Instance.Save만 사용해주시면 어느 곳에서든 저장이 가능합니다. 강좌에서는 Shooter 예제의 EndCheckpoint 클래스에서 QuestSystem.Instance.Save();를 사용하여 저장하고 있다는 것을 떠올려보시면 더 쉽게 이해가 되실겁니다.

UniTea님의 프로필

UniTea

질문자

2022.06.15

바쁘실텐데 답변주셔서 정말 감사합니다. 

0

UniTea님의 프로필

UniTea

질문자

2022.06.13

이제 에러메세지는 안나오는데  Quest Tracker 가 작동이 안됩니다. 강의랑 다르게 한점은 코드네이밍과 프래팹이름을 영상하고 다르게 한것과  DisplayName과 Description에 한글로 한것 뿐입니다. 나머지는 영상하고 똑같이 셋팅했습니다. 스크립트는 완강의 자료를 그대로 썻구요 이게 최초 작동확인용이라 저에게는 중요한 부분입니다. 도와주세요 ㅠㅠ

 

0

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

에러 코드로 파악해본 바에 따르면 QuestSystem의 Awake 함수에서 나타는 오류로 71번줄 문제라는 것으로 보아 achievementDatabase가 Load되지 않은 것 같습니다.
위 쪽 Resources.Load가 achievementDatabase = Resources.Load<QuestDatabase>("AchievementDatabase");로 정확히 되어있는지 확인을 해보시고, 정확히 되어있다면 Resources 폴더에 AchievementDatabase라는 명칭의 Database가 만들어져있는지 확인해보시면 될 것 같습니다.

감사합니다.

UniTea님의 프로필

UniTea

질문자

2022.06.12

신속하고 친절한 댓글 감사드립니다