68 lines
1.9 KiB
C#
68 lines
1.9 KiB
C#
using UnityEngine;
|
||
using UnityEngine.XR.Interaction.Toolkit;
|
||
using UnityEngine.XR.Interaction.Toolkit.Interactables;
|
||
|
||
/// <summary>
|
||
/// S1 天命玄鸟 - 悬浮甲骨文字交互(仅负责文字显示/隐藏)
|
||
/// 归位逻辑由同一 GameObject 上的 ReturnPosition 负责。
|
||
///
|
||
/// hover(触摸/靠近,未抓取)→ 播放文字出现动画
|
||
/// selectEntered(抓取) → 播放文字消失动画
|
||
/// </summary>
|
||
[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<XRGrabInteractable>();
|
||
}
|
||
|
||
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);
|
||
}
|
||
}
|