SetPositionAndRotation이란?
SetPositionAndRotation은 Unity에서 사용되는 Transform 클래스의 메서드 중 하나로, 게임 오브젝트의 위치와 회전을 한번에 설정할 수 있습니다.
SetPositionAndRotation(Vector3 position, Quaternion rotation) 메서드는 두 개의 매개 변수를 받습니다.
첫 번째 매개 변수는 게임 오브젝트의 위치를 나타내는 Vector3 값이고, 두 번째 매개 변수는 게임 오브젝트의 회전을 나타내는 Quaternion 값입니다.
이 메서드를 호출하면 해당 게임 오브젝트의 위치와 회전이 매개 변수로 전달된 값으로 설정됩니다.
이 메서드는 보통 Transform 컴포넌트를 가진 게임 오브젝트의 위치와 회전을 변경할 때 사용됩니다.
이 메서드를 사용하여 Rigidbody를 이동시키는 것도 가능합니다.
다만, 이 경우 Rigidbody 컴포넌트의 isKinematic 속성을 true로 설정해야합니다.
transform.SetPositionAndRotation(m_PhysicsWrapper.Transform.position, m_PhysicsWrapper.Transform.rotation);
위 코드는 Boss Room에서 사용된 코드이며 예시일 뿐입니다!
왜 게임 오브젝트의 위치와 회전을 한 번에 설정해주는 것일까요?
Unity의 Transform 컴포넌트를 직접 수정하면, 그 오브젝트와 자식 오브젝트들의 위치와 회전을 재조정하고 렌더링을 다시 수행해야 하므로 비용이 많이 들어갑니다.
하지만 SetPositionAndRotation 메서드를 사용하면 Transform 컴포넌트와 함께 제공되는SetPositionAndRotationInternal 메서드를 호출하게 되는데, 이는 렌더링 업데이트를 줄이고 오브젝트의 이전 프레임 상태를 기록해두어 변경사항을 최소화하여 재조정하므로써 최적화를 이룰 수 있습니다.
따라서, SetPositionAndRotation 메서드는 직접적인 Transform 컴포넌트 수정보다 성능면에서 훨씬 우수합니다.
또한, SetPositionAndRotation 메소드를 사용하면 Transform 컴포넌트를 직접 캐싱할 수 있으므로 GetComponent 메소드를 호출할 필요가 없어져 더욱 효율적입니다.
그러나, SetPositionAndRotation 메소드를 너무 많이 호출하면 GC(Garbage Collector) 압박이 커져서 프레임 드랍이 발생할 수 있습니다.