Velocity, linearVelocity

JJW·2025년 3월 12일
0

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 게임 개발자를 준비하는 취업준비생입니다..

0개의 댓글