본문 바로가기
게임 프로그래밍/게임개발 중급

게임개발 중급(107) - Monster Killer(69)

by jyppro 2024. 11. 16.

Monster Killer

안녕하세요. 다시 버그에 대한 이야기를 들고 왔습니다. 이번에는 몬스터와 아이템 콜라이더에 대해 이야기 해보겠습니다.

 

버그 수정 - 몬스터, 아이템 콜라이더

몬스터콜라이더
바닥과 닿아있는 꼬리부분을 통해 플레이어가 몬스터 위로 올라감

 

첫번째로 몬스터 콜라이더는 플레이어가 몬스터 위에 올라갈 수 있던 버그입니다. 기존에 몬스터의 피격 처리는 부위 별로 진행되었기 때문에 몬스터 자체에 콜라이더가 존재하는 것이 아닌 몬스터의 각 부위, 예를 들어 다리, 몸통, 머리 등의 부위 별로 콜라이더가 존재하고 피격판정이 진행되었기 때문에 플레이어가 몬스터에게 지속적으로 충돌을 시도할 시에 몬스터의 특정 부위를 통해 몬스터 위로 타고 올라가지는 버그가 발생했던 것입니다.

 

이미 부위 별 콜라이더를 많이 사용하고 있는 터라, 어떻게든 추가적인 리소스를 사용하지 않고 이를 막아보려 다양한 시도를 했습니다. 플레이어를 NavMeshObstacle로 설정하여 겹치지 않도록 하려고 했지만, 이는 NavMesh를 사용하는 몬스터에 한해 장애물 판정이 되는 것으로 플레이어가 직접 컨트롤하여 올라가는 것을 막지는 못했습니다.

 

다른 시도로는 바닥과 닿아있는 꼬리 부분의 콜라이더를 타고 올라가는 것이 가능했기 때문에 이 콜라이더를 최대한 위로 올려서 바닥과의 거리를 두려고 했지만, 생각보다 많이 위로 올려도 타고 올라가는 것이 가능했습니다. 다음은 플레이어가 가지고 있는 캐릭터 컨트롤러 옵션에서, 경사로를 밟고 올라가는 것을 컨트롤 하는 Slope Limit과 Step Offset 등을 최소로 낮춰 경사로를 올라가지 못하도록 해봤지만, 이상하게도 전혀 해결되지 않았습니다.

 

새콜라이더
새로운 콜라이더 추가

 

결국 저는 새로운 콜라이더를 몬스터에게 씌워서 해결하는 방법을 사용할 수밖에 없었습니다. 그러나 이 콜라이더도 그냥 사용하면 여전히 다른 문제를 만들었습니다. 기존 피격판정을 부위에서 진행했기 때문에, 새로 만드는 몬스터 콜라이더는 피격판정을 진행하면 안되고 플레이어와의 충돌만 막아야 했습니다. 그래서 PlayerLayer를 충돌가능한 레이어로 설정하고, 나머지 Default 레이어를 배제시키는 방식을 사용하였습니다. 

 

레이어
레이어로 플레이어 충돌만 방지

 

이때, 레이어에 Nothing과 Everything 옵션이 있는데 Default를 사용한 이유는, 기존에 피격처리를 하던 부위에 적용되어 있던 레이어가 Default이기 때문이고, 저 두 옵션을 사용하면 플레이어 충돌 처리와 겹치기 때문에 제대로 된 처리가 이루어지지 않습니다.

 

이렇게 하면 플레이어가 아무리 몬스터에게 가까이 다가가서 몸을 비벼도 올라가지지 않고, 기존에 플레이어 무기를 통한 공격은 겉에 씌워져있는 콜라이더를 무시하고, 부위 별 콜라이더와 충돌하여 피격처리도 정상적으로 하게 됩니다.

 

버그 수정 - 아이템 콜라이더

아이템 콜라이더는 위에 몬스터와 유사한 내용입니다. 기존 아이템을 개발할 때, 플레이어와 충돌하면 체력을 회복하는 것만 생각해서 단순하게 만들었는데, 플레이 테스트를 거치다보니 플레이어가 공격을 해도 아이템을 먹는 판정이 된다는 것을 알았습니다.

 

트리거처리

 

이를 해결하기 위한 수단으로는 역시 기존에 단순 충돌처리로 작성한 코드를 트리거로 바꿔주고, 정확히 플레이어를 인식하여 작동하도록 만들어 해결했습니다.

 

<NEXT>

오늘은 몬스터와 아이템의 콜라이더 관련 오류 수정에 대해서 알아보았습니다. 다음에도 가볍게 다뤘던 버그를 또 들고올 것 같습니다. 감사합니다.