Files
PrinceOfGlory/Assets/Scripts/Scene_01/S1_OracleBoneInteract.cs
2026-03-06 16:12:16 +08:00

68 lines
1.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
}
}