DOTween的优点:
1.编写方面更加人性化
2.效率高很多,其中有一点是因为iTween使用的是unity内置的SendMessage
DOTween一般的样子是这样滴:
using DG.Tweening;
transform.DOMoveX(45, 1).SetDelay(2).SetEase(Ease.OutQuad).OnComplete(MyCallback);
Dotween的最常用的一些方法:
1.以DO开头的方法:就是补间动画的方法。例如:.DOMoveX(45, 1),表示X轴方向物体在1秒内移动到x=45的位置
2.以Set开头的方法:设置补间动画的一些属性。例如:.SetDelay(2):表示动画延迟两秒执行;SetEase(Ease.OutQuad)表示运动模式
3.以On开头的方法:补间动画的回调方法。例如:.OnComplete(MyCallback);表示在动画结束之后,需要调用的方法
DOTween初始化与全局设置:
当你第一次创建一个Tween时,DOTween就会自动初始化(只初始化一次),使用缺省值。
当然,也可以使用DOTween.Init方法进行自定义,但要在第一次创建一个Tween前。所有创建的Tween都会受DOTween.Init方法的影响。
但之后,你也可以通过DOTween类的一些静态方法或者变量来修改全局设置:
- static LogBehaviour DOTween.logBehaviour
- static bool DOTween.showUnityEditorReport
- static float DOTween.timeScale
- static bool DOTween.useSafeMode
- static DOTween.SetTweensCapacity(int maxTweeners, int maxSequences)
- static bool DOTween.defaultAutoKill
- static AutoPlay DOTween.defaultAutoPlay
- static float DOTween.defaultEaseOvershootOrAmplitude
- static float DOTween.defaultEasePeriod
- static Ease DOTween.defaultEaseType
- static LoopType DOTween.defaultLoopType
- static bool DOTween.defaultRecyclable
- static bool DOTween.defaultTimeScaleIndependent
- static UpdateType DOTween.defaultUpdateType
static DOTween.Init(bool recycleAllByDefault = false, bool useSafeMode = true, LogBehaviour logBehaviour = LogBehaviour.ErrorsOnly)
recycleAllByDefault :如果为true,则当Tween完成时就会被回收,放到一个池中;否则就会被destroy
useSafeMode :效率会稍微降低,但更安全
logBehaviour :默认值为只打印错误信息
创建Tweener的三种方法:
1.
- static DOTween.To(getter, setter, to, float duration)
- 以DOTween.To(() => myVector, x => myVector = x, new Vector3(3, 4, 8), 1);为例,就是对myVector进行插值,目标值为Vector3(3, 4, 8)
2.
- transform.DOMove(new Vector3(2,3,4), 1);
- rigidbody.DOMove(new Vector3(2,3,4), 1);
- material.DOColor(Color.green, 1);
对于unity中内置的一些组件,DoTween可以通过".+DO开头的方法"的方法去创建自己所需的补间动画
而transform.DOMove(new Vector3(2, 3, 4), 1).From(),就是从Vector3(2,3,4)运动到当前位置
3.
- static DOTween.Punch(getter, setter, Vector3 direction, float duration, int vibrato, float elasticity)
- static DOTween.Shake(getter, setter, float duration, float/Vector3 strength, int vibrato, float randomness, bool ignoreZAxis)
- static DOTween.ToAlpha(getter, setter, float to, float duration)
- static DOTween.ToArray(getter, setter, float to, float duration)
- static DOTween.ToAxis(getter, setter, float to, float duration, AxisConstraint axis)
- static DOTween.To(setter, float startValue, float endValue, float duration)
创建Sequence:
Sequence可以包含Sequence,当执行一个Sequence时会顺序执行Tweener,可以使用Insert方法实现同时执行。
Sequence的方法:
- static DOTween.Sequence()
- Append(Tween tween)
- AppendCallback(TweenCallback callback)
- AppendInterval(float interval)
- Insert(float atPosition, Tween tween)
- InsertCallback(float atPosition, TweenCallback callback)
- Join(Tween tween)
- Prepend(Tween tween)
- PrependCallback(TweenCallback callback)
- PrependInterval(float interval)
- //创建一个Sequence
- Sequence mySequence = DOTween.Sequence();
- mySequence.Append(transform.DOMoveX(1, 1));
- mySequence.Append(transform.DORotate(new Vector3(0, 180, 0), 1));
- mySequence.PrependInterval(1);
- Sequence mySequence = DOTween.Sequence();
- mySequence.Append(transform.DOMoveZ(45, 1))
- .Append(transform.DORotate(new Vector3(0, 180, 0), 1))
- .PrependInterval(1)
- .Insert(0, transform.DOScale(new Vector3(3, 3, 3), mySequence.Duration()));
既然提到了Sequence,再来说下它的全局设置:
- float timeScale
- SetAs(Tween tween \ TweenParams tweenParams)
- SetAutoKill(bool autoKillOnCompletion = true)
- SetEase(Ease easeType \ AnimationCurve animCurve \ EaseFunction customEase)
- SetId(object id)
- SetLoops(int loops, LoopType loopType = LoopType.Restart)
- SetRecyclable(bool recyclable)
- SetUpdate(UpdateType updateType, bool isIndependentUpdate = false)
- 其中需要注意的一点是SetUpdate方法可以让目标忽略timeScale
Dotween的一些回调方法:
- OnComplete(TweenCallback callback) 动画完成之后需要做的事情
- OnKill(TweenCallback callback) 动画销毁之后需要做的事情
- OnPlay(TweenCallback callback) 动画进行时需要做的事情
- OnPause(TweenCallback callback) 动画暂停时需要做的事情
- OnRewind(TweenCallback callback) 动画重播时的事情
- OnStart(TweenCallback callback) 动画开始时的事情
- OnStepComplete(TweenCallback callback) 动画播放完调用一次
- OnUpdate(TweenCallback callback) 动画更新之后调用一次
- OnWaypointChange(TweenCallback<int> callback) 动画在路径点变化之后调用一次
这里附上DoTween的官方文档,提供了对不同组件的不同的Dotween方法:http://dotween.demigiant.com/documentation.php
by张伟