작성
·
53
0
안녕하세요. 튜토리얼과 세이브 파일 강의 수강하고 코드를 그대로 작성했는데 해당 널 에러가 발생합니다.
NullReferenceException: Object reference not set to an instance of an object
GameManager+<CoInitialize>d__12.MoveNext () (at Assets/@Scripts/Manager/GameManager.cs:46)
UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at <28bc61a429714536ab08181feb5cfb97>:0)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr, Boolean&)
public IEnumerator CoInitialize()
{
yield return new WaitForEndOfFrame();
Player = FindAnyObjectByType<PlayerController>();
Restaurant = FindAnyObjectByType<Restaurant>();
int index = Restaurant.StageNum;
Restaurant.SetInfo(SaveData.Restaurants[index]); //26번째 줄
StartCoroutine(CoSaveData());
}
널 체크를 해봤는데도 Player와 Restaurant 모두 널이 아닙니다.
그래서 Restaurant의 SetInfo() 함수 부분을 봤더니 Restaurant의Restaurant Systems와 Props들이 전부 비어있습니다.
근데 코드 상으로 널 체크해서 디버그를 출력하도록 해도 디버그가 찍히지 않습니다.
필요한 Props들 전부 UnlockableBase를 상속하였고 RestaurantSystemes도 SystemBase 상속하고 자식 오브젝트에 위치하고 있고 코드도 전부 동일합니다.
SetInfo 함수의 호출 순서의 문제 일까요? 어디의 문제인지 어딜 수정해야하는지 모르겠습니다 ㅠㅠ
답변 2
0
네 대부분 SetInfo의 호출 관련된 문제입니다.
[1] 다 배치해서 연결만 하면 이미 객체의 스폰이 보장되어 있으나,
[2] 동적으로 코드를 만들 때는 순서에 신경을 쓰거나
[3] 아니면 애당초 객체를 만드는 부분과, 서로 연결하는 부분을 분리해서
타이밍 이슈가 생기지 않게 만들어야 하는데
이 강의에서는 그 부분을 크게 강조하지 않아 순서가 꼬일 수 있습니다.
마지막 올려드린 최종본에서는 [1] 미리 배치한 버전으로 수정했으나,
이 부분은 사실 [2][3]와 같은 다양한 방식으로 수정이 가능합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 루삐리뽕님.
현재 발생한 NullReferenceException
오류는 Restaurant
오브젝트의 SetInfo()
함수에서 어떤 객체가 제대로 초기화되지 않아서 발생하는 문제입니다. Restaurant
의 Restaurant Systems
나 Props
필드가 비어있는 상태에서 호출되고 있는 것이 원인일 가능성이 높습니다. 이를 해결하기 위한 몇 가지 조언을 드리겠습니다.
오브젝트 초기화 여부 확인: Restaurant
오브젝트의 Restaurant Systems
와 Props
필드가 모두 제대로 초기화되고 채워졌는지 확인해 보세요. Hierarchy 창에서 해당 오브젝트가 존재하는지와 적절한 자식 오브젝트가 연결되어 있는지 체크하세요.
SetInfo
호출 시점 확인: Restaurant
의 초기화가 완료되기 전에 SetInfo()
가 호출되고 있는 것은 아닌지 확인이 필요합니다. FindAnyObjectByType
후 Restaurant
이 정상적으로 초기화된 후 SetInfo()
를 호출하도록 확인하세요.
디버그 로그 추가: SetInfo()
함수 내부에 디버그 로그를 추가하여 어떤 단계에서 문제가 발생하는지 트래킹해 보세요. 객체가 널인지 아닌지, 리스트에 올바른 값이 있는지 체크하는 로직이 필요합니다.
스테이지 데이터 확인: SaveData.Restaurants[index]
부분의 데이터가 정상적으로 초기화된 데이터인지 확인해 보세요. 데이터가 예상했던 방식으로 저장 및 로드되고 있는지도 체크합니다.
다음 링크는 유사한 문제의 해결 방안을 제시합니다:
- NullReferenceException 어떻게 해결해야될까요?
- NullReferenceException 에러 관련
위 링크들에서도 널 참조와 관련된 문제를 해결하는 방법에 대해 유사한 고민을 다루고 있습니다. 이러한 방법들이 도움이 될 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.