두 프로퍼티는 대부분의 경우 같은 값을 반환하지만, 특정한 상황에서는 다를 수 있습니다.
Rigidbody
의 Interpolate
속성이 Interpolate
또는 Extrapolate
로 설정된 경우,
transform.position
과 rigidbody.position
이 다를 수 있습니다.
rigidbody.position
은 FixedUpdate()
의 물리 시뮬레이션 결과를 반영하지만,transform.position
은 프레임마다 Update()
에서 보간된 값을 가질 수 있습니다.
쉽게 설명하자면 rigidbody.position
은 FixedUpdate()
에서 계산된 값이고,
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.position
이 rigidbody.position
보다 조금 더 부드럽게 변함.