来自: http://dotween.demigiant.com
初始化 init
DOTween.Init (false, false, LogBehaviour.ErrorsOnly).SetCapacity (100, 100);
DO 做运动
- 1秒内移动到p(1,2,3)
- 色彩变为绿色
transform.DOMove(new Vector3(1,2,3), 1);
rigidbody.DOMove(new Vector3(2,3,4), 1);
material.DOColor(Color.green, 1);
- 1秒内把Y缩放到3倍
transform.DOScaleY(3, 1);
- 全体播放
DOTween.Play();
Set 设置参数
- 设置往复4次循环
myTween.SetLoops(4, LoopType.Yoyo).SetSpeedBased();
On 事件
- 开始/结束
myTween.OnStart(myStartFunction).OnComplete(myCompleteFunction);
初始化
- recycleAllByDefault 默认支持gc回收,设置为true则循环利用,但是如果循环利用,需要在执行完毕后清理掉和之前的绑定,否则会出问题
- useSafeMode 虽然慢点但是安全,如果对象被销毁则不会报错
- logBehaviour log信息输出
static DOTween.Init(bool recycleAllByDefault = false, bool useSafeMode = true, LogBehaviour logBehaviour = LogBehaviour.ErrorsOnly)
支持变化值的类型
- 浮点
- 整型
- 矢量
- 四元数
- 矩形数据
- 颜色
- 字符串
float, double, int, uint, long, ulong, Vector2/3/4, Quaternion, Rect, RectOffset, Color, string
使用队列制作复杂动作
Sequence mySequence = DOTween.Sequence();
mySequence.Append(transform.DOMoveX(45, 1));
mySequence.Append(transform.DORotate(new Vector3(0,180,0), 1));
// Delay the whole Sequence by 1 second
mySequence.PrependInterval(1);
// Insert a scale tween for the whole duration of the Sequence
mySequence.Insert(0, transform.DOScale(new Vector3(3,3,3), mySequence.Duration()));
简化写法
Sequence mySequence = DOTween.Sequence();
mySequence.Append(transform.DOMoveX(45, 1))
.Append(transform.DORotate(new Vector3(0,180,0), 1))
.PrependInterval(1)
.Insert(0, transform.DOScale(new Vector3(3,3,3), mySequence.Duration()));
两种响应函数实现方式
// Callback without parameters
transform.DOMoveX(4, 1).OnComplete(MyCallback);
// Callback with parameters
transform.DOMoveX(4, 1).OnComplete(()=>MyCallback(someParam, someOtherParam));
运动参数共享
// Store settings for an infinite looping tween with elastic ease
TweenParams tParms = new TweenParams().SetLoops(-1).SetEase(Ease.OutElastic);
// Apply them to a couple of tweens
transformA.DOMoveX(15, 1).SetAs(tParms);
transformB.DOMoveY(10, 1).SetAs(tParms);
暂停
// Pauses all tweens
DOTween.PauseAll();
// Pauses all tweens that have "badoom" as an id
DOTween.Pause("badoom");
// Pauses all tweens that have someTransform as a target
DOTween.Pause(someTransform);
对象自身调用
myTween.Pause();
//same
transform.DOPause();
运动的写法
// The shortcuts way
transform.DOMove(new Vector3(2,2,2), 1);
// The generic way
DOTween.To(()=> transform.position, x=> transform.position = x, new Vector3(2,2,2), 1);
Time.timeScale=0
默认dotween使用的是fixedUpdate,而fixedUpdate取决于timeScale的速度,如果想在游戏暂停时还能继续使用dotween动画,有两种解决方案
- 使用dotween缓慢的改变timeScale到0,直到所有暂停后到动画都完成
DOTween.To(()=> Time.timeScale, x=> Time.timeScale = x, 0, 1f).SetEase(Ease.InQuad).SetUpdate(true);
2.在需要暂停时用到的运动都加上 SetUpdate(true)