Unity 如何使用DoTween v2

来自: 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动画,有两种解决方案

  1. 使用dotween缓慢的改变timeScale到0,直到所有暂停后到动画都完成
DOTween.To(()=> Time.timeScale, x=> Time.timeScale = x, 0, 1f).SetEase(Ease.InQuad).SetUpdate(true);

2.在需要暂停时用到的运动都加上 SetUpdate(true)

只在数值中变化,不对任何对象作用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容