Dotween
官网:http://dotween.demigiant.com/
Tween (Tweener)
属性
回调(事件监听)
- 在补间完成时调用(包括循环),每到达终点一次调用一次
public TweenCallback onComplete;
- 暂停事件,若 autoKill set to FALSE,播放完成后触发
public TweenCallback onPause;
- 播放时调用
public TweenCallback onPlay;
- onUpdate
public TweenCallback onUpdate;
- onStepComplete
public TweenCallback onStepComplete;
- onKill
public TweenCallback onKill;
- 倒播到起始位置的回调,监听,注意,若 Tween 已经是倒播到起始位置,再调用倒播接口,不会触发此事件
public TweenCallback onRewind;
扩展
补间的播放等是通过扩展里面的方法来实现的
- Play()
播放:首次播放时使用
- Restart()
重新启动:再次播放时使用
- PlayBackwards()
倒播:回退补间时使用
案例
实现一个侧边目录窗口,点击按钮,从左侧往右出现,并停住,点击关闭按钮,回退回去
代码
[SerializeField] GameObject flowBtnGameobject; //打开面板的按钮
[SerializeField] RectTransform showStopPos;// 面板目标位置
Tweener teachFlowTweener;//流程面板动画
/// <summary>
/// 打开教学目录
/// </summary>
public void OnClickTeachCatalogue()
{
if (teachFlowTweener == null)//为空,首次播放
{
//teachFlowPlane.ShowUpdateStep(gameModel.timelineStepId.Value);//TODO:面板显示逻辑处理,替换为自己的
teachFlowTweener = teachFlowPlane.transform.DOMoveX(showStopPos.position.x, 0.5f).SetAutoKill(false).SetEase(Ease.InOutFlash).Pause(); //首次播放
teachFlowTweener.Play();
teachFlowTweener.onRewind += onRewindHandler; //监听倒播结束事件,为了显示打开面板的按钮
}
else
{
if (teachFlowTweener.IsPlaying()) return;
//teachFlowPlane.ShowUpdateStep(gameModel.timelineStepId.Value);//TODO:面板显示逻辑处理,替换为自己的
teachFlowTweener.Restart();//重新启动 和 play 同效果
}
flowBtnGameobject.SetActive(false); //隐藏按钮
}
//关闭面板的方法
public void OnCloseFlowPanel()
{
if (teachFlowTweener.IsPlaying()) return;
teachFlowTweener.PlayBackwards();//倒播关闭
}
//面板回到初始位置后调用
private void onRewindHandler()
{
flowBtnGameobject.SetActive(true);//显示打开按钮
}
private void OnDestroy()
{
teachFlowTweener.onComplete -= onRewindHandler; //删除监听
}