using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.Interaction.Toolkit; /// /// Special script that work with the XRExclusiveSocket script. This allow to define a SocketType and if that SocketType /// does not match the XRExclusiveSocket SocketType, this won't be accepted by the socket as a valid target /// [RequireComponent(typeof(XRBaseInteractable))] public class SocketTarget : MonoBehaviour { public string SocketType; public XRInteractableEvent SocketedEvent; public bool DisableSocketOnSocketed; void Awake() { var interactable = GetComponent(); interactable.onSelectEntered.AddListener(SelectedSwitch); } public void SelectedSwitch(XRBaseInteractor interactor) { var socketInteractor = interactor as XRExclusiveSocketInteractor; if(socketInteractor == null) return; if(SocketType != socketInteractor.AcceptedType) return; if (DisableSocketOnSocketed) { //TODO : find a better way, delay feel very wrong StartCoroutine(DisableSocketDelayed(socketInteractor)); } SocketedEvent.Invoke(interactor); } IEnumerator DisableSocketDelayed(XRExclusiveSocketInteractor interactor) { yield return new WaitForSeconds(0.5f); interactor.socketActive = false; } }