Unity中DOTween实战

Unity中DOTween实战

  • 简介

DOTween是Unity的一个快速、高效、完全类型安全的面向对象动画引擎,针对C#用户进行了优化,免费开源,具有大量高级功能DOTween是Unity的一个快速、高效、完全类型安全的面向对象动画引擎,针对C#用户进行了优化,免费开源,具有大量高级功能。方面下载地址为http://dotween.demigiant.com/download.php。

项目中的例子来自我的课程“平衡球过关”

“平衡球过关”-课程免费的全部完整课程及源码 可到Unity中文课堂 https://learn.u3d.cn/tutorial/Ballance-3D      里进行观看

我在下面举的例子都是在项目开发中使用的部分功能代码,我以例子的方式给大家讲解,这样印象更深刻且更容易学习。

  • 首先,看下面初始化的方法

static DOTween.Init(bool recycleAllByDefault

 = false, bool useSafeMode = true, LogBehaviour logBehaviour = LogBehaviour.ErrorsOnly)

,这是一个可选的方法;当需要大量建立Tweener和Sequence对象时,为了性能考虑可能通过以下方法预先申请内存

DOTween.Init(true, true, LogBehaviour.Verbose).SetCapacity(200, 10);

“SetCapacity”方法允许设置最大Tweeners/Sequences初始容量,例子中预先为Tweener预先申请了2000个Tweener对象的内存和10个Sequence对象的内存。

using DG.Tweening;

在调用DOTween的方法以前在脚本的前面要加上命名空间

三、简单小例子 DOMove的使用

函数原型为

DOMove(Vector3 to, float duration, bool snapping) 

将目标的位置移动到给定值,参数“to”是移动到的位置,参数“duration”为移动的时间,参数“snapping”如果为TRUE,则tween将平滑地将所有值捕捉为整数,默认为false。

public float Speed = 2f;

Vector3 end = new Vector3(1.5f, 1.5f, 1.5f);

this.transform.DOMove(end, Speed).SetLoops(10000, LoopType.Yoyo).SetEase(Ease.Linear);

  1. 首先取得当前脚本所在的transform,这样我们才能使用DOTween的方法;
  2. 下来我们使用DOMove方法将当前游戏对象从当前位置移动到变量“end”指定的位置,并且时间为2秒;
  3. SetLoops(10000, LoopType.Yoyo)从当前位置移动到指定位置的动画 - 像悠悠球(LoopType.Yoyo)一样来回移动10000次;
  4. SetEase(Ease.Linear) 从当前位置移动到指定位置的样式为线性的,也就是速度不变,也可以是其它的样式,读者可以自己尝试。

  • Sequence动画序列

Sequence动画序列可以包含任意多个Tweener或其它多个Sequence动画序列。

1)先新建一个动画序列

Sequence sq = DOTween.Sequence();

2)向序列中添加旋转动画

下面SpheneTr是一个GameObject的Transform的组件

下面代码新建一个“SpheneTwRotate”对象的旋转tweener,

注:旋转方法为DORotate原型为

DORotate(Vector3 to, float duration, RotateMode mode) 将目标旋转到给定值。

如下,在2秒的时间内旋转到值“ Vector3(150, 0, 0)

Tweener SpheneTwRotate = SpheneTr.DORotate(new Vector3(150, 0, 0), 2, RotateMode.LocalAxisAdd);

在序列sq中上面建立的Tweener

sq.Append(SpheneTwRotate);

3)向序列中添加移动动画

新建一个“m_SpheneTr”对象的移动tweener,将SpheneTr在2秒内移动到指定位置

Tweener SpheneTwMove= m_SpheneTr.DOMove(new Vector3(5, 5, 5), 2)

sq.Append(SpheneTwMove);

4)播放这个序列动画,并且是无限循环的(下面参数是-1)

sq.Play().SetLoops(-1);

整体效果是小球先旋转2秒,再移动一2秒,并且这个动画是无限循环的。

