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(); // 设置起始状态 targetAnimator.gameObject.SetActive(true); originAnimator.gameObject.SetActive(true); float originParam = StateToParam(originState); float targetParam = StateToParam(targetState); targetAnimator.SetFloat("TimeState", targetParam); originAnimator.SetFloat("TimeState", originParam); canvasGroup.alpha = 0; originImage.color = Color.white; // 淡入 yield return canvasGroup.DOFade(1, inoutTime).WaitForCompletion();; // 等待静止时间 yield return new WaitForSeconds(holdTime); // 淡出起始状态 yield return originAnimator.GetComponent().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}"); } } } }