Unity 리지드바디 물리기술 문서 요약 및 활용 방법

개요

Unity에서 리지드바디(Rigidbody)는 물리 엔진을 통해 게임 오브젝트의 움직임을 제어하는 핵심 요소입니다. 리지드바디를 통해 물리 기반의 충돌 및 움직임을 구현할 수 있습니다.

리지드바디 소개

  • 정의: 리지드바디는 물리적인 힘에 의해 변형되지 않는 물리적 바디입니다.
  • 특징: 주어진 두 점 사이의 거리는 외부 힘에 관계없이 일정하게 유지됩니다.
  • 사용 목적: 중력, 충돌 및 기타 물리 기반 동작을 시뮬레이션하기 위해 필요합니다.

리지드바디 설정하기

게임 오브젝트를 리지드바디로 설정하기 위해 다음과 같은 단계를 따릅니다.

  1. Rigidbody 컴포넌트 추가: 게임 오브젝트에 Rigidbody 컴포넌트를 추가합니다.
  2. API 사용: Rigidbody는 API에서 Rigidbody 클래스로 표현됩니다.

물리 기반 움직임

  • 리지드바디가 있는 게임 오브젝트는 Transform 프로퍼티 대신 물리 엔진의 힘과 토크를 사용하여 이동합니다.
  • Rigidbody 프로퍼티를 사용해 물리 시스템의 힘을 적용해야 합니다.

기본 코드 예

void FixedUpdate() {
    Rigidbody rb = GetComponent<Rigidbody>();
    rb.AddForce(Vector3.up * 10);
}

키네마틱 리지드바디

  • 정의: 움직이지 않고 제어되는 리지드바디입니다.
  • 사용 목적: 물리 엔진의 제어에서 제외하고 Transform을 통해 움직임을 설정할 수 있습니다.

키네마틱 리지드바디의 특징

  • 물리 기반 리지드바디와 충돌할 수 있으나, 반대는 불가능합니다.
  • Is Kinematic 프로퍼티를 활성화하면 키네마틱으로 설정됩니다.

리지드바디 최적화

  • 잠자기 모드: 리지드바디가 슬립 임계값보다 느린 속도로 움직이면 물리 계산에서 제외됩니다.
  • 수동 제어: Rigidbody.SleepRigidbody.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의 리지드바디 시스템은 물리적인 상호작용을 다루는 데 있어 매우 중요한 역할을 합니다. 적절한 설정과 활용법을 익힌다면, 더 매력적이고 몰입감 있는 게임을 제작할 수 있습니다.