首先声明一点,不要简单的认为 DOTween 只能用在 Transform 组件上完成一些简单的动画,或者是完成一些 UI 动画,DOTween 的用途是很广的,unity中有很多组件都可以使用 DOTween 插件完成动画,大家可以去 DOTween 的官网看一下http://dotween.demigiant.com/documentation.php。看完之后,你会有一种相见恨晚的感觉。
下面介绍一下常用的API,并以 Transform 组件写个小例子:
常用的函数都是以DO开头,大家可以自己看下文档。
组件实例.DOPlay():播放动画
组件实例.DOPause():暂停动画
组件实例.DOPlayForward():正放动画
组件实例.DOPlayBackwards():倒放动画,倒放不会循环
组件实例.DOKill():杀死动画
提醒下大家,一定要用组件实例去调用上面这些方法,如果用 this 关键字去调用,不会有语法错误,但是不会有效果
tweener.SetLoops():设置循环次数。-1:无限循环
tweener.SetEase():设置缓动效果
生命周期:
tweener.OnStart():动画开始时调用,不管循环多少次,只调用一次
tweener.OnUpdate():动画播放时调用
tweener.OnPlay():动画开始播放时调用
tweener.OnPause():动画暂停时调用
tweener.OnKill():动画完全结束时或者被杀死时调用
tweener.OnStepComplete():单次动画结束时调用,因为我们设置了循环,这里时指单次动画结束
tweener.OnComplete():动画完全结束时调用,在OnKill之前调用
tweener.OnWaypointChange():这个我还没搞清楚到底什么时候调用,知道的大佬告诉一声,谢谢!
tweener.OnRewind():倒放结束时调用
Sequence队列:就是将多个动画放到一个队列里面,然后挨个挨个播放,并可以循环。
DOTween.Sequence():创建队列。
sequence.Append(tweener):将动画加入队列。
sequence.Insert(1, tweener):插入一个并行的动画到队列的某个位置。
sequence.SetLoops(-1):设置队列是否循环。-1:无限循环。
1 using UnityEngine; 2 using DG.Tweening; 3 4 public class Subject1Test : MonoBehaviour 5 { 6 #region --变量定义 7 private Tweener tweener; 8 private bool isPause = false; 9 #endregion 10 11 #region --系统函数 12 private void Start() 13 { 14 tweener = this.transform.DOMove(new Vector3(10, 0, 0), 5f); 15 tweener.SetLoops(-1);//设置循环次数。-1:无限循环 16 tweener.SetEase(Ease.OutBack);//设置缓动效果 17 tweener.OnStart(delegate { Debug.Log("OnStart"); });//动画开始时调用,不管循环多少次,只调用一次 18 tweener.OnUpdate(delegate { Debug.Log("OnUpdate"); });//动画播放时调用 19 tweener.OnPlay(delegate { Debug.Log("OnPlay"); });//动画开始播放时调用 20 tweener.OnPause(delegate { Debug.Log("OnPause"); });//动画暂停时调用 21 tweener.OnKill(delegate { Debug.Log("OnKill"); });//动画完全结束时或者被杀死时调用 22 tweener.OnStepComplete(delegate { Debug.Log("OnStepComplete"); });//单次动画结束时调用,因为我们设置了循环,这里时指单次动画结束 23 tweener.OnComplete(delegate { Debug.Log("OnComplete"); });//动画完全结束时调用,在OnKill之前调用 24 tweener.OnWaypointChange(delegate { Debug.Log("OnWaypointChange"); }); 25 tweener.OnRewind(delegate { Debug.Log("OnRewind"); });//倒放结束时调用 26 } 27 private void Update() 28 { 29 ControlTweener(); 30 } 31 #endregion 32 33 #region --自定义函数 34 private void ControlTweener() 35 { 36 if (Input.GetKeyDown(KeyCode.Space)) 37 { 38 isPause = !isPause; 39 if (isPause) 40 { 41 this.transform.DOPause();//暂停动画 42 } 43 else 44 { 45 this.transform.DOPlay();//播放动画 46 } 47 } 48 if (Input.GetKeyDown(KeyCode.F)) 49 { 50 this.transform.DOPlayForward();//正放动画 51 } 52 if (Input.GetKeyDown(KeyCode.B)) 53 { 54 this.transform.DOPlayBackwards();//倒放动画 55 } 56 if (Input.GetKeyDown(KeyCode.K)) 57 { 58 this.transform.DOKill();//杀死动画 59 } 60 } 61 #endregion 62 }