DOTween教程
参考⾃DOTween官⽅⽂档:
DOTween起始上⼿起来很快,当然前提也是⽤⼼看⼀下哈。
> 可以在Unity AssetStore下载得到。
使⽤⽅法:
准备:
在导⼊DOTween后,你需要设置dotween额外的库设置基你的Unity版本。Tools—–>DOTween Utility
Panel——>点击SetupDoTween即可。DOTween只是为了对应Unity的版本不需关⼼更多。**
⼀,最先简单的使⽤⼀下DOTween:
using UnityEngine;
using System.Collections;
using DG.Tweening;//DOTween命名空间
public class Basics : MonoBehaviour
{
//tweeen的⽬标对象
public Transform cubeA, cubeB;
void Start()
{
//全局初始化
DOTween.Init(false, true, LogBehaviour.ErrorsOnly);
//快捷⽅式创建tween
cubeA.DOMove(new Vector3(-2, 2, 0), 1).SetRelative().SetLoops(-1, LoopType.Yoyo);
/
/通⽤⽅式创建tween
DOTween.To(()=> cubeB.position, x=> cubeB.position = x, new Vector3(-2, 2, 0), 1).SetRelative().SetLoops(-1, LoopType.Yoyo);
}
}
给cubeA,B指定连个Cube后运⾏,就可以看到效果了。
前提说明:
Tweener:⼀个持有值的控制并使值起作⽤的tween
Sequence:⼀个特殊的tween,与其控制⼀个值,Sequence控制其它tweens和将它们当成⼀个组。
Tween:⼀个通⽤的词,表名包括Tweener和Sequence Nested
tween :⼀个包含在Sequence内的tween。
⽅法前缀:Prefixes 前缀对于编辑器代码感应很重要,所以计量记住这些:
DO开头:操作所有已知对象,如transform对象或material对象。当然也是DOTween类的前缀。
transform.DOMoveX(10, 1);
transform.DORestart();
DOTween.Play();
Set: 所有可以链式返回tween的设置。(除了From之外,尽管把它当作⼀个设置来⽤,但它实际上并不是⼀个真正的设置)
myTween.SetLoops(4, LoopType.Yoyo).SetSpeedBased();
On: 所有可链式返回tween的回调
myTween.OnStart(myStartFun).OnComplete(myFunction);
⼆,解析(初始化):
1,在要使⽤Dotween的类⾥引⼊命名空间 DG.Tweening;
2,初始化DOTween全局配置,不初始化将使⽤默认值,后⾯仍可以改变初始化的配置,具体⽅法下步。
需要记住:如果在创建第⼀个Tween后才调⽤DOTween.Init将不会⽣效。
考虑到你仍然在任何时候初始化设置,可以使⽤全局设置。Global settings
通常,你可以在调⽤DOTween后链式调⽤DOTween.SetTweensCapacity来⼀同初始化可同时执⾏最⼤的Tweers和Sequence数量。
例⼦如下举例B:
还有多⼀种选择就是使⽤设置Panel的初始化配置:假如在DOTween.Iint初始化时不传任何参数或者传空,那么DOTween将会对此参数使⽤Panel的设置,但仍需要在代码调⽤⼀次Init并参数为空,要不将使⽤默认的参数。如:
数使⽤Panel的设置,但仍需要在代码调⽤⼀次Init并参数为空,要不将使⽤默认的参数。如:
在Unity⼯具栏: Tools—–>DOTween Utility Panel—>Preferences 设置:
//举例A,使⽤设置⾯板的初始化设置
D OTween.Init();
//举例B:⽤指定参数初始化,并同时指定最⼤同时执⾏Tweeners和Sequence的容量
D OTween.Init(true, true, LogBehaviour.Verbose).SetCapacity(200, 10);
解析⼀下初始化参数
/// <summary>
/// 初始化
/// </summary>
/// <param name="recycleAllByDefault">
/// 默认值为false
/// 如果为true那么所创建的tween建可以循环利⽤,这意味着当tween播放挂起时并不会被摧毁,
unity 教程/// 它们将会被放到缓存池待重新使⽤,这样可以避免GC再为可重复利⽤的tween分配。但tween挂起你
/// 将需要注意对tween的引⽤,因为它们就算挂起了,仍可以会被激活,也有可能正被其它的tween使⽤⽽被激活。
/// 如果你想tween挂起时⾃动把tween设置为null,可以这样:
/// myTween.OnKill(()=>mytween = null)
/// 你任何时候都可以改变这个设置:
/// 改变静态变量DG.Tweening.DOTween.defaultRecyclable的参数
/// 或者你也可以为某个tween指定设置这个参数:myTween.SetRecyclable(bool recyclable)
///
/// </param>
/// <param name="useSafeMode">
/// 默认为false
/
// 如果为true,那么tween将会有些性能将会低⼀些,但更安全,tween将会去处理⼀系列事情,如tween在播放⽽⽬标为空。
/// </param>
/// <param name="logBehaviour">
/// 打印什么类型⽇志,默认打印error类型
/// </param>
/// <returns></returns>
public static IDOTweenInit Init(bool? recycleAllByDefault = null, bool? useSafeMode = null, LogBehaviour? logBehaviour = null);
三,解析(tween创建⽅式和设置tween):
创建tween有3中⽅式:通⽤⽅式,快捷⽅式,额外通⽤⽅式。
1,通⽤⽅式:这是最灵活的⽅式,播放中间⼏乎允许你进⾏任何值得运算,包括public private static
或dynamic(和你想的⼀样,快捷调⽤⽅式最后也是调⽤这个⽅法)
//使myVector在⼀秒内变换到到3,4,8
DOTween.To(getter, setter, to, float duration)
D OTween.To(()=> myVector, x=> myVector = x, new Vector3(3,4,8), 1);
// 在⼀秒内变换float类型值到52
D OTween.To(()=> myFloat, x=> myFloat = x, 52, 1);
2,快捷⽅式:
DOTween的快捷⽅法⼀些Unity类实例可以使⽤,像transform, Rigibody和Material等,可以直接从它们的引⽤开始⼀个tween,(也将⾃动的设置这个对象⾃⾝为tween驱动的对象)除了个别指定的外,每个快捷调⽤也都有⼀个Form()⽅法的调⽤,直接在快捷⽅法后链式调⽤From()就会把⽬标 tween变为起始Tween(也就是把始终位置调换)。记住:当把Form分配给tween时,⽬标对象位置将直接跳到起始位置(你写那⾏代码时就跳,⽽不是等到tween启动)。
//transform将移动到Vector3(2,3,4) transform.DOMove(new Vector3(2,3,4), 1);
r igidbody.DOMove(new Vector3(2,3,4), 1);
m aterial., 1);
//From()后反过来,从Vector(2,3,4)到现在的位置 transform.DOMove(new Vector3(2,3,4), 1).From();
r igidbody.DOMove(new Vector3(2,3,4), 1).From();
m aterial., 1).From();
```
3,额外通⽤的法式:
这些额外通⽤的⽅式允许tween的值通过特殊的⽅式指定。除了指定的外,这些⽅式也有Form(),与快捷调⽤类似。
DOTween.Shake(()=> myVector, x=> myVector = x, 1, 5, 10, 45, false);
D OTween.ToAlpha(()=> myColor, x=> myColor = x, 0, 1);
⽆论使⽤哪种⽅法,最终会返回⼀个Twenner或Sequence 所以你仍然可以保持着它们的引⽤,也可以不关⼼他们的区别都保存为⼀个Tween。也可以直接使⽤DOTween的多种静态⽅控制Tween:
//回放所有
tween DOTween.RewindAll();
//回放指定ID的
tween DOTween.Rewind(myId);
以上只是创建了tween,下⾯说明如何设置tween,如渐变类型,全局时间缩放等。
设置分为全局设置和特殊设置:
1,全局设置:
你可以设置全局配置,这将应⽤到新建的tween,全局设置允许设置tween⾃动播放那个和⾃动关闭⾏为,渐变类型,全局时间缩放,之类的参数。设置的⽅法通常都是DOTween的静态⽅法:
DOTween.defaultAutoKill = false; DOTween.defaultEaseType = Ease.InOutCirc;
2,特殊设置:
特殊设置是通过分配的链将以“Set”开始(callback除外),所以编辑器的代码感知会帮你到它们。
//创建⼀个transformtween,设置它的ease,loops和完成回调 transform.DOMove(new Vector3(2,2,2), 2) .SetEase(Ease.OutQuint) .SetLoops(4) .OnComplete(myFunction);
//同上,但持有tween的引⽤来设置,不使⽤链式编程
Tween myTween = transform.DOMove(new Vector3(2,2,2), 2);
myTween.SetEase(Ease.OutQuint); myTween.SetLoops(4); myTween.OnComplete(myFunction);
然⽽,⼀些tween类型有它们特殊的选项,这个由tween的值类型可不可以设置SetOptions()决定,只要记住setOption()是特殊的,在maim tween 的创建⽅法后要⽴刻绑定调⽤:
//和之前的例⼦⼀样,但强制转换transform为interger单元值(这对像素填充来说很有⽤)
transform.DOMove(new Vector3(2,2,2), 2) .SetOptions(true) .SetEase(Ease.OutQuint) .SetLoops(4) .OnComplete(myFunction);。
甚⾄可以copy⼀个tween的设置到另⼀个tween,使⽤SetAs()
//创建⼀个tween并进⾏设置,然后保持它的引⽤ Tween myTween = transform.DOMove(new Vector3(2,2,2), 2) .SetEase(Ease.OutQuint) .SetLoops(4) .OnComplete(myFunction); //C创建另外⼀个tween,使⽤上⼀个相同的设置 material.d, 2) .SetAs(myTween);
//所有的tween将以Ease.OutQunit 循环loop 4次,完成后调⽤同⼀⽅法,即使tween的对象和类型不⼀样
四,创建⼀个Sequence:
Sequence像Tweeners,但并不直接控制参数或值,⽽是把Tweeners或Sequence当成⼀个组。
Sequence可以包含Sequence,多少有hirecrchy的深度决定,没有限制。
可以⽤如下两个步奏创建⼀个Sequence:
//1,获取⼀个新的Sequence,并保持它的引⽤
//返回⼀个可⽤的Sequence,你可以往⾥⾯Add tween它会保存起来
equence mySequence = DOTween.Sequence();
//2,增加tween,间隔和回调到Sequence
//记住:这些⽅法必须在Sequence Start前的起作⽤(通常是你创建之后的下⼀帧,除⾮已停⽌),在Start之后的将不会有效果。
mySequence.Append(transform.DOMoveX(45, 1));
mySequence.AppendInterval(interval);
//给定的时间插⼊⼀个tween,允许你重叠已存在的tween⽽不是替换
mySequence.InsertCallback(1, MyCallback);
提⽰:如果你创建⼀个Sequence知识为了使⽤回调和定时器,那么可以这样使⽤:
// 获取⼀个空的Sequence
S equence mySequence = DOTween.Sequence();
// 在开启添加⼀个move的tween
m ySequence.Append(transform.DOMoveX(45, 1));
// 在第⼀个结束后开启⼀个旋转的tween
m ySequence.Append(transform.DORotate(new Vector3(0,180,0), 1));
// 所有的延迟⼀秒
m ySequence.PrependInterval(1);
// 在整个Sequence期间插⼊⼀个缩放的tween
m ySequence.Insert(0, transform.DOScale(new Vector3(3,3,3), mySequence.Duration()));
//和上⾯的例⼦效果⼀样,但使⽤链式编程,使其看起来更简洁
Sequence mySequence = DOTween.Sequence();
m ySequence.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()));
五,其它:
当你创建⼀个tween的时候它将会⾃动播放直到完成loop次数,除⾮你改变全局设置的defaultAutoPlay设置。
当⼀个tween播放完成将会⾃⼰摧毁,这意味着你不能再次使⽤这个tween,除⾮你改变全局设置的defultAutoKill
如果你的tween的target为空,在tween播放时将会报错,你需要注意这个问题或者激活安全模式。
如果你激活recycling(再循环),DOTween将会缓存你创建的所有的tween,所以可以不再建新的tween就可以重复利⽤它们。
如果你激活recycling(再循环),DOTween将会缓存你创建的所有的tween,所以可以不再建新的tween就可以重复利⽤它们。
当然,为了避免占⽤过⼤的资源,⾥⾯设置最⼤200个tween和50个Sequence同时运⾏,如果需要更多,DOTween将⾃动递增容量,但你也可以直接闭避免卡顿⾃动调整容量
//设置最⼤tween数量3000和最⼤Sequences数量200:
DOTWeen.SetTweensCapacity(3000,200);
任何时候你想清除DOTween的缓存或彻底重置它们,可以调⽤DOTween.Clean(),这将摧毁所有的tween和清除所有的DOTween缓存。
//循环利⽤a tween
你不需要⼿动循环利⽤tweens,你可以选择⾃动重复利⽤全部或者只指定⼀些,你依旧可以任何时候改变Tweener的结束和开始值
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论