Unity - 터널링

김도현·2023년 10월 17일

유니티는 함수의 실행 순서가 정해져 있으며 그에 따라 호출해야 하는 위치가 변경됩니다.

Update() 함수

Update() 함수는 프레임마다 호출하는 함수로, 시간 및 횟수가 불규칙합니다. 왜냐하면 기기의 성능에 따라 갱신 여부(t)가 달리질 수 있기 때문입니다.

터널링 (Tunneling)현상 발생 원인

빠른속도의 총알이 갱신 주기 사이에 Collider를 갖고 있는 객체를 지나가 버리면 tigger가 작동하지 않습니다.

해결 방법

1. Collision Detection 모드 변경

Rigidbody의 Collision Detection 모드를 Continuous Dynamic으로 설정
이 모드는 연속 충돌 감지를 활성화 하여 터널링을 감소시킬수 있습니다.
그러나 이 모드는 연산 비용이 높아질수 있으므로 성능에 영향을 줄 수 있으므로 꼭 필요한 객채에만 설정해야 합니다.

2. 충돌 체크 간격 조절

프레임당 충돌 체크 간격을 줄이는 것도 터널링을 완화하는 데 도움이 될 수 있습니다. 유니티에서는 Time.fixedDeltaTime(기본 0.02) 값을 조정하여 충돌 체크 간격을 조절할 수 있습니다.

3. 콜라이더 크리 및 형태 조정

콜라이더의 크기와 형태를 조정하여 물체 간의 겹침을 최소화할 수 있습니다.
충돌 감지를 위해 콜라이더를 더 작게 만들거나, 충돌이 예상되는 부분을 더 상세하게 나타내는 복합 콜라이더를 사용할 수 있습니다.

4. 속도 제한

플레이어 RigidBody의 속도를 제한하는 것도 터널링을 줄일 수 있는 방법입니다. 일반적으로 높은 속도를 움직이는 객체일수록 터널링이 더 자주 발생할 수 있으므로, 적절한 속도 제한을 설정하여 문제를 완하할 수 있습니다.

번외

LateUpdate()함수를 사용해 카메라 떨림 해결 방법

LastUpdate()는 마지막 결과물만 화면에 잡고 싶을 때 사용한다.

  • 주로 카메라 스크립트등에 사용됩니다.

캐릭터를 따라다니는 카메라 기능을 적용할 때 캐릭터 이동 및 물리 효과가 끝났을 때를 그린다.
즉, 여러 요인을 고려해서 프레임 안에 움직여야 할 오브젝트들이 다 움직인 후 최종 화면을 구현합니다.

0개의 댓글