유니티 충돌이 뚫리는 문제?

프로그래밍/유니티2018. 4. 29. 15:35

안녕하세요. 개발자 드리머즈입니다.


유니티로 개발 도중에 발생한 문제? 정리합니다.


유니티에서 collider2D의 영역을 위 사진의 박스처럼 얇게 한 경우에..  두 물체가 빠르게 충돌하는 경우.. 두 물체가 뚫리는 현상이 발견됐습니다.


(하늘 높이서 박스를 떨어뜨려 높은 속도로 지면과 부딪치게 하는 테스트)


이 문제에 대해.. 찾아보니 "Bullet Through Paper(종이를 뚫는 총알?)"이라고 불리는 게임 개발 환경에서 아주 유명한 문제입니다.(https://answers.unity.com/questions/176953/thin-objects-can-fall-through-the-ground.html)


이 문제가 발생하는 이유는 게임에서 사용되는 물리학이 연속적이지 않기 때문입니다. 게임은 일련의 게임 화면을 이용해 충돌을 판단합니다.


위 사진의 왼쪽 박스처럼 박스의 낙하 속도가 느린 경우에 게임 엔진이 획득한 화면을 통해 두 물체(박스와 바닥)의 충돌을 감지하여 박스는 바닥에서 멈추게 됩니다.

하지만 위 사진의 오른쪽 박스처럼 박스의 낙하 속도가 빠르다면 게임 엔진이 획득(인식)하는 화면에서 박스는.. 바닥과 겹치지 않습니다. 그래서 충돌을 인식하지 못하게 되어.. 박스는 바닥을 슝~ 뚫고 떨어지는 것이죠.



해결 방법으로는 충돌 감지는 연속적으로 할 수 있도록 Rigidbody의 Collision Detection을 Discrete에서 Continuous로 변경하면 됩니다. 하지만.. 이렇게 바꾸는 것은 cpu에 무리를 준다고 하네요.

그래서 그냥 collision box의 두께를 두껍게 하거나.. 충돌하는 물체의 속도를 줄여서 Bullet Through Paper 현상이 일어나지 않도록 하는게 좋다고 합니다.


그런데 제가 하나의 game object만 Collision Detection은 Continuous로 변경하여 테스트 했을 때.. 딱히 CPU 사용량이 증가하지 않았습니다. CPU에 부담이 되는지 아닌지는 직접 테스트해보고 Continuous를 사용할지 말지를 결정하면 될 것 같습니다.




작성자

Posted by 드리머즈

관련 글

댓글 영역