using System.Collections.Generic; using Unity.Netcode.Components; using XRMultiplayer; namespace UnityEngine.XR.Content.Interaction { /// /// Provides the ability to reset objects /// public class ObjectReset : MonoBehaviour { [SerializeField] Transform m_ResetTransform; List m_Interactables = new List(); void OnTriggerEnter(Collider collider) { NetworkPhysicsInteractable networkBaseInteractable = collider.GetComponentInParent(); if (networkBaseInteractable != null && !networkBaseInteractable.isInteracting & !m_Interactables.Contains(networkBaseInteractable) && networkBaseInteractable.IsOwner) { m_Interactables.Add(networkBaseInteractable); ResetTransform(networkBaseInteractable); } } void ResetTransform(NetworkPhysicsInteractable networkBaseInteractable) { Transform currentTransform = networkBaseInteractable.transform; networkBaseInteractable.GetComponent().Teleport(m_ResetTransform.position, m_ResetTransform.rotation, networkBaseInteractable.transform.localScale); var rigidBody = currentTransform.GetComponentInChildren(); if (rigidBody != null) { networkBaseInteractable.ResetObjectPhysics(); } if (m_Interactables.Contains(networkBaseInteractable)) m_Interactables.Remove(networkBaseInteractable); } } }