이번 튜토리얼에서는 Unity 프로젝트에서 Rigid Body와 Physics Material을 사용하여 오브젝트를 떨어뜨리고 튀게 만드는 방법을 알아보겠습니다.
이 튜토리얼의 동영상 버전은 현재 이 언어로 제공되지 않습니다. 아래에서 자막이 포함된 영어 버전을 시청할 수 있으며, 동영상 아래에는 한국어로 번역된 스크립트가 있습니다.
영상 자막 텍스트
안녕하세요 여러분!
이번 튜토리얼에서는 Unity 프로젝트에서 Rigid Body와 Physics Material을 사용하여 오브젝트를 떨어뜨리고 튀게 만드는 방법을 알아보겠습니다.
Unity는 물리 시뮬레이션 엔진을 제공하지만, 이러한 기능을 사용하려면 Rigid Body와 Colliders 같은 몇 가지 컴포넌트와 기타 요소를 추가해야 합니다.
이는 물리 시뮬레이션이 계산 비용이 많이 들기 때문에, 기본적으로 오브젝트는 물리 시뮬레이션에 참여하지 않도록 설정되어 있기 때문입니다. 따라서 오브젝트가 물리적으로 어떻게 동작해야 하는지는 우리가 직접 지정해야 합니다.
그럼 시작해 보겠습니다!
저는 Unity에서 바닥으로 사용할 Cube와 농구공 모델을 배치한 간단한 씬을 설정했습니다.

우리는 즉시 기본 Unity 오브젝트인 Cube에는 이미 Box Collider 컴포넌트가 포함되어 있는 반면, 외부 파일에서 가져온 제 3D 모델에는 어떠한 Collider 컴포넌트도 없다는 것을 확인할 수 있습니다. 이 부분은 잠시 후에 다시 다루겠습니다.

농구공 모델을 Cube 위의 일정한 높이에 배치한 뒤 Play 버튼을 눌러보면, 공이 떨어지지 않는다는 것을 바로 확인할 수 있습니다.
공이 씬의 물리 시뮬레이션에 참여하도록 하려면, 오브젝트의 Inspector에서 Rigid Body 컴포넌트를 추가하면 됩니다.

이 컴포넌트의 탭을 보면 몇 가지 흥미로운 속성을 확인할 수 있습니다. 그중 Mass는 이번 예제에서는 그대로 두어도 되고, Use Gravity 체크박스는 기본적으로 선택되어 있으므로, 이제 게임을 실행하면 공이 실제로 떨어지는 것을 확인할 수 있습니다.

하지만 공은 아래에 있는 Cube를 통과하여 아래로 계속 떨어집니다!
두 오브젝트 모두가 물리 시뮬레이션에 참여하도록 하기 위해, 아래에 있는 Cube에도 Rigid Body 컴포넌트를 추가하고, 필요하다면 중력을 비활성화하면 되지 않을까 생각할 수 있습니다. 그러나 이렇게 해도 문제는 해결되지 않습니다. 따라서 혼동을 피하기 위해 Cube의 Rigid Body는 제거하십시오.
간단히 말해, 공은 Cube를 통과합니다. Cube에는 Box Collider가 있으므로 충돌을 감지해야 할 것처럼 보입니다.
문제는 농구공 모델에 자체 Collider가 없다는 점입니다. 따라서 Inspector에서 Collider를 추가해야 합니다. 농구공은 구형이므로 Sphere Collider를 선택합니다.

이제 시뮬레이션을 시작하면 공이 Cube 위로 떨어져 멈추는 것을 볼 수 있습니다.

따라서 Cube뿐 아니라, 일반적으로 공과 상호작용할 모든 씬 오브젝트에는 반드시 Collider가 있어야 한다는 점을 기억하십시오.
정리하자면, 두 씬 오브젝트가 서로 상호작용하려면 둘 다 Collider를 가지고 있어야 합니다. 그렇지 않으면 서로를 통과하게 됩니다. 또한 중력이나 다른 힘의 영향을 받으며 물리 시뮬레이션에 참여하려면 해당 오브젝트에 Rigid Body 컴포넌트도 필요합니다.
하지만 지금까지의 결과는 만족스럽지 않습니다. 공은 떨어져 Cube에 충돌하지만 튀지 않습니다.
오브젝트의 물리적 속성은 Rigid Body가 아니라 Collider에 설정해야 합니다. 이러한 속성은 물리 시뮬레이션에 참여하는 오브젝트뿐 아니라 모든 씬 오브젝트에 적용될 수 있기 때문입니다. 따라서 Collider 탭에서 설정해야 합니다.
이 탭에는 기본적으로 None으로 설정된 Material 필드가 있으며, 여기에 Physic Material 오브젝트를 지정해야 한다는 것을 알 수 있습니다.

따라서 Project에 Physic Material 오브젝트를 추가합니다. 여기서 주의할 점은 단순히 Material이 아니라 Physic Material이라는 것입니다. Material은 오브젝트의 시각적 속성과 관련이 있습니다.
이제 새로 만든 Physic Material을 농구공의 Sphere Collider에 할당한 뒤 Play를 눌러보면, 공이 여전히 튀지 않는 것을 확인할 수 있습니다.
이는 기본적으로 새 Physic Material의 Bounciness 값이 0으로 설정되어 있기 때문입니다. 해당 오브젝트를 선택하면 Inspector에서 이 값을 확인할 수 있습니다.


Physic Material에는 두 가지 주요 속성인 Bounciness와 Friction이 있습니다. 이 값을 조정하여 보다 현실적인 반동 효과를 만들 수 있습니다. 예를 들어 Bounciness를 높이면 튀어 오르는 힘이 증가하고, Friction을 높이면 각 반동 후 이동 거리가 줄어듭니다.
Bounciness를 1로 설정한 후 게임을 실행해 보겠습니다. 그러면 공이 몇 번 튄 후 멈추는 것을 확인할 수 있습니다.

이 동작은 현실적이지만, 공을 더 많이 튀게 하려면 어떻게 해야 할까요?
예를 들어 Friction 값을 조정할 수 있고, 특히 두 Combine 파라미터를 조정할 수 있습니다. 이 파라미터는 두 오브젝트가 접촉할 때 각각의 물리 속성을 어떻게 결합할지 결정합니다.
기본적으로 Bounce Combine은 Average로 설정되어 있습니다. 이 경우 농구공의 Bounciness 1과 Physics Material이 없는 Cube의 값 0이 평균되어 실제 Bounce 값은 0.5가 됩니다.
Bounce Combine을 Maximum으로 변경하면 실제 적용되는 Bounciness는 1이 되며, 공은 훨씬 더 많이 튀게 됩니다.
하지만 이제 또 다른 문제가 발생합니다. 공이 계속해서 튀게 됩니다.
다소 이상한 동작처럼 보이지만, 일정한 반동을 유지하려면 Bounciness 값을 0.965로 설정해야 합니다. 이유는 묻지 마십시오.


물론 반동을 시뮬레이션할 때는 표면도 중요합니다. 따라서 Cube에도 Physic Material을 지정해야 합니다. 바닥이나 벽, 그리고 서로 다른 재질로 이루어진 다른 오브젝트에도 각각 적절한 물리 속성을 설정해야 합니다.
이 부분은 여러분에게 맡기겠습니다. 다양한 Bounciness, Friction, Combine 값 조합을 직접 시도해 보십시오.
이번 튜토리얼은 여기까지입니다. 곧 다시 뵙겠습니다!