유니티의 Collider는 정말 유용한 도구이지만 크기가 작거나 빠르게 자나갈 때 인식되지 않는 현상이 있어서 쓰기 조심스러울 때가 많았다.

이번 팀 프로젝트에서도 총알이 맞지 않는 이슈가 있었고 팀원들이 해결한 부분이 있어서 사이트를 보고 정리해본다.

발생하는 이유 : 유니티 내 rigidbody 컴포넌트를 달고 기본적인 설정으로 사용하게 되면 충돌 감지하는 프레임이 늦어서 한 프레임 -> 다음 프레임에서 통과하는 경우가 있다. 이 문제를 막기위해서는 기본 프레임보다 더 빠르게 감지하기 위해 오브젝트 리지드 바디에서 연속 충돌 감지할 수 있도록 설정을 바꿔줘야 한다.

  1. 불연속(Discrete)

일정 tick 간격으로 충돌 확인, 다른 콜라이더들은 충돌할때 불연속 충돌 감지를 사용합니다. 기본적으로 설정되는 값이나 시간 간격이 크거나 엄청 빨리 움직일때 충돌이 안될 수 있습니다. 이로 인해 성능이 크게 떨어지나 연산은 빠르고 CPU를 가장 적게 사용하는 장점이 있습니다. 다만, 다른 물체를 통과하는 "터널링"으로 알려진 문제가 발생할 수 있습니다.

  1. 연속(Continuous)

( CPU를 더 많이 사용하지만 빠르게 움직이는 개체에서 터널링을 방지합니다. 물리 엔진은 마지막 물리 타임스텝에서 다음 타임스텝까지 미리 예측하고 해당 시간 동안 객체가 무엇과 충돌하는지 확인합니다. 그러나 정적 콜라이더(비움직이는 물체)에 대해서만 확인합니다.

  1. 동적연속(Continuous Dynamic)

Continuous와 비슷하지만 역시 Continuous Dynamic으로 설정된 다른 동적(움직이는) 콜라이더와의 충돌도 확인합니다. 이것은 CPU를 가장 많이 사용하는 옵션이지만 가장 정확한 충돌 감지 기능을 제공합니다.

  1. 지속적 예측( Continuous Speculative)

Unity 2018.3에서 도입된 최신 옵션입니다. 연속 동적과 유사한 수준의 정확도를 제공할 수 있지만 CPU 비용은 더 낮은 충돌 감지에 예측적 접근 방식을 사용합니다. 모든 객체가 현재 방향으로 계속 이동한다고 가정하고 이를 기반으로 잠재적인 충돌을 계산합니다.

유니티 공식 문서: https://docs.unity3d.com/kr/560/Manual/class-Rigidbody.html

profile
스터디 로그

0개의 댓글

관련 채용 정보