69 lines
2.3 KiB
C#
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}");
|
|
}
|
|
}
|
|
}
|
|
} |