using UnityEngine; using UnityEngine.XR.Interaction.Toolkit; using UnityEngine.XR.Interaction.Toolkit.Interactables; /// /// S1 天命玄鸟 - 悬浮甲骨文字交互(仅负责文字显示/隐藏) /// 归位逻辑由同一 GameObject 上的 ReturnPosition 负责。 /// /// hover(触摸/靠近,未抓取)→ 播放文字出现动画 /// selectEntered(抓取) → 播放文字消失动画 /// [RequireComponent(typeof(XRGrabInteractable))] public class S1_OracleBoneInteract : MonoBehaviour { [Header("文字动画")] [SerializeField] private Animator textAnimator; [SerializeField] private string showAnimName = "open"; // 文字出现 [SerializeField] private string hideAnimName = "Translate"; // 文字消失 [Header("音效")] public AudioSource touchAudio; public AudioSource lightEffect; private XRGrabInteractable m_grab; private void Awake() { m_grab = GetComponent(); } private void OnEnable() { m_grab.hoverEntered.AddListener(OnHoverEntered); m_grab.selectEntered.AddListener(OnSelectEntered); } private void OnDisable() { m_grab.hoverEntered.RemoveListener(OnHoverEntered); m_grab.selectEntered.RemoveListener(OnSelectEntered); } // 触摸(未抓取)→ 显示文字 private void OnHoverEntered(HoverEnterEventArgs args) { if (m_grab.isSelected) return; if (lightEffect != null) lightEffect.Play(); ShowText(); } // 抓取 → 隐藏文字 private void OnSelectEntered(SelectEnterEventArgs args) { HideText(); } private void ShowText() { if (textAnimator != null) textAnimator.Play(showAnimName); if (touchAudio != null) touchAudio.Play(); } private void HideText() { if (textAnimator != null) textAnimator.Play(hideAnimName); } }