Rigidbody2D의 linearVelocity

심지태
∙∙조회 6

Rigidbody2D의 linearVelocity

linearVelocity는 Rigidbody2D가 현재 어떤 방향으로 얼마나 빠르게 움직이고 있는지를 나타내는 속성입니다. Vector2 형태로 X축과 Y축의 속도를 저장하며, 단위는 일반적으로 초당 유니티 월드 유닛(unit/s)입니다. 예를 들어 linearVelocity = new Vector2(3, 5)라면 오브젝트가 오른쪽으로 초당 3유닛, 위쪽으로 초당 5유닛의 속도로 이동한다는 뜻입니다. 이 값은 월드 좌표계를 기준으로 하며, 물리 엔진이 충돌·중력·힘 등을 계산할 때 계속 변경될 수 있습니다.

csharp
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float moveSpeed = 5f;
    private Rigidbody2D rb;

    void Awake()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void FixedUpdate()
    {
        // 수직 속도는 유지하면서 수평 속도만 변경
        rb.linearVelocity =
            new Vector2(moveSpeed, rb.linearVelocity.y);
    }
}

위 코드에서 rb.linearVelocity.y를 그대로 유지하는 이유는 점프나 중력으로 발생한 수직 속도를 지우지 않기 위해서입니다. 만약 new Vector2(moveSpeed, 0)을 계속 대입하면 Y축 속도가 매번 0으로 바뀌어 정상적인 낙하나 점프가 방해될 수 있습니다.

항목설명
자료형2D에서는 Vector2, 3D에서는 Vector3
단위초당 월드 유닛
X 값좌우 이동 속도
Y 값위아래 이동 속도
값 읽기현재 오브젝트의 이동 속도를 확인
값 변경이동 속도를 즉시 새로운 값으로 설정
권장 위치물리 주기에 맞춰 FixedUpdate()에서 변경
관련 설정Gravity Scale, Linear Damping, 충돌 및 외부 힘의 영향을 받음

linearVelocity에 값을 직접 대입하면 기존 속도를 즉시 덮어쓰므로 캐릭터의 일정한 이동이나 점프 속도를 정확하게 지정할 때 유용합니다. 반면 AddForce()는 힘을 누적하여 질량과 물리 조건에 따라 점진적으로 가속시키므로 밀기, 폭발, 바람과 같은 자연스러운 물리 효과에 적합합니다. 즉, 정확한 속도 제어에는 linearVelocity, 물리적인 가속 표현에는 AddForce()를 사용하는 것이 일반적입니다. 또한 linearVelocity는 이동 속도이므로, 회전 속도를 나타내는 angularVelocity와는 구분해야 합니다.