빠른 속도로 움직이는 사물을 detect하는 방법



[스토리]

탁구게임을 만들다가 처음 마주친 문제는 탁구채로 탁구공을 칠 수 없다는 것이였다.

종종 있는 일이 될 수 있겠지만, 가장 처음 마주한 문제점이 가장 핵심적이고 기본적인 기능인지라 근심이 컸다.


Cast를 활용하여 자체적인 충돌을 감지하고 물리식을 구현하여 운동량을 적용할 수 있겠지만

Unity엔진에서 자체적으로 제공하는 기능을 사용하기 원하는 개발자도 있다고 생각하기 때문에 리서치를 진행했다.



1. Unity Engine 사용하기


Step 1) 충돌을 진행할 두 물체에 RigidbodyBasic Collider를 [Add Component] 한다.

* Basic Collider는 Mesh Collider를 제외한 Box, Sphere, Capsule Collider를 의미한다.


Step 2) Rigidbody에서 Collision Detection을 Continuous Dynamic 혹은 Continuous Speculative를 선택한다.


* Rigidbody의 Collision Detection Mode에 관해 자세한 사항 참조: *

https://docs.unity3d.com/ScriptReference/Rigidbody-collisionDetectionMode.html


Step 3) Collider에서 Trigger가 선택되어 있지 않도록 설정한다. (Collision을 사용하기 때문)




2. 참고사항

Continuous Speculative를 사용했다면, 두 Object가 실제로 닿지 않았는데 충돌이 처리되는 경우를 볼 수 있다. 이는 다수 Object가 가지고 있는 Velocity와 Collider를 고려해서 추측성 충돌을 발생시키는 것이다.


충돌 감지 모드에서 지속적인 동적 감지로 인해 무거운 성능을 가지고 있는 Continuous Dynamic보다 가벼운 성능을 가지고 있으며 API에 따르면 각 운동을 비교적 잘 처리한다고 한다.


무엇이 더 효율적인지는 경우에따라 다르기 때문에 이 문서에서는 기재하지 않고, 다음 기회에 경우에따라 사용하는 Collision Detection Mode에 관해 기술하도록 하겠다.

+ Recent posts