55 lines
2.0 KiB
C#
55 lines
2.0 KiB
C#
using UnityEngine;
|
|
using UnityEngine.XR.Interaction.Toolkit;
|
|
using UnityEngine.XR.Interaction.Toolkit.Interactables;
|
|
using HighlightPlus;
|
|
|
|
namespace VRShopping.Interact
|
|
{
|
|
/// <summary>
|
|
/// 호버 중이고 선택되지 않은 상태에서만 HighlightPlus 외곽선 표시.
|
|
/// </summary>
|
|
[RequireComponent(typeof(XRBaseInteractable))]
|
|
[RequireComponent(typeof(HighlightEffect))]
|
|
public class ItemHoverHighlight : MonoBehaviour
|
|
{
|
|
private HighlightEffect _highlight;
|
|
private XRBaseInteractable _interactable;
|
|
|
|
private void Awake()
|
|
{
|
|
_interactable = GetComponent<XRBaseInteractable>();
|
|
if (_highlight == null) _highlight = GetComponent<HighlightEffect>();
|
|
_highlight.highlighted = false;
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
_interactable.hoverEntered.AddListener(OnHoverEntered);
|
|
_interactable.hoverExited.AddListener(OnHoverExited);
|
|
_interactable.selectEntered.AddListener(OnSelectEntered);
|
|
_interactable.selectExited.AddListener(OnSelectExited);
|
|
Refresh();
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
_interactable.hoverEntered.RemoveListener(OnHoverEntered);
|
|
_interactable.hoverExited.RemoveListener(OnHoverExited);
|
|
_interactable.selectEntered.RemoveListener(OnSelectEntered);
|
|
_interactable.selectExited.RemoveListener(OnSelectExited);
|
|
_highlight.highlighted = false;
|
|
}
|
|
|
|
private void OnHoverEntered(HoverEnterEventArgs _) => Refresh();
|
|
private void OnHoverExited(HoverExitEventArgs _) => Refresh();
|
|
private void OnSelectEntered(SelectEnterEventArgs _) => Refresh();
|
|
private void OnSelectExited(SelectExitEventArgs _) => Refresh();
|
|
|
|
private void Refresh()
|
|
{
|
|
// 잡지 않은 상태로 호버 중일 때만 하이라이트
|
|
_highlight.highlighted = _interactable.isHovered && !_interactable.isSelected;
|
|
}
|
|
}
|
|
}
|