Files
WhaleAdventure_VR/Assets/02_Scripts/UI/RhythmCountdownHud.cs

57 lines
1.8 KiB
C#

using TMPro;
using UnityEngine;
// 시작 버튼 직후 VR 준비용 카운트다운(5..1, GO!) 표시. RhythmManager 이벤트만 구독하고 표시만 한다.
public class RhythmCountdownHud : MonoBehaviour
{
[SerializeField] private RhythmManager _manager;
[SerializeField] private GameObject _root; // 카운트다운 표시 루트 (카운트 동안만 켬)
[SerializeField] private TMP_Text _countText; // 큰 숫자 / GO! 텍스트
[SerializeField] private string _goText = "GO!";
[SerializeField] private float _goHideDelay = 0.6f; // GO! 표시 후 자동으로 숨기는 시간(초)
private void Awake()
{
if (_root != null) _root.SetActive(false); // 시작 전엔 숨김
}
private void OnEnable()
{
if (_manager == null) return;
_manager.OnCountdownStarted += HandleStarted;
_manager.OnCountdownTick += HandleTick;
_manager.OnCountdownFinished += HandleFinished;
}
private void OnDisable()
{
if (_manager == null) return;
_manager.OnCountdownStarted -= HandleStarted;
_manager.OnCountdownTick -= HandleTick;
_manager.OnCountdownFinished -= HandleFinished;
}
private void HandleStarted()
{
CancelInvoke(nameof(Hide));
if (_root != null) _root.SetActive(true); // 카운트다운 시작 시 표시
}
private void HandleTick(int secondsLeft)
{
if (_countText != null) _countText.text = secondsLeft.ToString();
}
private void HandleFinished()
{
if (_countText != null) _countText.text = _goText; // GO! 잠깐 표시 후 숨김
CancelInvoke(nameof(Hide));
Invoke(nameof(Hide), _goHideDelay);
}
private void Hide()
{
if (_root != null) _root.SetActive(false);
}
}