/*
* DOTween真的比iTween好很多:
* 1.編寫方面更加人性化
* 2.效率高很多
* DoTween插件的基本概念以及簡介:
* 1.DoTween實(shí)現(xiàn)的是通用的緩動算法,用于給Unity中的游戲?qū)ο筇砑觿幼鲃赢嫛?/p>
* 2.DoTween的API風(fēng)格一律采用鏈?zhǔn)秸{(diào)用,再配以Lambda匿名函數(shù)的調(diào)用,可以配置出各種各樣想要的豐富的動畫效果。
* 3.DoTween還可以實(shí)現(xiàn)隊(duì)列延遲回調(diào)函數(shù),也能完成各種異步延遲執(zhí)行的功能。
* 4.DoTween為了方便開發(fā)者使用,對各種Unity的腳本對象進(jìn)行了函數(shù)綁定,例如:
* Transform, Color, Text, Material等都可以直接調(diào)用DoTween的動畫函數(shù)
*
* 綁定的快捷方式動畫函數(shù)API
* 函數(shù)名稱解釋:
* 都是以DO開頭,帶Local的就是局部坐標(biāo)系,不帶的指的是基于世界坐標(biāo)系
* 所有函數(shù)調(diào)用都是鏈?zhǔn)秸{(diào)用
* 可以自己設(shè)置緩動算法的類型,也可以用一些已經(jīng)配置好的緩動算法,比如跳躍Jump
* 這類函數(shù)的API調(diào)用更符合常用函數(shù)的使用習(xí)慣,move就是移動,scale就是縮放,rotation就是旋轉(zhuǎn),color就是顏色,數(shù)值的變化就是float
* 更多的功能用法直接在程序中自動補(bǔ)全就可以理解意思了
*
* 1.以DO開頭的方法:就是補(bǔ)間動畫的方法。例如:transform.DOMoveX(100,1)
* 2.以Set開頭的方法:設(shè)置補(bǔ)間動畫的一些屬性。例如:myTween.SetLoops(4, LoopType.Yoyo)
* 3.以O(shè)n開頭的方法:補(bǔ)間動畫的回調(diào)方法。例如:myTween.OnStart(myStartFunction)
好了,正式開始!首先去Unity應(yīng)用商城下載DOTween,導(dǎo)入工程。
*/
using System.Collections;
using UnityEngine;
using DG.Tweening;
using UnityEngine.UI;
public class CubeAnimator : MonoBehaviour
{
Camera _camera;
Material material;
public Text text;
Tweener _tweener;
void Start()
{
/*DOTween初始化與全局設(shè)置:
當(dāng)你第一次創(chuàng)建一個Tween時,DOTween就會自動初始化(只初始化一次)。
當(dāng)然,也可以使用DOTween.Init方法進(jìn)行自定義,但要在第一次創(chuàng)建一個Tween前。所有創(chuàng)建的Tween都會受DOTween.Init方法的影響。
*recycleAllByDefault :如果為true,則當(dāng)Tween完成時就會被回收,放到一個池中;否則就會被destroy
*useSafeMode :效率會稍微降低,但更安全
*logBehaviour :默認(rèn)值為只打印錯誤信息
*/
DOTween.Init(false, true, LogBehaviour.ErrorsOnly);
_camera = Camera.main;
material = GetComponent().material;
//一、Unity常用組件拓展方法
//(1) Transform拓展方法
TestTransformFuncAnim();
//(2) _camera拓展方法
TestCameraFuncAnim();
//(3) Material拓展方法
TestMaterialFuncAnim();
//(4) Text拓展方法
TestTextFuncAnim();
//二、Dotween常用方法
//Sequence動畫序列函數(shù)API
/*
* 基本解釋說明:
* 動畫序列其實(shí)就是包含了一組Tweener并且操作其他Tweener的一個工具
* 動畫序列并不一定要一個接著一個的播放和執(zhí)行
* 動畫序列之間可以重疊和重復(fù)
* 你可以以任何你所期望的形式混合夾雜著去使用它們
* DOTween.Sequence()會創(chuàng)建一個動畫序列對象,以后所有的Sequence函數(shù)都會返回這個Sequence對象,也就是說動畫序列也可以鏈?zhǔn)秸{(diào)用
* Append(tweener) 可以在隊(duì)尾追加一個tweener,會按照順序依次執(zhí)行這個tweener序列,一個tweener完成后執(zhí)行下一個。
* Insert(time, tweener) 可以在隊(duì)列中插入一個tweener,第1個參數(shù)代表插入的時間點(diǎn),第2個參數(shù)代表在此時間點(diǎn)插入的動畫。
* AppendInterval(time) 可以在隊(duì)尾追加一個時間間隔功能函數(shù),在隊(duì)列執(zhí)行的過程中,停頓一個時間,然后繼續(xù)執(zhí)行。
* AppendCallback(func) 可以在隊(duì)尾追加一個匿名函數(shù),在隊(duì)列中執(zhí)行一個回調(diào)。
*/
//(5) Sequence 隊(duì)列
TestSequenceAnim();
//(6) Tweener的設(shè)置
SetterTweener();
//7.關(guān)于Ease緩動函數(shù)的說明
/*
* 基本概念說明:
* 緩動函數(shù)是指動畫效果在執(zhí)行時的速度,使其看起來更加真實(shí)。
* Ease.InSine 表示正弦加速動作
* Ease.OutSine 表示正弦減速動作
* Ease.InOutSine 表示正弦加速減速動作
* 每個效果都分3種緩動方式:
* (1).easeIn:從0開始加速的緩動
* (2).easeOut:減速到0的緩動
* (3).easeInOut:前半段從0開始加速,后半段減速到0的緩動
* 其中Linear是線性緩動,也叫無緩動效果,沒有上述說明中的效果。
*/
//(7) 運(yùn)動曲線的設(shè)置
TestEaseFuncAnima();
//(8) 動畫回調(diào)事件
TestCallBack();
//(9) 動畫控制方法
TestAnimatorController();
//(10) 獲取數(shù)據(jù)方法
GetTweenerDat();
//(11) 協(xié)程方法
StartCoroutine(Wait());
}
//(1) Transform拓展方法
private void TestTransformFuncAnim()
{
//Position
//1)改變世界坐標(biāo)
//移動方法,第一個參數(shù)是要移動到的目標(biāo)點(diǎn),不是移動這個向量的距離
transform.DOMove(new Vector3(1, 1, 1), 2);
//只控制x軸上的移動,其他兩個方向同理
transform.DOMoveX(1, 2);
//2)改變局部坐標(biāo)
transform.DOLocalMove(new Vector3(1, 1, 1), 2);
transform.DOLocalMoveX(1, 2);
//Rotation
//1)世界旋轉(zhuǎn)
//旋轉(zhuǎn)到給定的值,改變的是歐拉角
transform.DORotate(new Vector3(0, 90, 0), 2);
//旋轉(zhuǎn)到給定的值,改變的是四元數(shù)
transform.DORotateQuaternion(new Quaternion(0.1f, 0.1f, 0.1f, 0.1f), 2);
//2)局部旋轉(zhuǎn)
// 旋轉(zhuǎn)到給定的值,改變的是歐拉角
transform.DOLocalRotate(new Vector3(0, 90, 0), 2);
// 旋轉(zhuǎn)到給定的值,改變的是四元數(shù)
transform.DOLocalRotateQuaternion(new Quaternion(0.1f, 0.1f, 0.1f, 0.1f), 2);
// 在給定時間內(nèi),平滑的讓自身的z軸正方向指向目標(biāo)點(diǎn)
transform.DOLookAt(new Vector3(0, 0, 0), 2);
// Scale
//同上面一樣,這里改變物體的縮放到目標(biāo)值
transform.DOScale(new Vector3(2, 2, 2), 2);
//其他兩個軸向同理
transform.DOScaleX(3, 2);
//Punch
/*
第一個參數(shù) punch:表示方向及強(qiáng)度
第二個參數(shù) duration:表示動畫持續(xù)時間
第三個參數(shù) vibrato:震動次數(shù)
第四個參數(shù) elascity: 這個值是0到1的
當(dāng)為0時,就是在起始點(diǎn)到目標(biāo)點(diǎn)之間運(yùn)動
不為0時,會把你賦的值乘上一個參數(shù),作為你運(yùn)動方向反方向的點(diǎn),物體在這個點(diǎn)和目標(biāo)點(diǎn)之間運(yùn)動
*/
transform.DOPunchPosition(new Vector3(0, 1, 0), 2, 2, 0.1f);
transform.DOPunchRotation(new Vector3(0, 90, 0), 2, 2, 0.1f);
transform.DOPunchScale(new Vector3(2, 2, 2), 2, 2, 0.1f);
//Shake
/*
* 參數(shù):持續(xù)時間,力量,震動,隨機(jī)性,淡出
力量:實(shí)際就是震動的幅度,可以理解成相機(jī)施加的力的大小 使用Vector3可以選擇每個軸向不同的強(qiáng)度
震動:震動次數(shù)
隨機(jī)性:改變震動方向的隨機(jī)值(大?。?~180)
淡出:就是運(yùn)動最后是否緩慢移動回到原本位置
*/
transform.DOShakePosition(1, 5, 10, 50, true);
transform.DOShakeRotation(3);
transform.DOShakeScale(3);
//帶Blend名稱的方法,允許混合動畫
//原本同時執(zhí)行兩個Move方法,只會執(zhí)行最新的一個動畫命令
//例如:
transform.DOMove(Vector3.one, 2);
transform.DOMove(Vector3.one * 2, 2);
//結(jié)果是物體運(yùn)動到了(2,2,2)坐標(biāo)上
//DOBlendableMoveBy方法有兩個特點(diǎn)
//1)允許多個同時執(zhí)行
//例如:
transform.DOBlendableMoveBy(new Vector3(1, 1, 1), 1);
transform.DOBlendableMoveBy(new Vector3(-1, 0, 0), 1);
//假設(shè)起始為(0,0,0),最后動畫停止時的坐標(biāo)就是(0,1,1)
//2)它是增量動畫
transform.DOBlendableMoveBy(new Vector3(1, 1, 1), 1);
//假設(shè)其實(shí)點(diǎn)為(1,1,1),最后動畫停止時的坐標(biāo)就是(2,2,2)
//它的參數(shù)不是目標(biāo)點(diǎn),而是要移動的量
/*以下三個函數(shù)同理
transform.DOBlendableRotateBy
transform.DOBlendableScaleBy()
transform.DOBlendablePunchRotation()
*/
}
//(2) Camera拓展方法
private void TestCameraFuncAnim()
{
//1)調(diào)整屏幕視角的寬高比 第一個參數(shù)是寬高的比值
_camera.DOAspect(0.6f, 2);
//2)改變相機(jī)background參數(shù)的顏色
_camera.DOColor(Color.blue, 2);
//3)改變相機(jī)近切面的值
_camera.DONearClipPlane(200, 2);
//4)改變相機(jī)遠(yuǎn)切面的值
_camera.DOFarClipPlane(2000, 2);
//5)改變相機(jī)FOV的值
_camera.DOFieldOfView(30, 2);
//6)改變相機(jī)正交大小
_camera.DOOrthoSize(10, 2);
//7)按照屏幕像素計算的顯示范圍
_camera.DOPixelRect(new Rect(0f, 0f, 600f, 500f), 2);
//8)按照屏幕百分比計算的顯示范圍
_camera.DORect(new Rect(0.5f, 0.5f, 0.5f, 0.5f), 2);
/*
9)相機(jī)震動
相機(jī)震動效果 參數(shù):持續(xù)時間,力量,震動,隨機(jī)性,淡出
力量:實(shí)際就是震動的幅度,可以理解成相機(jī)施加的力的大小 使用Vector3可以選擇每個軸向不同的強(qiáng)度
震動:震動次數(shù)
隨機(jī)性:改變震動方向的隨機(jī)值(大小:0~180)
淡出:就是運(yùn)動最后是否緩慢移動回到原本位置
*/
_camera.DOShakePosition(1, 10, 10, 50, false);
}
//(3) Material拓展方法
private void TestMaterialFuncAnim()
{
// 1)改變顏色
material.DOColor(Color.black, 2);
// 2)按照shader的屬性名,修改顏色
material.DOColor(Color.clear, "_Color", 2);
// 3)修改alpha值
material.DOFade(0, 2);
// 4)顏色漸變
// Gradient是unity的漸變編輯器(下面有漸變編輯器的圖)
// material.DOGradientColor(Gradient, "_Color", 3);
// 5)改變材質(zhì)offset的值
material.DOOffset(new Vector2(1, 1), 2);
// 6)改變提供的shader屬性的名稱對應(yīng)的Vector4值
material.DOVector(new Vector4(0, 0, 0, 1), "_Color", 3);
// 7)顏色混合
// 跟位置混合動畫同理,可以同時執(zhí)行而不干擾,產(chǎn)生混合在一起的顏色
material.DOBlendableColor(Color.red, "_Color", 3);
}
//(4) Text拓展方法
private void TestTextFuncAnim()
{
//頭三個都是常規(guī)方法,不多介紹了
text.DOColor(Color.black, 2);
text.DOFade(0, 2);
text.DOBlendableColor(Color.black, 2);
//打字機(jī)效果
//是把第一個參數(shù)傳入的內(nèi)容按照時間,一個字一個字的輸入到文本框中
text.DOText("context", 2);
}
//(5) Sequence 隊(duì)列
private void TestSequenceAnim()
{
Sequence quence = DOTween.Sequence();
//1)添加動畫到隊(duì)列中
quence.Append(transform.DOMove(Vector3.one, 2));
//2)添加時間間隔
quence.AppendInterval(1);
//3)按時間點(diǎn)插入動畫
//第一個參數(shù)為時間,此方法把動畫插入到規(guī)定的時間點(diǎn)
// 以這句話為例,它把DORotate動畫添加到此隊(duì)列的0秒時執(zhí)行,雖然它不是最先添加進(jìn)隊(duì)列的
quence.Insert(0, transform.DORotate(new Vector3(0, 90, 0), 1));
//4)加入當(dāng)前動畫
// Join會加入和讓動畫與當(dāng)前正在執(zhí)行的動畫一起執(zhí)行
//如下兩行代碼,DOMove會和DOScale一起執(zhí)行
quence.Append(transform.DOScale(new Vector3(2, 2, 2), 2));
quence.Join(transform.DOMove(Vector3.zero, 2));
//5)預(yù)添加動畫
// 預(yù)添加 會直接添加動畫到Append的前面,也就是最開始的時候
//quence.Prepend(transform.DOScale(Vector3.one * 0.5f, 1));
//這里需要特別說一下預(yù)添加的執(zhí)行順序問題
//它這里也采取了隊(duì)列的性質(zhì),不過,預(yù)添加與原本的的隊(duì)列相比是一個反向隊(duì)列
//例如:
// Sequence quence = DOTween.Sequence();
//quence.Append(transform.DOMove(Vector3.one, 2));
//quence.Prepend(transform.DOMove(-Vector3.one * 2, 2));
//quence.PrependInterval(1);
//執(zhí)行順序是 PrependInterval----Prepend---- - Append
//就是最后添加的會在隊(duì)列的最頂端
//6)預(yù)添加時間間隔
quence.PrependInterval(1);
// 回調(diào)函數(shù)
// 1)預(yù)添加回調(diào)
quence.PrependCallback(
() => { Destroy(gameObject); }
);
// 2)在規(guī)定的時間點(diǎn)加入回調(diào)
quence.InsertCallback(1,
() => { Destroy(gameObject); }
);
//3)添加回調(diào)
quence.AppendCallback(
()=>{ Destroy(gameObject); }
);
}
//(6) Tweener的設(shè)置
private void SetterTweener()
{
TweenParams para = new TweenParams();
// 1)設(shè)置動畫循環(huán)
// 第一個參數(shù)是循環(huán)次數(shù) - 1代表無限循環(huán)
// 第二個參數(shù)是循環(huán)方式
// Restart 重新開始
// Yoyo 從起始點(diǎn)運(yùn)動到目標(biāo)點(diǎn),再從目標(biāo)點(diǎn)運(yùn)動回來,這樣循環(huán)
//Incremental 一直向著運(yùn)動方向運(yùn)動
para.SetLoops(-1, LoopType.Yoyo);
//2)設(shè)置參數(shù)
transform.DOMove(Vector3.one, 2).SetAs(para);
//3)設(shè)置自動殺死動畫
transform.DOMove(Vector3.one, 1).SetAutoKill(true);
//4)from補(bǔ)間
// 例如;
transform.DOMove(Vector3.one, 2).From(true);
//From參數(shù) isRelative(相對的):
//為true,傳入的就是偏移量,即當(dāng)前坐標(biāo) + 傳入值 = 目標(biāo)值
//為falese,傳入的就是目標(biāo)值,即傳入值 = 目標(biāo)值
//5)設(shè)置動畫延時
transform.DOMove(Vector3.one, 2).SetDelay(1);
//6)設(shè)置動畫運(yùn)動以速度為基準(zhǔn) 例如:
transform.DOMove(Vector3.one, 1).SetSpeedBased();
//使用SetSpeedBased時,移動方式就變成以速度為基準(zhǔn)
//原本表示持續(xù)時間的第二個參數(shù),就變成表示速度的參數(shù),每秒移動的單位數(shù)
//7)設(shè)置動畫ID
transform.DOMove(Vector3.one, 2).SetId("Id");
//8)設(shè)置是否可回收
// 為true的話,動畫播放完會被回收,緩存下來,不然播完就直接銷毀
transform.DOMove(Vector3.one, 2).SetRecyclable(true);
//9)設(shè)置動畫為增量運(yùn)動
//例如:
transform.DOMove(Vector3.one, 2).SetRelative(true);
//SetRelative參數(shù) isRelative(相對的):
//為true,傳入的就是偏移量,即當(dāng)前坐標(biāo) + 傳入值 = 目標(biāo)值
//為falese,傳入的就是目標(biāo)值,即傳入值 = 目標(biāo)值
//10)設(shè)置動畫的幀函數(shù)
//例如:
transform.DOMove(Vector3.one, 2).SetUpdate(UpdateType.Normal, true);
//第一個參數(shù) UpdateType :選擇使用的幀函數(shù)
//UpdateType.Normal:更新每一幀中更新要求。
//UpdateType.Late:在LateUpdate調(diào)用期間更新每一幀。
//UpdateType.Fixed:使用FixedUpdate調(diào)用進(jìn)行更新。
//UpdateType.Manual:通過手動DOTween.ManualUpdate調(diào)用進(jìn)行更新。
//第二個參數(shù):為TRUE,則補(bǔ)間將忽略Unity的Time.timeScale
}
//(7) 運(yùn)動曲線的設(shè)置
private void TestEaseFuncAnima()
{
//關(guān)于Ease緩動函數(shù)的說明
/*
* 基本概念說明:
* 緩動函數(shù)是指動畫效果在執(zhí)行時的速度,使其看起來更加真實(shí)。
* Ease.InSine 表示正弦加速動作
* Ease.OutSine 表示正弦減速動作
* Ease.InOutSine 表示正弦加速減速動作
* 每個效果都分3種緩動方式:
* (1).easeIn:從0開始加速的緩動
* (2).easeOut:減速到0的緩動
* (3).easeInOut:前半段從0開始加速,后半段減速到0的緩動
* 其中Linear是線性緩動,也叫無緩動效果,沒有上述說明中的效果。
*/
//線性緩動,勻速運(yùn)動
//transform.DOMove(new Vector3(0, 5, 0), 2).SetRelative().SetLoops(-1, LoopType.Yoyo).SetEase(Ease.Linear);
//先快后慢正弦運(yùn)動
transform.DOMove(new Vector3(0, 5, 0), 2).SetRelative().SetLoops(-1, LoopType.Yoyo).SetEase(Ease.InOutSine);
}
//(8) 動畫回調(diào)事件
private void TestCallBack()
{
//1)動畫完成回調(diào)
transform.DOMove(Vector3.one, 2).OnComplete(() => { });
//2)動畫被殺死時回調(diào)
transform.DOMove(Vector3.one, 2).OnKill(() => { });
//3)動畫播放時回調(diào),暫停后重新播放也會調(diào)用
transform.DOMove(Vector3.one, 3).OnPlay(() => { });
//4)動畫暫停時回調(diào)
transform.DOMove(Vector3.one, 2).OnPause(() => { });
//5)動畫回退時回調(diào)
// 以下情況會被調(diào)用
//使用DORestart重新播放時
//使用Rewind倒播動畫完成時
//使用DOFlip翻轉(zhuǎn)動畫完成時
//使用DOPlayBackwards反向播放動畫完成時
transform.DOMove(Vector3.one, 2).OnRewind(() => { });
//6)只在第一次播放動畫時調(diào)用,在play之前調(diào)用
transform.DOMove(Vector3.one, 2).OnStart(() => { });
//7)完成單個循環(huán)周期時觸發(fā)
transform.DOMove(Vector3.one, 2).OnStepComplete(() => { });
//8)幀回調(diào)
transform.DOMove(Vector3.one, 2).OnUpdate(() => { });
//9)在路徑動畫時,改變目標(biāo)點(diǎn)時的回調(diào),參數(shù)為當(dāng)前目標(biāo)點(diǎn)的下標(biāo)
transform.DOMove(Vector3.one, 2).OnWaypointChange((value) => { });
}
//(9) 動畫控制方法
private void TestAnimatorController()
{
//1)播放
transform.DOPlay();
//2)暫停
transform.DOPause();
// 3)重播
transform.DORestart();
// 4)倒播,此方法會直接退回起始點(diǎn)
transform.DORewind();
// 5)平滑倒播,此方法會按照之前的運(yùn)動方式從當(dāng)前位置退回起始點(diǎn)
transform.DOSmoothRewind();
// 6)殺死動畫
transform.DOKill();
// 7)翻轉(zhuǎn)補(bǔ)間的方向
transform.DOFlip();
// 8)跳轉(zhuǎn)時間點(diǎn)
// 第一個參數(shù)跳轉(zhuǎn)的時間點(diǎn),第二個參數(shù)是跳轉(zhuǎn)后是否播放動畫
transform.DOGoto(1.5f, true);
// 9)反向播放動畫
// 反向播放動畫,在動畫播放到一半時執(zhí)行,會退回起始點(diǎn),在一開始執(zhí)行看不到效果是因?yàn)?,物體本身就在起始點(diǎn)
transform.DOPlayBackwards();
// 10)正向播放動畫
// 正向播放動畫
transform.DOPlayForward();
// 11)TogglePause
// 當(dāng)暫停時,執(zhí)行就繼續(xù)播放,播放時,執(zhí)行就暫停
transform.DOTogglePause();
}
private void GetTweenerDat()
{
// 一、類方法
//1)返回所有暫停的動畫,沒有則返回null
DOTween.PausedTweens();
//2)返回所有真正播放的動畫,沒有則返回null
DOTween.PlayingTweens();
//3)獲取給定ID的數(shù)組
//例如:
DOTween.TweensById("id", true);
//返回滿足條件的動畫數(shù)組
//第一個參數(shù)是動畫的ID
//第二個參數(shù)是是否只收集正在播放的動畫
//4)返回給定對象的數(shù)組
//例如:
DOTween.TweensByTarget(transform, true);
//返回滿足條件的動畫數(shù)組
//第一個參數(shù)是播放動畫的對象
//例如:transform.DOMove(Vector3.one, 2); 第一個參數(shù)就傳入transform
// material.DOColor(Color.White, 2); 第一個參數(shù)就傳入材質(zhì)對象material
//第二個參數(shù)是是否只收集正在播放的動畫
//5)收集傳入的對象是否有動畫在活動
//例如:
DOTween.IsTweening(transform);
//第一個參數(shù)為檢測的對象
//第二個參數(shù)為是否檢測動畫在播放狀態(tài)
//為true時,給定對象在播放狀態(tài)時 返回true
//為false時,只檢測給定對象是否有動畫(在pause狀態(tài)時也算)有則返回true
// 6)正在播放的動畫的總數(shù),目前處于延遲播放狀態(tài)的動畫也算
DOTween.TotalPlayingTweens();
// 二、實(shí)例方法
_tweener = transform.DOMove(Vector3.one, 2);
//1)表示動畫執(zhí)行時間的屬性,可讀可寫
_tweener.fullPosition = 1;
// 2)表示動畫執(zhí)行完的次數(shù)
_tweener.CompletedLoops();
// 3)獲取動畫的延遲時間
_tweener.Delay();
// 4)獲取動畫的持續(xù)時間
// 參數(shù)為true 表示計算循環(huán)的時間,無限循環(huán)為Infinity
_tweener.Duration(false);
//5)動畫已播放的時間
// 參數(shù)為true 表示計算循環(huán)的時間
_tweener.Elapsed();
//6)返回動畫進(jìn)度的百分比
// 起始點(diǎn)為0 目標(biāo)點(diǎn)為1 當(dāng)yoyo循環(huán)模式下,值會從0變到1再從1變到0
_tweener.ElapsedDirectionalPercentage();
//7)返回動畫區(qū)間已用的百分比
//單次循環(huán)的數(shù)值為0到1
//參數(shù)為 是否包含循環(huán) 為true時 返回值是循環(huán)總區(qū)間的已用百分比 若為無限循環(huán) 返回值為0
_tweener.ElapsedPercentage(true);
//8)動畫是否在活動
_tweener.IsActive();
// 9)是否是反向動畫
_tweener.IsBackwards();
//10)動畫是否完成
_tweener.IsComplete();
//11)是否以初始化
_tweener.IsInitialized();
//12)是否正在播放
_tweener.IsPlaying();
//13)返回循環(huán)次數(shù), 無限循環(huán)為Infinity
_tweener.Loops();
}
//協(xié)程方法
private IEnumerator Wait()
{
_tweener = transform.DOMove(Vector3.one, 2);
// 1)等待動畫執(zhí)行完
yield return _tweener.WaitForCompletion();
//2)等待指定的循環(huán)次數(shù)
//參數(shù)為執(zhí)行次數(shù),等待傳入的循環(huán)次數(shù)后,繼續(xù)執(zhí)行
//若是傳入的次數(shù)大于動畫的循環(huán)次數(shù) 則在動畫結(jié)束時繼續(xù)執(zhí)行
yield return _tweener.WaitForElapsedLoops(2);
//3)等待動畫被殺死
yield return _tweener.WaitForKill();
//4)等待動畫執(zhí)行指定時間
//參數(shù)為時間,動畫執(zhí)行傳入的時間之后或動畫執(zhí)行完畢,繼續(xù)執(zhí)行
yield return _tweener.WaitForPosition(0.5f);
//5)等待動畫回退
// 以下情況會繼續(xù)執(zhí)行函數(shù)
//使用DORestart重新播放時
//使用Rewind倒播動畫完成時
//使用DOFlip翻轉(zhuǎn)動畫完成時
//使用DOPlayBackwards反向播放動畫完成時
yield return _tweener.WaitForRewind();
// 6)等待Start執(zhí)行后繼續(xù)執(zhí)行
yield return _tweener.WaitForStart();
}
}
更多關(guān)于ITUnity培訓(xùn)的問題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓(xùn)服務(wù)經(jīng)驗(yàn),采用全程面授高品質(zhì)、高體驗(yàn)培養(yǎng)模式,擁有國內(nèi)一體化教學(xué)管理及學(xué)員服務(wù),助力更多學(xué)員實(shí)現(xiàn)高薪夢想。