작성
·
126
0
강의 11분 53분 지점에서 EventSystem을 찾는 부분에서
코드를 작성할때 강의대로 따라가며 Object obj = GameObject.FindObjectOfType(typeof(EventSystem)); 코드를 작성했는데 비주얼스튜디오에서 빨간줄 녹색줄 노란줄이 화려하게 난무하고 유니티에서도 널크러시가 나서요.
비주얼스튜디오에서 잠재적수정사항으로 FindObjectOfType() 가 아니라 FindAnyObjectByType()를 사용하라고 권장해서 일단 임의로 비주얼스튜디오가 하라는대로 FindAnyObjectByType()를 사용하여 코드를 작성했습니다.
비주얼스듀디오가 권장한 대로 수정한 후에 문제가 발생하지 않아 그냥 이대로 진행해 보려고 합니다만
왜 FindObjectOfType()사용에서 널크러시가 발생한 것인지 의문이 생겨서요.
구글링 결과 두 함수 사이에 성능의 차이가 있다는 글을 찾았는데 단순히 성능차이때문에 널크러시가 나지는 않을듯 하고
제가 사용하는 유니티와 비주얼스튜디오의 버전차이 때문인지 아니면 제가 이전에 작성한 코드에 문제가 있어 수정이 필요한 사항인지 궁금해서 문의드립니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
FindObjectOfType()
와 FindAnyObjectByType()
사이에 발생한 문제와 관련하여, 여러 원인이 있을 수 있습니다.
우선, FindObjectOfType()
메소드는 지정된 타입의 Component를 찾아주는 Unity의 메소드입니다. 만약 씬(scene) 안에 해당 타입의 객체가 없거나 잘못 지정된 경우, null을 반환하게 되어 “널 크러시(null crash)“가 발생할 수 있습니다. 이는 FindObjectOfType()
의 정상적인 동작 방식이며, 이 메소드를 사용할 때는 항상 null 체크를 해주어야 합니다.
FindAnyObjectOfType()
라는 메소드는 Unity의 공식 문서나 API에 명시된 바 없습니다. 아마도 비주얼스튜디오의 잠재적 수정사항으로 제안된 것이 잘못된 것일 수 있으며, 실제로 의도하신 것은 FindObjectOfType()
의 사용법을 개선하거나, 올바르게 타입을 지정하여 사용하는 것이었을 수 있습니다.
강의 내용에 따라 문제가 발생한 경우, 먼저 다음을 확인해보시기 바랍니다:
EventSystem
컴포넌트가 현재 씬에 존재하는지 확인해주세요.EventSystem
타입을 올바르게 참조하고 있는지 확인해주세요. 예를 들어, 필요한 네임스페이스를 using
구문으로 임포트했는지 체크해야합니다.성능 차이로 인한 “널 크러시”는 보통 발생하지 않습니다. 성능 차이는 어떤 메소드가 더 효율적인가와 관련이 있으나, 오류 발생 여부와는 직접적인 관련이 없습니다.
문제 해결을 위해 다음을 시도해볼 수 있습니다:
FindObjectOfType()
의 사용법과 관련된 최신 정보를 찾아보세요.FindObjectOfType()
사용 전에 대상 컴포넌트가 씬에 존재하는지 확인하고, null 체크를 항상 해주시기 바랍니다.위의 방법으로도 문제가 해결되지 않으면, Unity 공식 포럼이나 Stack Overflow 같은 개발자 커뮤니티에 질문을 올려 도움을 받는 것도 좋은 방법입니다.