빠른 속도로 움직이는 사물을 detect하는 방법
[스토리]
탁구게임을 만들다가 처음 마주친 문제는 탁구채로 탁구공을 칠 수 없다는 것이였다.
종종 있는 일이 될 수 있겠지만, 가장 처음 마주한 문제점이 가장 핵심적이고 기본적인 기능인지라 근심이 컸다.
Cast를 활용하여 자체적인 충돌을 감지하고 물리식을 구현하여 운동량을 적용할 수 있겠지만
Unity엔진에서 자체적으로 제공하는 기능을 사용하기 원하는 개발자도 있다고 생각하기 때문에 리서치를 진행했다.
1. Unity Engine 사용하기
Step 1) 충돌을 진행할 두 물체에 Rigidbody와 Basic 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에 관해 기술하도록 하겠다.
'C# Unity3D' 카테고리의 다른 글
[Transform] 각도에 따른 Object 방향 구하기 (0) | 2019.03.25 |
---|---|
[Transform] 두 Vector 사이의 각도 구하기 (-180~+180) (0) | 2019.03.22 |
[Physics] Cast에 관해서 Gizmo 그리기 (0) | 2019.03.19 |
[Physics] Kinematic Object에서 Velocity 값 얻기 (0) | 2019.03.19 |
[Physics] 마그누스 효과, 공기저항 적용하기 (0) | 2019.03.14 |