12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using ChivaXR;
- using Sirenix.OdinInspector;
- using TMPro;
- using UnityEngine;
- using UnityEngine.UI;
- /// <summary>
- /// 倒计时
- /// </summary>
- public class AniDriver_Countdown : AnimationDriverBase
- {
- [LabelText("总时长")]
- [SerializeField]
- private int m_TotalTime;
- [BoxGroup("显示时间(TMP模式与Text模式二选一即可)")]
- [LabelText("TMP模式")]
- [SerializeField]
- private TMP_Text m_ShowTimeTMP;
- [BoxGroup("显示时间(TMP模式与Text模式二选一即可)")]
- [LabelText("Text模式")]
- [SerializeField]
- private Text m_ShoeTimeText;
-
- [LabelText("持续时间")]
- [SerializeField]
- private float m_Duration;
- [LabelText("呈现显示")]
- [SerializeField]
- private string m_ShowTitle;
-
- public override void InitState()
- {
-
- }
- public override void FinishedState()
- {
- SetPanelInfo(0);
- }
- public override void StartPlay(Action finishedCallBack = null)
- {
- StartAniCoroutine(ReduceDurationOverTime(finishedCallBack));
- }
-
- IEnumerator ReduceDurationOverTime(Action finishedCallBack = null)
- {
- // 记录开始时间
- float startTime = Time.time;
- // 计算结束时间
- float endTime = startTime + m_Duration;
- // 记录初始总时长
- int initialDuration = m_TotalTime;
-
- while (Time.time < endTime)
- {
- // 计算衰减比例
- float t = (Time.time - startTime) / m_Duration;
- // 根据衰减比例更新totalDuration
- m_TotalTime = Mathf.RoundToInt(Mathf.Lerp(initialDuration, 0, t));
- // 输出当前的totalDuration
- SetPanelInfo(m_TotalTime);
- // 等待下一帧
- yield return null;
- }
- // 确保最终的totalDuration为0
- m_TotalTime = 0;
-
- finishedCallBack?.Invoke();
- }
- private void SetPanelInfo(int _currentTime)
- {
- string timeText = _currentTime != 0 ? _currentTime + "s" : m_ShowTitle;
- if (m_ShoeTimeText != null)
- {
- m_ShoeTimeText.text = timeText;
- }
- else if (m_ShowTimeTMP != null)
- {
- m_ShowTimeTMP.text = timeText;
- }
- else
- {
- m_ShoeTimeText.text = String.Empty;
- m_ShowTimeTMP.text = String.Empty;
- }
- }
- }
|