EasyCastleUNITY

길건너 친구들 모작 개발일지 13 (뗏목 탑승 문제점 해결) 본문

3D 프로젝트 개발 일지(Crossy Road, 한글명: 길건너 친구들)

길건너 친구들 모작 개발일지 13 (뗏목 탑승 문제점 해결)

EasyCastleT 2023. 10. 12. 12:01

뗏목과 충돌했지만 그대로 물에 빠져 죽는 모습

기존에 만들어둔 뗏목 탑승에서 문제가 발생했습니다. 물에 빠지면 죽는 조건을 추가하면서 생긴 문제입니다. 

모두 Player 스크립트의 OnTriggerEnter에 작성되어 있음

뗏목과 충돌하면 bool 변수 isOnRaft가 true가 되어,  if문이 실행이 되지 않아야 합니다. 

하지만, 뗏목과 부딫치기 전에 물과 충돌하는 경우가 발생했습니다. 

물과 먼저 충돌하여, isOnRaft가 false인 상태이기에 플레이어가 먼저 사망을 하게 되고, 

뗏목은 탑승하지 못합니다. 하지만 위치 상으로는 뗏목에 탑승하는 것이 정상이기에 이 문제점을 해결해보려고 합니다. 

 

이 문제가 생기는 원인은 바로, 물이 뗏목보다 먼저 충돌처리가 동작한다는 점입니다. 

OnTriggerEnter는 유니티 자체 메서드이기에, 제가 충돌 순서를 바꾸는 것은 할 수 없습니다. 

그래서 유니티 이벤트 호출 순서를 다시 파악했습니다. 

 

확인해본 결과 OnTriggerXXX 함수들은 OnTriggerEnter, OnTriggerStay, OnTriggerExit 순으로 호출이 됩니다. 

그래서, 물과 충돌처리하는 부분을 OnTriggerStay로 옮겨 무조건 뗏목이 물보다 먼저 충돌처리를 하도록 했습니다. 

이렇게 하면 근본적인 문제인, 물이 뗏목보다 먼저 충돌하는 것을 막을 수 있습니다. 

하지만 OnTriggerStay는 충돌하고 있는 동안 계속 호출하는 메서드입니다. 

따라서, 충돌하고 있으면 onDie 대리자가 계속 호출되게 됩니다. 

 

그래서 이 메서드는 충돌을 하면 호출을 하는 메서드이기에 한번만 호출하도록 onDie를 하는 순간

player의 Collider를 비활성화 시켰습니다. 

Collider가 비활성화 되어 OnTriggerStay는 한번만 호출되고 더 이상 호출되지 않게 됩니다. 

이렇게 뗏목탑승의 문제를 해결하였습니다. 

잘 탑승되는 모습