如第三步中sq.Append(SpheneTwMove)修改为sq.Join(SpheneTwMove);则整体效果是小球一边旋转一边移动,即移动和旋转是同时进行的,并且这个动画是无限循环的。

  • 插入动画事件的回调

以官方的例子作为讲解

// Callback 没有参数,下面代码调用游戏对象的transform,将对象延X轴在1秒内移动4个单位,并在动画结束时调用无参数的函数MyCallback

transform.DOMoveX(4, 1).OnComplete(MyCallback);

// Callback 带参数

transform.DOMoveX(4, 1).OnComplete(()=>MyCallback(someParam, someOtherParam));

五、其它使用情况

1)声音源 AudioSource

DOFade(float to, float duration)

Tweens an AudioSource's volume to the given value..

DOPitch(float to, float duration)

Tweens an AudioSource's pitch to the given value..

2)有关摄像机的动画 - Camera

DOAspect(float to, float duration)

DOColor(Color to, float duration)

DOFarClipPlane(float to, float duration)

DOFieldOfView(float to, float duration)

DONearClipPlane(float to, float duration)

DOOrthoSize(float to, float duration)

DOPixelRect(Rect to, float duration)

DORect(Rect to, float duration)

DOShakePosition(float duration, float/Vector3 strength, int vibrato, float randomness, bool fadeOut, ShakeRandomnessMode randomnessMode)

DOShakeRotation(float duration, float/Vector3 strength, int vibrato, float randomness, bool fadeOut, ShakeRandomnessMode randomnessMode)

  1. 有机灯光的动画 - Light

DOColor(Color to, float duration)

DOIntensity(float to, float duration)

DOShadowStrength(float to, float duration)

Blendable tweens

DOBlendableColor(Color to, float duration)

  1.  LineRenderer

DOColor(Color2 startValue, Color2 endValue, float duration)

  1. 材质方面的动画 - Material

DOColor(Color to, float duration)

DOColor(Color to, string property, float duration)

DOColor(Color to, int propertyID, float duration)

DOFade(float to, float duration)

DOFade(float to, string property, float duration)

DOFade(float to, int propertyID, float duration)

DOFloat(float to, string property, float duration)

DOFloat(float to, int propertyID, float duration)

DOGradientColor(Gradient to, float duration)

DOGradientColor(Gradient to, string property, float duration)

DOGradientColor(Gradient to, int propertyID, float duration)

DOOffset(Vector2 to, float duration)

DOOffset(Vector2 to, string property, float duration)

DOOffset(Vector2 to, int propertyID, float duration)

DOTiling(Vector2 to, float duration)

DOTiling(Vector2 to, string property, float duration)

DOTiling(Vector2 to, int propertyID, float duration)

DOVector(Vector4 to, string property, float duration)

DOVector(Vector4 to, int propertyID, float duration)

Blendable tweens

DOBlendableColor(Color to, float duration)

DOBlendableColor(Color to, string property, float duration)

DOBlendableColor(Color to, int propertyID, float duration)

6) 刚体 - Rigidbody

Move

DOMove(Vector3 to, float duration, bool snapping)

DOMoveX/DOMoveY/DOMoveZ(float to, float duration, bool snapping)

DOJump(Vector3 endValue, float jumpPower, int numJumps, float duration, bool snapping)

Rotate

DORotate(Vector3 to, float duration, RotateMode mode)

DOLookAt(Vector3 towards, float duration, AxisConstraint axisConstraint = AxisConstraint.None, Vector3 up = Vector3.up)

Path – no FROM

DOPath(Vector3[] waypoints, float duration, PathType pathType = Linear, PathMode pathMode = Full3D, int resolution = 10, Color gizmoColor = null)

DOLocalPath(Vector3[] waypoints, float duration, PathType pathType = Linear, PathMode pathMode = Full3D, int resolution = 10, Color gizmoColor = null)

PRO ONLY ➨ Spiral – no FROM

DOSpiral(float duration, Vector3 axis = null, SpiralMode mode = SpiralMode.Expand, float speed = 1, float frequency = 10, float depth = 0, bool snapping = false)

  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值