using UnityEngine; using UnityEngine.XR.Interaction.Toolkit; using UnityEngine.XR.Interaction.Toolkit.Interactables; public class OutlineOnHover : MonoBehaviour { [Header("References")] [SerializeField] private XRBaseInteractable interactable; [SerializeField] private Outline outline; private int hoverCount = 0; private void Awake() { // Try to find the XR Interactable on this object. if(interactable == null) { interactable = GetComponent(); } // Try to find the Quick Outline component on this object or its children. if(outline == null) { outline = GetComponentInChildren(); } // Start with the outline turned off. SetOutline(false); } private void OnEnable() { if(interactable == null) { Debug.LogWarning($"{name} is missing an XRBaseInteractable component."); return; } interactable.hoverEntered.AddListener(OnHoverEntered); interactable.hoverExited.AddListener(OnHoverExited); } private void OnDisable() { if(interactable != null) { interactable.hoverEntered.RemoveListener(OnHoverEntered); interactable.hoverExited.RemoveListener(OnHoverExited); } hoverCount = 0; SetOutline(false); } private void OnHoverEntered(HoverEnterEventArgs args) { hoverCount++; SetOutline(true); } private void OnHoverExited(HoverExitEventArgs args) { hoverCount = Mathf.Max(hoverCount - 1, 0); if(hoverCount == 0) { SetOutline(false); } } private void SetOutline(bool isVisible) { if(outline != null) { outline.enabled = isVisible; } } }