-
일반적으로 게임에서 게임 오브젝트를
-
움직이게 하려면 해당 오브젝트가
-
rigidbody 오브젝트인지
-
확인해야 합니다
-
rigidbody는 게임 오브젝트가 물리력의
-
영향을 받도록 하는 컴포넌트입니다
-
오브젝트가 중력에 의해 아래로 떨어지고
-
질량과 같은 물리적 속성을 가지며
-
저항과 속도를 발생시킵니다
-
게임 오브젝트에 rigidbody
-
컴포넌트를 추가하면 rigidbody 오브젝트라고
-
부르곤 합니다
-
rigidbody 컴포넌트는
상호 작용을 기반으로 한
-
물리력에 필요하며 게임 오브젝트가
-
다른 물리 오브젝트와 상호 작용을
-
하려면 연결된 충돌체가 있어야 합니다
-
rigidbody가 없으면 power cube가 공중에
-
떠 있기만 할 것입니다
-
추가했을 때 어떤 현상이
일어나는지 살펴봅시다
-
다른 컴포넌트와 마찬가지로 인스펙터
-
하단의 [Add Component] 버튼을
-
사용하거나 [Component] 상단 메뉴에서
-
추가할 수 있습니다
-
[Physics] 섹션에서 찾을 수 있습니다
-
이제 오브젝트가 중력의 영향을 받아
-
떨어지고 물리 엔진이나 적용된 힘으로
-
제어할 수 있습니다
-
rigidbody에는 다양한 옵션이 있습니다
-
먼저 게임 오브젝트의 중력과 드래그 및
Angular Drag를
-
제어하는 설정이 있습니다
-
오브젝트의 Mass는 오브젝트와의 충돌을 처리하는
-
방식에 영향을 줍니다
-
Mass가 높은 게임 오브젝트는 Mass가 낮은
-
게임 오브젝트와 충돌했을 때 덜
-
반응합니다
-
게임 오브젝트의 드래그는 다른 상호 작업
-
없이 얼마나 빨리 느려지는지에
-
영향을 줍니다
-
공기 저항과 비슷하다고 생각하십시오
-
그리고 직선 속도의 손실률을 결정하는 데
-
사용됩니다
-
비슷하게 Angular Drag는 게임 오브젝트의
-
각속도를 느리게 하는 데 영향을 줍니다
-
얼마나 빨리 회전하는지를
-
예로 들 수 있겠죠
-
예를 들어, 오브젝트를 돌리기 위해
-
토크를 추가하면
-
Angular Drag는 이 힘에 대한 저항력을
-
발생시킵니다
다음 옵션은
-
게임 오브젝트가 중력의 영향을
-
받는지 여부를 결정합니다
-
이 확인란을 선택해 중력을 사용합니다
-
중력 설정은 Unity에서 [Edit] -
-
[Project Settings] - [Physics] 영역에서
볼 수 있습니다
-
기본적으로 실제 세계 값인 -9.81을
-
갖는 3차원 벡터를 볼 수
-
있습니다
-
여기에서 전체적으로 사용자 지정할 수
-
있으므로 플랫포머를 위한 낮은
-
중력이나 퍼즐 게임의 일부로 다른
-
축을 설정하는 것과 같이 재미있는
-
효과를 만들 수도 있습니다
-
예를 들어, 값을 5로 설정해 Z축에
-
중력을 추가해 봅시다
-
이제 power cube가 전역 Z축
-
쪽으로 당겨집니다
-
[Is Kinematic] 설정은 rigidbody가
-
물리력에 반응할지 여부에 영향을 미칩니다
-
보통 씬을 시작할 때 물리 엔진은
-
rigidbody 오브젝트가 아닌 모든 정적
-
지오메트리를 확인하며 효율성을 위해
-
나중에 다시 확인하지 않습니다
-
그러나 정적 오브젝트를 이동시킬 때 물리 엔진은
-
정확하게 처리하기 위해
다른 모든 정적 오브젝트를
-
다시 확인해야 하고, 이것 때문에
-
성능이 저하될 수 있습니다
-
이를 해결하려면 키네마틱 rigidbody 오브젝트를
-
사용하여 translate 함수의 변형
-
명령을 통해 이동시킬 수 있습니다
-
이는 다른 오브젝트에는
영향을 주지만 자신에게는
-
영향을 주지 않는 물리 오브젝트를
사용할 수 있다는 뜻입니다
-
확실한 예는 퐁이나 브레이크아웃
-
형식 게임의 패들이 될 것입니다
-
이 예제에서 rigidbody power cube에
-
[Use Gravity]을 선택합니다
-
[Play]를 누르면 오브젝트가 지면에 떨어집니다
-
둥근 prop samoflange 공 오브젝트도 있는 데,
-
컴포넌트 설정은 비슷합니다
-
power cube에 중력이 없으면
-
아래로 떨어지지 않지만 다른 오브젝트의
-
영향을 받습니다
-
다른 오브젝트의 영향을 받지 않게 하려면
-
[Is Kinematic]을 사용합니다
-
그리고 변형을 통해
오브젝트를 이동시킬 수 있습니다
-
translate 함수가 있는
-
이 간단한 스크립트를 사용하여
-
매 프레임마다 앞으로 이동시켜
-
보겠습니다
-
화면에 보이는 대로 오브젝트가
-
다른 것과 계속 상호 작용을 하지만
-
rigidbody가 남아 있어 일정하게
-
물리 엔진에게 위치에 대한 정보를
-
제공하면서 동시에 물리 엔진이 모든
-
씬을 다시 확인하지 않도록 합니다
-
[Interpolate] 및 [Extrapolate] 설정은
-
떨림 현상을 해결합니다
-
rigidbody를 통해 오브젝트가 이동할 때
-
사소하지만 불필요한 움직임이 감지되면
-
[보간] 설정을 사용하여 이전 프레임을
-
기반으로 변형 이동을 부드럽게 합니다
-
그리고 [보외] 설정은 다음 프레임의
-
예상 위치를 기반으로 움직임을
-
부드럽게 합니다
-
다음 설정은 충돌 감지 유형에 대한 것으로
-
[Discrete], [Continuous]
-
[Continuous Dynamic]이 있습니다
-
기본값은 Discrete인데 다른 문제가
-
없으면 그냥 사용하는 것이 좋습니다
-
Continuous는 빠르게 움직이는 오브젝트용이며
-
정적 지오메트리와 상호 작용을 합니다
-
그리고 Continuous Dynamic은 빠르게 움직이는
-
오브젝트용이고 다른 동적 오브젝트와 상호
-
작용을 합니다
-
마지막으로 rigidbody 컴포넌트의
-
Constraints 섹션은 물리력에 의한
-
오브젝트의 이동과 회전을 제한할 수 있게 합니다
-
예를 들어, 테트리스 형식의
-
게임에서 정육면체가
-
아래로 떨어질 때 회전하지 않도록
-
하고 싶다면, 여기에서 회전 제약을
-
사용하여 회전을 제한할 수 있습니다
-
이 예제에서 power cube가
-
작업대에 떨어집니다
이것은 rigidbody이며
-
[Use Gravity]가 선택되어 있습니다
-
기본적으로 이런 형태로 떨어집니다
-
떨어질 때 회전하지 않도록 하려면
-
제약 내에서 회전을 중지시킵니다
-
이렇게 떨어져도 회전하지 않습니다