114 lines
3.2 KiB
C#
114 lines
3.2 KiB
C#
using System;
|
|
using Cysharp.Threading.Tasks;
|
|
using DG.Tweening;
|
|
using UnityEngine;
|
|
using UniTask = Cysharp.Threading.Tasks.UniTask;
|
|
|
|
/// <summary>
|
|
/// UI窗口基类 - 动画部分
|
|
/// 包含窗口显示/隐藏动画相关功能
|
|
/// </summary>
|
|
public abstract partial class UIWindow
|
|
{
|
|
#region Animation
|
|
|
|
/// <summary>
|
|
/// 播放窗口动画
|
|
/// </summary>
|
|
/// <param name="isShow">是否为显示动画</param>
|
|
/// <param name="callBack">动画完成回调</param>
|
|
/// <returns>动画任务</returns>
|
|
public virtual async UniTask PlayAnimation(bool isShow, Action callBack = null)
|
|
{
|
|
var canvasGroup = gameObject.GetComponent<CanvasGroup>();
|
|
if (!canvasGroup)
|
|
{
|
|
canvasGroup = gameObject.AddComponent<CanvasGroup>();
|
|
}
|
|
|
|
|
|
var time = 0.2f;
|
|
_isPlayingOpenAnim = true;
|
|
_openAnimSeq = DOTween.Sequence();
|
|
|
|
if (isShow)
|
|
{
|
|
canvasGroup.alpha = 0;
|
|
time = 0.3f;
|
|
var tw0 = canvasGroup.DOFade(1, time);
|
|
_openAnimSeq.Append(tw0);
|
|
_openAnimSeq.AppendCallback(() =>
|
|
{
|
|
_isPlayingOpenAnim = false;
|
|
_openAnimSeq.Kill();
|
|
_openAnimSeq = null;
|
|
callBack?.Invoke();
|
|
});
|
|
}
|
|
else
|
|
{
|
|
canvasGroup.alpha = 1;
|
|
var tw1 = canvasGroup.DOFade(0, time);
|
|
_openAnimSeq.Append(tw1);
|
|
_openAnimSeq.AppendCallback(() =>
|
|
{
|
|
if (!_isCloseCbCalled)
|
|
{
|
|
_isPlayingOpenAnim = false;
|
|
_openAnimSeq.Kill();
|
|
_openAnimSeq = null;
|
|
callBack?.Invoke();
|
|
_isCloseCbCalled = true;
|
|
}
|
|
|
|
});
|
|
|
|
await UniTask.WaitUntil(() =>
|
|
{
|
|
if (null == _openAnimSeq)
|
|
return true;
|
|
|
|
if (!_openAnimSeq.IsActive())
|
|
return true;
|
|
|
|
return _openAnimSeq.IsComplete();
|
|
});
|
|
|
|
//保证销毁界面时全都销毁掉
|
|
//await UniTask.WaitForSeconds(time); // UniTask.wa((int)time * 1000 + 10);
|
|
if (!_isCloseCbCalled)
|
|
{
|
|
_isPlayingOpenAnim = false;
|
|
_openAnimSeq?.Kill();
|
|
_openAnimSeq = null;
|
|
callBack?.Invoke();
|
|
_isCloseCbCalled = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 播放显示动画
|
|
/// </summary>
|
|
/// <param name="callBack">动画完成回调</param>
|
|
/// <returns>动画任务</returns>
|
|
public virtual async UniTask AnimShow(Action callBack = null)
|
|
{
|
|
DebugUtil.Log("播放显示动画");
|
|
await PlayAnimation(true, callBack);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 播放隐藏动画
|
|
/// </summary>
|
|
/// <param name="callBack">动画完成回调</param>
|
|
/// <returns>动画任务</returns>
|
|
public virtual async UniTask AnimHide(Action callBack = null)
|
|
{
|
|
DebugUtil.Log("播放隐藏动画");
|
|
await PlayAnimation(false, callBack);
|
|
}
|
|
|
|
#endregion
|
|
}
|