Velocity, linearVelocity

JJW·2025년 3월 12일

Unity

목록 보기
26/34

이번 글에서는 2D 프로젝트 구현 과정에서 기존에 사용하던 velocity 대신,
최근 권장되는 linearVelocity를 채택하게 된 배경과 그 차이점을 비교하고,
두 속성이 내부적으로 어떻게 동작하는지에 대해 자세히 살펴보고자 합니다.


역사

  • velocity

    • 초기 Unity에서는 2D와 3D 모두에서 객체의 선형 속도를 나타내기 위해 단일 속성인 velocity를 사용하였습니다.
    • 여러 물리 계산이 혼재된 상황에서 같은 이름을 2D와 3D 모두에 적용하던 점이 단점으로 작용할 수 있었습니다.
  • linearVelocity

    • Unity의 2D 물리 시스템은 Box2D 엔진을 기반으로 하는데 Box2D에서는 선형 속도를 linearVelocity,
      각속도를 augularVelocity로 명확히 구분하였습니다.
    • 이러한 명명 규칙을 반영하여 Unity는 2D 전용 속성의 이름을 linearVelocity로 변경함으로써 코드의 의도와 물리 계산의 특성을 보다 명확하게 표현할 수 있게 하였습니다.

기능 및 내부 구현

  • 기능적 역할

    • 두 속성 모두 2D Rigidbody의 선형 속도를 나타내며 게임 오브젝트가 이동하는 방향과 속도를 결정하는 역할을 수행합니다.
    • 실제 게임 내 물리 시뮬레이션에서는 동일한 데이터를 다루므로 결과적으로 객체의 움직임에 차이가 없게 됩니다.
  • 내부 구현 방식

    • 내부적으로 velocity와 linearVelocity는 동일한 값을 참조하거나 동일한 물리 계산 알고리즘을 사용합니다
    • linearVelocity라는 이름은 선형이라는 의미를 명시적으로 포함하여
      개발자가 코드를 볼 때 2D 물리에서의 선형 속도임을 바로 인지할 수 있도록 돕습니다.

내부 동작

rb.linearVelocity = new Vector2(x, y);
  • 이렇게 작성이 되어있는 경우 Rigidbody2D 컴포넌트가 관리하는 선형 속도 값이 새롭게 생성한 Vector2 값으로 즉시 대체됩니다.

Vector2 값의 의미

  • X

    • 2D 공간에서 좌우 방향의 속도를 나타냅니다. (+ : 오른쪽, - : 왼쪽)
  • Y

    • 위아래 방향의 속도를 나타냅니다. (+ : 위쪽, - : 아래쪽)
  • 두 값이 결합되어 객체가 어떤 방향으로 얼마나 빠르게 이동할지를 결정하는 벡터를 만들게 됩니다.

물리 시뮬레이션 주기

newPosition = currentPosition + linearVelocity * fixedDeltaTime;
  • Update문에서 각 주기마다 linearVelocity의 값을 확인하고 객체의 위치를 업데이트합니다.

충돌 시 영향

  • 내부적으로 RigidBody는 선형 속도를 벡터 형태로 저장하여
    객체가 충돌하거나 외부 힘을 받게되면 물리 엔진은 그에 맞는 반작용을 계산하여
    linearVelocity의 값을 수정합니다.

왜 값이 커질수록 빨라지는가?

newPosition = currentPosition + linearVelocity * fixedDeltaTime;
  • 물리 엔진에서는 객체의 위치를 매 프레임마다 업데이트할 때 현재 속도와 경과 시간을 곱하여 새로운 위치를 계산합니다.
  • 만약 X값이 크다면 객체의 수평 방향으로 1초에 이동하는 거리가 커진다는 의미입니다.
  • 예를 들어 x값이 10이라면 매 초마다 10 단위만큼 오른쪽으로 이동하게되고 20이면 20 단위만큼 이동하게 됩니다.
  • 즉 x의 값이 커지게 되면 단위 시간당 이동 거리를 늘려 객체가 더 빠르게 이동하도록 만드는 핵심 요소입니다.

결론

  • 기능적으로는 velocity와 linearVelocity는 동일한 역할을 하지만
  • 명확성 측면에서는 linearVelocity는 2D 물리의 선형 이동임을 명시적으로 나타냅니다.
  • 일관성 측면에서는 Box2D 엔진과의 용어 일치를 통해 개발자가 물리 계싼의 원리를 쉽게 이해할 수 있습니다.
profile
Unity 게임 개발자를 준비하는 취업준비생입니다..

1개의 댓글

comment-user-thumbnail
2025년 11월 27일

The way you break down velocity and linearVelocity in the physics engine is really clear, and it reminds me of 99 Nights in the Forest, where understanding each movement and timing precisely makes the whole experience feel more intuitive and engaging.

답글 달기