using System.Collections.Generic; using UnityEngine.XR.Interaction.Toolkit.Filtering; using UnityEngine.XR.Interaction.Toolkit.Interactables; namespace UnityEngine.XR.Interaction.Toolkit.Samples.VisionOS { /// /// Reset helper script that resets all objects that have a Resetable component attached. /// [RequireComponent(typeof(XRBaseInteractable))] public class ResetAll : MonoBehaviour { List m_Resetables = new List(); XRBaseInteractable m_Interactable; void Awake() { #if UNITY_2023_1_OR_NEWER m_Resetables.AddRange(FindObjectsByType(FindObjectsSortMode.None)); #else m_Resetables.AddRange(FindObjectsOfType()); #endif m_Interactable = GetComponent(); m_Interactable.selectExited.AddListener(OnSelectExited); } void OnSelectExited(SelectExitEventArgs args) { // If the interactor is a poke interactor, reset all objects. if (args.interactorObject is IPokeStateDataProvider) ResetAllObjects(); } public void ResetAllObjects() { foreach (var resetable in m_Resetables) { resetable.DoReset(); } } } }