namespace UnityEngine.XR.Interaction.Toolkit.Samples.VisionOS
{
///
/// Simple class that serves to reset the transform of an object to its initial state.
///
public class Resetable : MonoBehaviour
{
Vector3 m_InitialPosition;
Quaternion m_InitialRotation;
Vector3 m_InitialScale;
Rigidbody m_Rigidbody;
Transform m_Transform;
void Awake()
{
m_Transform = transform;
// Capture initial transform
m_InitialPosition = m_Transform.position;
m_InitialRotation = m_Transform.rotation;
m_InitialScale = m_Transform.localScale;
// Get Rigidbody if exists
m_Rigidbody = GetComponent();
}
public void DoReset()
{
// Reset transform
m_Transform.SetPositionAndRotation(m_InitialPosition, m_InitialRotation);
m_Transform.localScale = m_InitialScale;
// Reset Rigidbody velocities if exists
if (m_Rigidbody != null)
{
m_Rigidbody.MovePosition(m_InitialPosition);
m_Rigidbody.MoveRotation(m_InitialRotation);
if (!m_Rigidbody.isKinematic)
return;
#if UNITY_2023_3_OR_NEWER
m_Rigidbody.linearVelocity = Vector3.zero;
#else
m_Rigidbody.velocity = Vector3.zero;
#endif
m_Rigidbody.angularVelocity = Vector3.zero;
}
}
}
}