Files
aibis-dream/Assets/Scripts/UI/Panel/PlayTool/TimeTurner.cs
T
2026-02-08 21:48:16 +08:00

69 lines
2.3 KiB
C#

using UnityEngine;
using System.Collections;
using DG.Tweening;
using UnityEngine.UI;
namespace AibisDream.UI
{
public class TimeTurner : MonoBehaviour
{
[Header("索引")]
[SerializeField] private Animator targetAnimator;
[SerializeField] private Animator originAnimator;
[SerializeField] private CanvasGroup canvasGroup;
[Header("参数")]
[SerializeField] private float fadeTime = 2f;
[SerializeField] private float holdTime = 1f;
[SerializeField] private float inoutTime = 0.5f;
public IEnumerator TurnTimeTo(string originState, string targetState)
{
var originImage = originAnimator.GetComponent<Image>();
// 设置起始状态
float originParam = StateToParam(originState);
float targetParam = StateToParam(targetState);
targetAnimator.SetFloat("TimeState", targetParam);
originAnimator.SetFloat("TimeState", originParam);
canvasGroup.alpha = 0;
originImage.color = Color.white;
targetAnimator.gameObject.SetActive(true);
originAnimator.gameObject.SetActive(true);
// 淡入
yield return canvasGroup.DOFade(1, inoutTime).WaitForCompletion();;
// 等待静止时间
yield return new WaitForSeconds(holdTime);
// 淡出起始状态
yield return originAnimator.GetComponent<Image>().DOFade(0, fadeTime).WaitForCompletion();
// 等待静止时间
yield return new WaitForSeconds(holdTime);
// 淡出
yield return canvasGroup.DOFade(0, inoutTime).WaitForCompletion();
targetAnimator.gameObject.SetActive(false);
originAnimator.gameObject.SetActive(false);
}
private float StateToParam(string stateName)
{
switch (stateName.ToLower())
{
case "morning":
return 0;
case "day":
return 0.33f;
case "evening":
return 0.66f;
case "night":
return 1;
default:
throw new System.Exception($"Invalid state name: {stateName}");
}
}
}
}