Unity 리지드바디 물리기술 문서 요약 및 활용 방법
개요
Unity에서 리지드바디(Rigidbody)는 물리 엔진을 통해 게임 오브젝트의 움직임을 제어하는 핵심 요소입니다. 리지드바디를 통해 물리 기반의 충돌 및 움직임을 구현할 수 있습니다.
리지드바디 소개
- 정의: 리지드바디는 물리적인 힘에 의해 변형되지 않는 물리적 바디입니다.
- 특징: 주어진 두 점 사이의 거리는 외부 힘에 관계없이 일정하게 유지됩니다.
- 사용 목적: 중력, 충돌 및 기타 물리 기반 동작을 시뮬레이션하기 위해 필요합니다.
리지드바디 설정하기
게임 오브젝트를 리지드바디로 설정하기 위해 다음과 같은 단계를 따릅니다.
- Rigidbody 컴포넌트 추가: 게임 오브젝트에 Rigidbody 컴포넌트를 추가합니다.
- API 사용: Rigidbody는 API에서 Rigidbody 클래스로 표현됩니다.
물리 기반 움직임
- 리지드바디가 있는 게임 오브젝트는
Transform
프로퍼티 대신 물리 엔진의 힘과 토크를 사용하여 이동합니다. Rigidbody
프로퍼티를 사용해 물리 시스템의 힘을 적용해야 합니다.
기본 코드 예
void FixedUpdate() {
Rigidbody rb = GetComponent<Rigidbody>();
rb.AddForce(Vector3.up * 10);
}
키네마틱 리지드바디
- 정의: 움직이지 않고 제어되는 리지드바디입니다.
- 사용 목적: 물리 엔진의 제어에서 제외하고 Transform을 통해 움직임을 설정할 수 있습니다.
키네마틱 리지드바디의 특징
- 물리 기반 리지드바디와 충돌할 수 있으나, 반대는 불가능합니다.
- Is Kinematic 프로퍼티를 활성화하면 키네마틱으로 설정됩니다.
리지드바디 최적화
- 잠자기 모드: 리지드바디가 슬립 임계값보다 느린 속도로 움직이면 물리 계산에서 제외됩니다.
- 수동 제어:
Rigidbody.Sleep
및Rigidbody.WakeUp
메서드를 통해 수동으로 제어 가능합니다.
활용 및 응용 예제
예제 1: 리지드바디 사용한 기본 물리 충돌
void OnCollisionEnter(Collision collision) {
Rigidbody rb = GetComponent<Rigidbody>();
rb.AddForce(collision.contacts[0].normal * 5, ForceMode.Impulse);
}
예제 2: 키네마틱 리지드바디 조작하기
void Update() {
Rigidbody rb = GetComponent<Rigidbody>();
if (Input.GetKey(KeyCode.UpArrow)) {
rb.MovePosition(rb.position + Vector3.forward * Time.deltaTime);
}
}
참고 사항
- 리지드바디는 게임의 물리적인 요소를 효과적으로 관리하게 해줍니다.
- 여러 오브젝트 간의 상호작용을 통해 다양한 게임 메커니즘을 구현할 수 있습니다.
결론
Unity의 리지드바디 시스템은 물리적인 상호작용을 다루는 데 있어 매우 중요한 역할을 합니다. 적절한 설정과 활용법을 익힌다면, 더 매력적이고 몰입감 있는 게임을 제작할 수 있습니다.