유니티 에러 이렇게 해결하자

유니티로 프로젝트를 진행하다 보면 반드시 한번씩은 경험하게 되는 무수히 많은 에러들이 존재합니다.
저처럼 유니티 프로그래밍에 익숙하지 않은 사람들은 처음 보는 상황에 당황하게 되고 이런 오류들이 왜 발생하는지
알 수 없기에 수정하기도 어려운 부분들이 많습니다. 옆에서 가르쳐 줄 사람이 없다면 결국 검색 + Chat Gpt에게 의존하게 되고
수 많은 시행착오를 겪어야 하거나 시간을 낭비하게 되기에 경험을 통해서 해결했던 방식에 대해서 글을 작성해봅니다.
이 글은 제 개인적으로 해결한 경험이기에 반드시 ‘이것이 맞다’고 생각하진 마시고 참고를 하시길 바라며
혹시라도 더 좋은 방법이나 해결책을 알고 계신다면 귀중한 노하우를 댓글로 알려주시면 수정을 하여 다른 사람들도
많이 볼 수 있도록 업데이트를 할 예정입니다.
NullReferenceException
변수가 null인데 접근을 하려고 할 때 자주 발생하는 오류로 예를 들어 player.health = 100; 이 때 player가 null일 경우 발생합니다.
실제로 값을 반환하는지 확인하거나 코드에 if (player != null) 같은 코드로 로그를 찍어보며 확인하면서 접근해보면 해결이 됩니다.
not exist in the current context
오타가 났거나, 변수의 범위의 문제 혹은 선언되지 않은 변수를 사용하려고 할 때 오류가 납니다.
대부분 변수/함수의 이름을 확인해서 해결이 가능하고 스크립트의 파일 이름은 eeeeee 인데
스크립트의 내용물에는 eeeeeeee 라고 되어있거나 지역 변수와 전역 변수를 구분하지 않았거나
스크립트 안에 필요한 using 구문으로 필요한 네임스페이스를 쓰지 않았는지 확인해야 합니다.
is not a valid MonoBehavior 같은 오류가 이런 경우인데, Player.cs 그리고 파일 안에는
Public class Playeer : Monobehaviour 같이 되어있으면 안되고 파일이름과 같아야 합니다.
DontDestroyOnLoad에러
대부분의 대답이 Chat Gpt에서 그저 루트에 넣어야 해결된다고만 말하고 있지만 루트에 넣지 않아도 되는 오브젝트도 존재하고
혹은 가장 최상위에 넣었음에도 계속해서 DontDestroyOnLoad가 발생하는 원인이 존재합니다.
System.ArgumentException: Illegal characters in path. (Parameter ‘path’)
System.ArgumentException: Illegal characters in path. (Parameter ‘path’)
예를 들어 위와 같은 Parameter ‘path’ 관련 오류가 발생할 경우는 많은 반복 수정으로 인한 꼬임 현상으로 간단하게
해결이 가능합니다.
만약 이것으로 해결되지 않는다면, 유니티 상단메뉴 Assets > Reimport all > Reimport 선택하여 다시 유니티가 재가동되면서 해결됩니다.
MissingComponentException
코드 내부에서 GetComponent<이름>()을 호출 했지만 해당 컴포넌트가 게임 오브젝트로 참조 되지 않아
발생하는 에러입니다. 하이라키 창에서 게임 오브젝트에 컴포넌트를 잘 붙여놨는지 확인 하거나
코드로 하고 싶다면 AddComponent<>()로 추가해서 사용하면 됩니다.
CS1002, CS1513, CS0103 (C#컴파일 에러)
원인은 대부분 문법의 오류로 세미콜론을 잊고 사용했거나 중괄호 오타, C#문법으로 작성되지
않은 경우에 오류가 발생하며 그냥 Visual Studio에서 빨간 밑줄이 그어진 곳을 따라가 무엇을
잘못했는 확인해보면 바로 해결이 됩니다.
IL2CPP, Platform
build failed, DllNotFoundException, API not supported 같은 에러가 나는 이유는
플랫폼별로 지원되지 않는 API를 사용한 경우가 많으며 사용 API대상 플랫폼에서 쓸 수 있는 것인지
체크 한 이후에 사용을 하거나 그 그기능이 쓸 수 있는지 없는지 모른다면 그냥 해당 코드를 삭제하는 것이
가장 쉬운 길입니다.
Animation 관련 오류들
Animator has not been initialized, Parameter does not exist같은 에러가 나오는 이유는
Animator 컴포넌트가 없거나 파라미터에 오타를 쓴 경우 나타납니다.
Animator.SetTrigger(“Jump”) 호출을 했는데 파라미터는 Jumpp라고 쓴 경우가 있으며
해당 파라미터가 있는지 확인하거나 컴포넌트에 제대로 연결되어 있는지를 체크해야 합니다.
디버그 콘솔을 잘 활용해보자
Debug.Log(“현재 체력: ” + health);
Debug.LogWarning(“경고 메시지”);
Debug.LogError(“에러 메시지”);
무언가 막혔거나 제대로 구현이 되지 않는 경우에는 자신이 납득이 갈 수 있게 디버그 로그를 찍으며
확인하는 것이 가장 빠른 해결 방법이며 제대로 이해가 가지 않는 코드를 사용하면 버그가 쉽게 생겨나고
자신의 힘으로 해결하기 어려워집니다.