한동안 프로젝트를 진행하면서 많은 문제들에 봉착했고, 몇 문제에는 굉장히 많은 시간을 쏟아부어야 했다..

이번 일지에는 그 문제들에 대해 다뤄보고자 한다. 끙.

1) 시간이 경과하니 챔피언을 무시하는 RayCast

이 문제는, 마우스로 쏘는 레이가 시간이 지남에 따라 챔피언을 인식하지 못하고 바닥만 인식하는 문제였다. 이 문제에 대해 굉장히 많은 시간을 사용했다. 알고 보니 정말로 별거 아니었는데..

결론적으로 문제는 NavMesh와 RigidBody의 Use Gravity가 겹침으로써 발생하고 있었다. NavMesh 자체적으로 맵을 인식하는 기능이 붙어있음에도 불구하고 중력을 활성화시킴으로써 내부적으로 오작동이 발생한 것이다.

굉장히 오래 구글링을 했으나 결국 문제의 해결법을 찾아내지 못하고 뚫어져라 프로젝트를 바라보다가 겨우 발견한 것이다. ㅠㅠ.. 별거 아닌데 시간만 무진장 날렸다. 중력을 비활성화시킴으로써 결국 해결이 되었다.

2) Trigger의 Collider 인식

챔피언의 공격범위 내에 적이 들어왔을 때 적을 인식하는 시스템이었는데, 챔피언의 공격범위 밖에서도 적이 인식이 되고 있었다. 뭐가 문제일까 들여다보니, 챔피언의 공격범위를 Collider의 크기를 키워서 사용하고 있었는데 (적 역시 공격범위를 Collider로 사용하고 있었다.) 트리거가 적의 공격 범위, 즉 Collider를 적으로 인식해서 챔피언과 적의 공격범위가 맞물릴 때 triggerEnter이 작동하고 있었다.

어떻게 할까 고민하다가 결국 Collider의 크기를 정상화(챔피언의 크기만큼으로)시키고 Scope(챔피언의 자식 오브젝트인, 공격 범위를 표시하는 오브젝트)에 Collider를 붙여서 이를 해결해야 했다.

3) RaycastHit이 Scope를 캐릭터로 인식

레이를 쏴서 태그를 가져온 후 적을 인식하는 방식이다. 그런데 분명 땅에 레이를 쐈는데 적을 인식하는 것이다. 이건 캐릭터의 자식노드인 Scope를 마치 캐릭터인 것처럼 인식하고 캐릭터의 태그를 가져옴으로서 발생하는 문제였다. 이건 Scope에 강체(RigidBody)를 붙임으로써 해결했다.

여기서 또 문제가 발생;; mouse로 쏜 레이가 챔피언을 인식하지 않는다.. trigger로는 인식이 잘 되는 반면에.. 레이어를 사용해서 해결해보려 했지만 잘 안되는 거 같다.. 문제 해결 후에 다시 적기로.

레이어 자체적으로 무시하는 레이어를 제공하고 있었네.. 경수가 가르쳐줌.. Ignore Raycast라는 이름의 레이어를 지정하는 것만으로도 작동이 되었다.

4) NullReferenceException 발생

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

다음 오류가 발생한다. 하지만 게임은 잘 실행이 된다…. Scope에 스크립트를 붙이면서 어쩔 수 없이 본체의 스크립트의 변수들을 가져와서 써야 했는데 그때문에 발생하는 것 같다. GetComponent…. 그런데 로그를 찍어보면 또 값은 잘 불러와진다. 그런데 Null이라니. 뭐가 문제일까..

이건 아직 해결하지 못했다. 흑 ㅠㅠ.. 실질적으로 게임은 잘 돌아가는데 오류만 뜨는 셈이다.. 뭐가 문제일까.

이건 아직 작성하지 않은 미니언에 붙여놓은 게 문제가 되었던 것이었다….. 아직 안 만들었으니까 떼버렸다. 문제 끝!


문제 하나를 해결하면 문제가 굴러들어오는 이건 문제 지옥 ㅠㅠ..

[Unity] [일지] 소프트웨어 프로젝트, AOS 만들기 (1) - NavMesh

[Unity] [일지] 소프트웨어 프로젝트, AOS 만들기 (2) - 가까운 적 인식에 대해

[Unity] [일지] 소프트웨어 프로젝트, AOS 만들기 (3) - HP 관리

[Unity] [일지] 소프트웨어 프로젝트, AOS 만들기 (5) - Terrain으로 지형 만들기

[Unity] [완성] 소프트웨어 프로젝트, AOS 만들기