이번 예제는 간단하게 3D object인 Plane과 Cube, Sphere를 사용하였으며 스크립트는 없습니다.
먼저 Rigidbody를 자세히 들여다보겠습니다.
Rigidbody는 게임 오브젝트가 물리력의 영향을 받도록 하는 컴포넌트입니다.
Rigidbody를 추가한 오브젝트는 중력의 의해 아래로 떨어지고 질량과 같은 물리적 속성을 가지며 저항과 속도를 발생시킵니다.
Rigidbody는 상호작용을 기반으로 한 물리력에 필요하며 게임 오브젝트가 다른 물리 오브젝트와 상호작용을 하려면 Rigidbody가 연결된 충돌체가 있어야 합니다.
---------------------------------------------------------------------------------------
Rigidbody의 옵션
----------------------------------------------------------------------------------------
Mass(질량) - 오브젝트와의 충돌을 처리하는 방식에 영향을 줍니다.
Mass가 높은 게임 오브젝트는 Mass가 낮은 게임 오브젝트와 충돌했을 때 덜 반응하게 됩니다.
Drag - 게임 오브젝트가 다른 상호작용 없이 얼마나 빨리 느려지는지에 영향을 주고 직선 속도의 손실률을 결정하는 데 사용됩니다. (공기저항과 비슷하다 생각하면 됩니다.)
Angular Drag - 게임 오브젝트의 각의 속도를 느리게 하는데 영향을 줍니다.
얼마나 빨리 회전하는지를 예로 들 수 있습니다.
Use Gravity - 중력 사용 여부를 결정합니다.
Is Kinematic - Rigidbody가 물리력에 반응할지 여부에 영향을 미칩니다.
보통 씬을 시작할 때 물리엔진은 Rigidbody 오브젝트가 아닌 정적 지오메트리를 확인하며 효율성을 위해 나중에 다시 확인하지 않습니다.
(기하학(幾何學, geometry)은 선과 면, 도형 등 기하학적인 대상의 모양, 크기, 상대적인 위치 그리고 공간의 성질에 대해 연구하는 수학(數學, mathematics)의 한 갈래 - Naver 지 식 백 과)
그러나 정적 오브젝트를 이동시킬 때 물리엔진은 정확하게 처리하기 위해 다른 모든 정적 오브젝트를 다시 확인해야 하고 이것 때문에 성능이 저하될 수도 있습니다. 이를 해결하려면 Is Kinematic 사용하여 translate 함수의 변형 명령을 통해 이동시킬 수 있습니다.
Interpolate 및 Extrapolate - 떨림 현상을 해결
-> Rigidbody를 통해 오브젝트가 이동할 때 사소하지만 불필요한 움직임이 감지되면 Interpolate 설정을 사용하여 이전 프레임을 기반으로 변형 이동을 부드럽게 할 수 있습니다.
그리고 Extrapolate 설정은 다음 프레임의 예상 위치를 기반으로 움직임을 부드럽게 함
Collision Detection - 충돌 감지 유형에 대한 것
Discrete, Continuous, Continuous Dynamic
기본값은 Discrete인데 다른 문제가 없으면 그냥 사용하는 것이 좋다고 합니다.
Continuous는 빠르게 움직이는 오브젝트 용이며 정적 지오메트리와 상호작용합니다.
Continuous Dynamic은 빠르게 움직이는 오브젝트 용이며 동적 오브젝트와 상호작용합니다.
Constraints은 물리력에 의한 오브젝트의 이동과 회전을 제한할 수 있게 합니다.
- 예를 들어 테트리스에서 정육면체가 아래로 떨어질 때 회전하지 않도록 하고 싶다면 여기서
회전 제약을 사용하여 회전을 제한할 수 있습니다.
이를 기반으로 간단한 예제를 보도록 하겠습니다.
위의 Sphere 2개와 Cube 2개는 각각 Rigidbody가 적용되어 있으며 마지막 4번째 Cube는 오른쪽 그림과 같이 회전 값을 고정시켜둔 상태입니다.
아래의 Cube 2개는 Rigidbody가 적용되어있고 Use Gravity는 체크 해제된 상태이며, 2개의 큐브 중 오른쪽에 있는 Cube는 오른쪽 그림과 같이 Is Kinematic이 체크되어있는 상태입니다.
왼쪽부터 오른쪽까지 1 ~ 4라고 하면
1의 경우 Sphere는 중력에 의해 아래로 떨어지게 되고 아래에 있는 Cube에 충돌하게 되는데 이때 아래에 있던 Cube는 Is Kinematic이 체크되어있지 않아 다른 물리력에 영향을 받게 됩니다.
2의 경우 Sphere는 중력에 의해 아래로 떨어지게 되고 아래에 있는 Cube에 충돌하게 되는데 이때 아래에 있던 Cube는 Is Kinematic이 체크되어있기 때문에 다른 물리력에 영향을 받지 않고 현 상태 그대로 상태를 유지합니다.
3의 경우 Cube는 중력에 의해 아래로 떨어지게 되고 아래에 있는 Sphere에 충돌하게 됩니다.
이때 이 Cube는 Sphere의 정 가운데에 떨어진 것이 아니기 때문에 Rotation의 영향을 받아 구르면서 떨어지게 됩니다.
4의 경우 Cube는 중력에 의해 아래로 떨어지게 되고 아래에 있는 Sphere에 충돌하게 됩니다.
이때 이 Cube는 Sphere의 정 가운데에 떨어진 것이 아니기 때문에 Rotation의 영향을 받아 구르면서 떨어져야 하는데 Constraints에서 x, y, z의 모든 Rotation 값을 고정시켰기 때문에 회전 없이 떨어지게 됩니다.
이 포스팅은
https://unity3d.com/kr/learn/tutorials/topics/physics/rigidbodies?playlist=17120
을 참고하였습니다.
'Unity > 기초 예제' 카테고리의 다른 글
유니티 마우스, 키보드 입력 간단한 예제 유니티 기초 (0) | 2021.05.03 |
---|---|
유니티 Look At (다른 오브젝트가 나를 바라보는 간단한 예제) 유니티 기초 (0) | 2021.04.29 |
유니티 리지드바디(Rigidbody)를 이용한 오브젝트 움직임 구현 간단한 예제 유니티 기초 (0) | 2021.04.28 |
유니티 예제_오브젝트 간단한 움직임 구현, Translate and Rotate, FixedUpdate()와 Update()의 차이_간단한 예제, 유니티 기초 (0) | 2021.04.20 |
유니티 예제_오브젝트의 상태 확인, Activating GameObjects, activeSelf, activeInHierarchy, SetActive()_간단한 예제, 유니티 기초 (0) | 2021.04.18 |