[Unity] transform.position과 rigidbody.position을 혼용하지 말자

지즈·2025년 2월 12일
0

Unity

목록 보기
12/17

transform.position vs rigidbody.position 차이점

두 프로퍼티는 대부분의 경우 같은 값을 반환하지만, 특정한 상황에서는 다를 수 있습니다.

다른 경우


RigidbodyInterpolate 속성이 Interpolate 또는 Extrapolate로 설정된 경우,
transform.positionrigidbody.position이 다를 수 있습니다.
rigidbody.positionFixedUpdate()의 물리 시뮬레이션 결과를 반영하지만,transform.position은 프레임마다 Update()에서 보간된 값을 가질 수 있습니다.
쉽게 설명하자면 rigidbody.positionFixedUpdate()에서 계산된 값이고,
transform.position은 이전 FixedUpdate 값과 현재 값 사이를 보간한 값이 됩니다.

예제 : 다른 경우

void Start()
{
    Rigidbody rb = GetComponent<Rigidbody>();
    rb.interpolation = RigidbodyInterpolation.Interpolate;
}

void FixedUpdate()
{
    Rigidbody rb = GetComponent<Rigidbody>();
    rb.MovePosition(rb.position + Vector3.right * Time.fixedDeltaTime);
}

void Update()
{
    Debug.Log("Transform Position: " + transform.position);
    Debug.Log("Rigidbody Position: " + GetComponent<Rigidbody>().position);
}

transform.positionrigidbody.position보다 조금 더 부드럽게 변함.


결론

  • 하나의 함수 안에서 transform.position과 rigidbody.position을 혼용해서 사용하지 말자.
  • rigidbody는 물리 관련 연산을 하므로 FixedUpdate()에서 실행해야 한다.
profile
클라이언트 개발자가 되는 그 날까지 킵 고잉

0개의 댓글