유니티 Rigidbody 속성 정보(Unity2021기준)

 Rigidbody 속성 정보에 대해 자세히 서술하고자 한다.
 Unity2021.x.x 버전이 기준이고 이전 버전에는 없는 기능이 있음.

 자세한 사항은 유니티 공식 문서 참조
 https://docs.unity3d.com/kr/2021.3/Manual/class-Rigidbody.html


[인스펙터 탭에서 보이는 리지드바디 속성]

Mass

예전 버전에서는 단순히 배수처럼 1배 2배...수치로 사용했었지만
공식 메뉴얼에서 "오브젝트의 질량입니다(디폴트값은 킬로그램)" 이라고 나와있다.

Drag

공기 저항 값이다.
낙하하거나 이동할 때 얼마 만큼의 공기 저항을 받을지 지정하면 된다.
0.001(단단한 금속 덩어리) ~ 10(깃털) 사이의 값으로 지정하면 된다.

무한대 값을 입력하면 중력의 영향을 받지 않는다고 한다.
중요한 점은 Drag는 Mass(질량)의 영향을 받지 않는다는 점이다.
어떤 물체에게 중력의 영향을 더 크게 받게 하고 싶다면 Drag값을 조절해야 한다.

Angular Drag

Drag와 동일하게 공기 저항 값이다.
다만 회전에 영향을 미치는 값인데 마찬가지로 10 이상의 값을 입력할 필요는 없다.
Drag에 경우엔 무한대 값을 입력하면 낙하하지 않지만 Angular Drag는 Constraints에서 Freeze Rotation으로 고정 시킬 수 있다.

Use Gravity

활성화 시 오브젝트가 중력의 영향을 받는다.

IsKinematic

활성화 할 경우 물리 엔진으로 제어되지 않는다.
특별한 이벤트에만 물리엔진을 사용하고 싶을 때 사용한다.
평소에는 활성화 해두었다가 폭발에 휘말렸을 때 비활성화 시키고 오브젝트를 날려보내면 된다.

Interpolate

- None

자동 보간을 설정하지 않음.

- Interpolate

이전 프레임의 트랜스폼에 맞게 움직임을 부드럽게 처리한다.

- Extrapolate

다음 프레임의 트랜스폼에 맞게 움직입을 부드럽게 처리한다.


Interpolate의 경우 직접 해본 결과 Interpolate와 Extrapolate의 차이는 경험해 본 적 없다.
간혹 다른 오브젝트들로 인해 중력에 영향을 받지 못했을 때나 특정 위치에 끼어 버렸을 때 활성화하면 그런 현상들이 예방 된다.

이전 프레임의 행동을 기억하고 다음 해야 하는 행동을 이어서 하게 해준다.

Collision Detection

- Discrete

불연속 충돌.
이 기능 설정 시 물체가 너무 빠르거나 프레임이 저하된 상태에서 다른 오브젝트와의
충돌이 무시되는 경우가 있다.
가장 연산이 빠르다.

- Continuous

리지드 바디가 있는 동적 콜라이더에게는 불연속 충돌,
리지드 바디가 없는 정적 콜라이더에게는 연속 충돌 연산을 사용한다.
주로 벽이 있을 때 사용된다.
플레이어의 이동 속도가 빠르고, 벽의 두께는 얇을 때 벽을 통과하는 걸 막아준다.

설정 하지 않으면 플레이어 프레임 이동량이 유니티 좌표계로 3만큼 이동한다고 했을 때 벽의 두께가 3미만인 경우 플레이어가 벽을 뚫고 지나가게 되는 경우가 생긴다. 

하지만 만약 리지드 바디가 있는 오브젝트 둘이 빠르게 서로를 향해 달려 왔을 때 부딪치지 않고 관통하는 경우가 생긴다. 

- Continuous Dynamic

Continuous, Continuous Dynamic이 설정된 콜라이더와 리지드 바디가 없는 오브젝트에 연속 충돌 연산을 사용한다. (Discrete설정 된 오브젝트에게는 불연속 충돌)

해당 옵션 설정 시, 오브젝트 둘이 빠르게 서로를 향해 달려 왔을 때 관통 되는 문제를 막아준다.  다만 가장 리소스가 많이 든다.

-Continuous Speculative

"리지드바디와 콜라이더에 추측성 연속 충돌 검사를 사용합니다.
키네마틱 바디를 설정할 수 있는 유일한 CCD 모드입니다. 이 메서드는 스위핑 기반 연속 충돌 검사보다 리소스를 덜 소모합니다."
사용해 본적 없기 때문에 유니티 메뉴얼 내용을 그대로 가져왔다.
이전에 없던 새로 추가된 옵션인데 Continuous Dynamic와 동일한 기능에 리소스를 덜 소모한다고 한다. 거기에 키네마틱에도 적용된다고 한다.

그런데도 Continuous Dynamic 옵션을 삭제하지 않은 이유는 아직 실험적인 기능 일 수 있으니 잘 테스트하고 사용하면 좋을 것 같다.

사실 Continuous설정이 정말 머리 아프다.
모든 오브젝트에 Continuous Speculative 옵션을 넣으면 편하겠지만, 그건 비효율적이다.
조금만 생각해도 오브젝트가 관통이 되어도 문제가 없는 경우가 있다.
100개의 모래 알갱이가 플레이어에게 뿌려졌을 때 절반 정도가 플레이어에게 관통 되더라도 그게 플레이 할 때 문제가 되는 일은 아니기 때문에 꼭 필요한 오브젝트에만 설정해야한다.


Constraints

- Freeze Position

물리 엔진이 활성화 한 x,y,z 좌표로 이동하는 것을 막는다. 

- Freeze Rotation

물리 엔진이 활성화 한 x,y,z 좌표로 회전하는 것을 막는다. 



 

  

 

 

 

댓글

가장 많이 본 글