내일배움캠프/TIL

[내배캠][Unity6기][TIL] 이중 콜라이더 트러블슈팅

binary는 호남선 2024. 12. 20. 21:01

특정 위치에서만 인간이 몬스터를 계속 공격하거나, 한번만 공격하거나 공격하지 않고 지나가는 문제가 있어서 튜터님께 도움을 요청드렸다. 그전에 디버그도 찍어보고 인스펙터로 런타임에서 확인했을 때는 인간이 전투 상태에 들어갔다가 다시 걷기 상태로 전환되는 이상 현상을 도무지 알 수 없었다... 그것도 다른 위치에서는 다 정상 작동하는데 특정 위치에서만 현상이 나타나는 것도 이해할 수 없었다.

 

[ 문제 현상 ]

특정 위치에서 인간이 몬스터를 한번만 공격하고 지나감

(다른 위치에서 한번에 몰려올때나 밀려서 지나갈 때는 그냥 지나가거나 정상적으로 전투를 하기도 함)

 

[ 문제 원인 파악(디버깅) ]

1. 특정 위치에서 인간이 BattleState에 있다가 바로 WalkState로 전이되는 것을 디버그 로그로 확인

2. 인간이 Battle -> Walk로 전이되는 조건은 TargetMonster가 null

3. TargetMonster가 null이 되는 조건은 몬스터 Fatigue가 max가 되어 풀로 돌아가거나, monster 콜라이더에서 human 태그가 붙은 콜라이더가 OnTriggerExit 될 때

-- 여기까지가 내가 파악한 부분이고 몬스터 콜라이더 범위 내에 인간이 나가지를 않았는데 왜 상태가 전이되는지 파악하지 못했다... 튜터님의 도움으로 정확한 원인을 파악할 수 있었다.

 

4. 인간 콜라이더가 Monster 내부 콜라이더(InteractionZone)에 OnTriggerEnter 되었다가 Exit

(Monster의 Trigger 판정 스크립트가 부모 오브젝트에 있고, 부모 오브젝트에도 Collider가 있어서 자식 오브젝트 콜라이더 때문에 문제가 생길 거라고는 생각하지 못했다...)

5. Human 콜라이더가 몬스터에서 Exit으로 인식되어 TargetMonster를 null로 만듦

6. TargetMonster가 null이 되어 인간이 Walk 상태로 전이

좌: 바깥쪽 원 콜라이더는 탐지범위용, 안쪽 원 콜라이더는 Upgrade 팝업용 우: 안쪽 콜라이더에 인간이 접촉됨

 

[ 문제 해결 ]

안쪽 콜라이더를 몬스터 업그레이드 팝업 용도로 사용하고 있으므로 다른 스폰 위치에서처럼 애초에 인간이 안쪽 Collider에 접촉하지 못하도록 스폰 위치를 이동