본문 바로가기
IT

[유니티] collider 안 먹힐 때 / 뚫고 지나가는 오류 생길 때 / 충돌 안될 때 collision detection 사용하기

by 배애앰이 좋아 2023. 11. 1.
반응형

 

이번 프로젝트를 개발하다가 한 가지 문제가 생겼고 해결하는 과정을 정리할까 합니다. 

바로 생긴 문제는 제목처럼 땅과 떨어지는 물체에 collider를 해놓았음에도 안 먹히거나 충돌이 안되고 땅을 뚫고 지나가는 오류가 생겼습니다. 이 문제는 특히 작은 물체일수록 이런 문제들이 많이 발생했는데 그 이유와 해결 방안을 드디어 찾았습니다. 

 

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

 

 

위 컴포넌트에서 아래 쪽 collision detection 을 보시면 됩니다. 해당 부분을 눌려보면 여러 설정들이 있습니다.

 

1. 불연속(Discrete)    

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

 

2. 연속(Continuous)       

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

 

3. 동적연속(Continuous Dynamic)

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

 

4. 지속적 예측( Continuous Speculative)

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

 

저 같은 경우 낙하하는 물체와 땅에 대해 적용하고 싶었기 때문에 4번으로 설정하여 사용했습니다. 

천천히 움직이는 물체라면 1번을 / 빠르게 움직이지만 타깃이 정적이라면 2번을 / 빠르게 움직이는 것들의 충돌을 한다면 3번 / 골루골루 이용하고 싶다면 4번을 이용하는 것을 추천드립니다.

 

위 내용에 정확한 참고 내용은 유니티 공식 문서를 참고하면 좋습니다

공식 문서 링크 : https://docs.unity3d.com/kr/560/Manual/class-Rigidbody.html

 

리지드바디 - Unity 매뉴얼

Rigidbody 는 GameObject 가 물리 제어로 동작하게 합니다. 리지드바디는 힘과 토크를 받아 오브젝트가 사실적으로 움직이도록 해줍니다. 리지드바디가 포함된 모든 게임 오브젝트는 중력의 영향을

docs.unity3d.com

 

읽어주셔서 감사합니다.

 

반응형

댓글