작성
·
62
답변 6
0
ArgumentNullException: Value cannot be null.
그리고 NULL 크래시는 모든 버그 중에 제일 이유도 간단하고 고치기 쉽습니다.
NULL 크래시는 100% 무조건 찾을 수 있다고 믿음을 갖고
왜 그 부분이 NULL 참조값인지를 소스 차원에서 확인하거나, 디버깅을 해보시면 됩니다.
0
슬쩍 보니 if (go = null)이 아니고 if (go == null)입니다.
널체크를 하지 않고 null 대입을 하셨네요.
종종 지뢰를 밟다 보면 매의 눈을 탑재하게 되니 힘내세요
0
Init까지 대조해봤는데 전부 똑같아요
강의에서는 재생을 눌렀을때 DontDestroyOnLoad아래에 @Managers가 나오는데
저는 @Managers가 안나옵니다
그리고
ArgumentNullException: Value cannot be null.
Parameter name: target
UnityEngine.Bindings.ThrowHelper.ThrowArgumentNullException (System.Object obj, System.String parameterName) (at <ce25f60185214755aecd20f4c928c90e>:0)
UnityEngine.Object.DontDestroyOnLoad (UnityEngine.Object target) (at <ce25f60185214755aecd20f4c928c90e>:0)
Managers.Init () (at Assets/Scripts/Managers/Managers.cs:34)
Managers.get_Instance () (at Assets/Scripts/Managers/Managers.cs:8)
Managers.get_Input () (at Assets/Scripts/Managers/Managers.cs:11)
PlayerController.Start () (at Assets/Scripts/PlayerController.cs:18)
계속 이렇게 오류가 나옵니다
0
하... 전부 대조 해봤는데 다 똑같은데
Managers 의 static void Init() 의 내용이 다른거같은데 강의에 Init 메소드 내용이 안보입니다
코드 좀 부탁합니다.
0
그거대로 고쳤더니 이제는 이렇게 오류가 나요
ArgumentNullException: Value cannot be null.
Parameter name: target
UnityEngine.Bindings.ThrowHelper.ThrowArgumentNullException (System.Object obj, System.String parameterName) (at <ce25f60185214755aecd20f4c928c90e>:0)
UnityEngine.Object.DontDestroyOnLoad (UnityEngine.Object target) (at <ce25f60185214755aecd20f4c928c90e>:0)
Managers.Init () (at Assets/Scripts/Managers/Managers.cs:34)
Managers.get_Instance () (at Assets/Scripts/Managers/Managers.cs:8)
Managers.get_Input () (at Assets/Scripts/Managers/Managers.cs:11)
PlayerController.Start () (at Assets/Scripts/PlayerController.cs:18)
제미나이 한테 물어봤는데도 뭔 말인지 모르겠어요
0
안녕하세요, 인프런 AI 인턴입니다.
Qwe Asd님께서 겪고 계신 문제는 재귀 호출로 인한 StackOverflowException
에러로 보입니다. 이는 Managers
클래스에서 Init()
메소드를 호출하는 과정에서 발생하는데, 해당 메소드 내에서 다시 Instance
를 호출하여 무한 루프가 생겼기 때문입니다.
이 문제를 해결하려면 Init()
함수 내부에서 Instance
프로퍼티를 직접 호출하지 않고, 대신 s_instance
를 참조하도록 수정해야 합니다. 이는 아래 코드에서와 같이 할 수 있습니다:
static void Init()
{
if (s_instance == null)
{
GameObject go = GameObject.Find("@Managers");
if (go == null)
{
go = new GameObject { name = "@Managers" };
go.AddComponent<Managers>();
}
DontDestroyOnLoad(go);
s_instance = go.GetComponent<Managers>();
}
}
Instance
프로퍼티에서 Init()
을 호출하게 되면 내부에서 다시 Instance
를 호출하게 되고, 이는 무한 루프를 일으킵니다. 따라서 Init()
에서는 s_instance
를 통해 직접 접근하는 것이 중요합니다.
유사한 문제를 다룬 다른 질문도 참고하시면 도움이 될 것입니다:
- UI_Manager 작성중 질문 드립니다.
- Null Reference Exception 에러
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.