Unity Rigidbody를 활용한 기본 물리 적용
2024. 11. 28. 14:36ㆍUnity
Unity Rigidbody로 기본 물리 효과 구현하기
Unity에서 Rigidbody는 게임 오브젝트에 물리적인 행동(중력, 충돌, 힘 등)을 적용하는 데 사용되는 핵심 컴포넌트입니다.
게임에 물리 기반 움직임을 추가하고 싶다면 Rigidbody를 활용하는 것이 필수적입니다.
이번 글에서는 Rigidbody의 개념, 주요 설정, 그리고 간단한 예제들을 통해 기본 물리 효과를 구현하는 방법을 알아보겠습니다.
1. Rigidbody란?
Rigidbody는 Unity의 물리 엔진(PhysX)을 통해 게임 오브젝트에 물리적 특성을 부여하는 컴포넌트입니다.
Rigidbody를 추가하면:
- 중력의 영향을 받습니다.
- 힘(Force)과 회전(Torque)을 적용할 수 있습니다.
- 충돌 처리가 가능해집니다.
Rigidbody는 3D 게임에서는 Rigidbody를, 2D 게임에서는 Rigidbody2D를 사용합니다.
2. Rigidbody 추가하기
방법 1: Unity Editor에서 추가
- Hierarchy 창에서 게임 오브젝트를 선택합니다.
- Inspector 창에서 Add Component를 클릭합니다.
- Rigidbody를 검색하고 선택합니다.
방법 2: 스크립트를 통해 추가
gameObject.AddComponent<Rigidbody>();
3. Rigidbody 주요 설정
1) Mass (질량)
- 오브젝트의 질량을 설정합니다.
- 질량이 클수록 힘을 받았을 때 움직임이 덜 발생합니다.
2) Drag (저항)
- 오브젝트의 속도 저항을 설정합니다.
- 값이 높을수록 움직임이 빨리 멈춥니다.
3) Angular Drag (회전 저항)
- 오브젝트의 회전 속도 저항을 설정합니다.
4) Use Gravity (중력 사용)
- 활성화하면 오브젝트가 중력의 영향을 받습니다.
- 중력이 필요 없을 경우 체크를 해제하세요.
5) Is Kinematic
- 물리 엔진의 영향을 받지 않도록 설정합니다.
- 애니메이션이나 스크립트로 직접 움직임을 제어할 때 사용됩니다.
6) Constraints (제약 조건)
- 특정 축의 위치나 회전을 고정합니다.
- 예: X축 회전만 허용하고 싶다면 다른 축은 제한합니다.
4. Rigidbody 활용 예제
1) 중력과 충돌 처리
using UnityEngine;
public class GravityExample : MonoBehaviour
{
void Start()
{
Rigidbody rb = gameObject.AddComponent<Rigidbody>();
rb.useGravity = true; // 중력 활성화
}
}
- 오브젝트에 중력을 활성화하여 자유 낙하를 시뮬레이션합니다.
- Collider와 함께 사용할 경우 충돌 효과를 볼 수 있습니다.
2) 힘(Force) 적용
using UnityEngine;
public class AddForceExample : MonoBehaviour
{
public float forceAmount = 10f;
void Start()
{
Rigidbody rb = GetComponent<Rigidbody>();
rb.AddForce(Vector3.up * forceAmount, ForceMode.Impulse);
}
}
- AddForce를 사용하여 오브젝트에 위쪽으로 순간적인 힘을 적용합니다.
- ForceMode:
- Impulse: 순간적인 힘.
- Force: 지속적인 힘.
3) 회전(Torque) 적용
using UnityEngine;
public class AddTorqueExample : MonoBehaviour
{
public float torqueAmount = 10f;
void Start()
{
Rigidbody rb = GetComponent<Rigidbody>();
rb.AddTorque(Vector3.right * torqueAmount, ForceMode.Impulse);
}
}
- AddTorque를 사용하여 오브젝트에 회전력을 적용합니다.
4) 속도 제어
using UnityEngine;
public class VelocityControlExample : MonoBehaviour
{
void Start()
{
Rigidbody rb = GetComponent<Rigidbody>();
rb.velocity = new Vector3(0, 5, 0); // 위로 5m/s 속도 설정
}
}
- velocity를 직접 설정하여 오브젝트의 이동 속도를 제어합니다.
5. Rigidbody 사용 시 주의사항
- FixedUpdate()에서 물리 작업 처리
- 물리 엔진은 FixedUpdate()에서 작동하므로, Rigidbody와 관련된 작업은 반드시 FixedUpdate()에서 처리하세요.
csharp
코드 복사
void FixedUpdate() { rb.AddForce(Vector3.forward * 10); }
- Collider와 함께 사용
- Rigidbody는 Collider가 있어야 물리 충돌이 감지됩니다.
- Collider 없이 Rigidbody를 사용할 경우, 물리적 충돌이 발생하지 않습니다.
- 불필요한 Rigidbody 제거
- 물리가 필요하지 않은 오브젝트에 Rigidbody를 추가하면 성능에 영향을 줄 수 있습니다.
6. 요약
Rigidbody는 Unity 물리 엔진의 핵심 컴포넌트로, 물리적 움직임과 상호작용을 구현하는 데 필수적입니다.
- 중력, 힘, 충돌과 같은 효과를 간단히 추가 가능.
- 물리 작업은 FixedUpdate()에서 처리해야 안정적인 동작 보장.
- Collider와 함께 사용하여 물리적 충돌 처리 완성.
'Unity' 카테고리의 다른 글
Unity 2D 스프라이트 및 애니메이션 (0) | 2024.11.29 |
---|---|
Unity 충돌 감지 및 트리거 (0) | 2024.11.28 |
Unity Update(), Start(), FixedUpdate()의 차이점 (0) | 2024.11.26 |
Unity에서의 스크립트 사용법 (0) | 2024.11.26 |
Unity 렌더러 (Renderer) 컴포넌트의 개념 (1) | 2024.11.25 |