国产一区二区精品-国产一区二区精品久-国产一区二区精品久久-国产一区二区精品久久91-免费毛片播放-免费毛片基地

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > Unity中DOTween的用法解析

Unity中DOTween的用法解析

來(lái)源:千鋒教育
發(fā)布人:syq
時(shí)間: 2022-06-08 11:58:00 1654660680

  /*

  * DOTween真的比iTween好很多:

  * 1.編寫方面更加人性化

  * 2.效率高很多

DOTween的用法

  * DoTween插件的基本概念以及簡(jiǎn)介:

  * 1.DoTween實(shí)現(xiàn)的是通用的緩動(dòng)算法,用于給Unity中的游戲?qū)ο筇砑觿?dòng)作動(dòng)畫。

  * 2.DoTween的API風(fēng)格一律采用鏈?zhǔn)秸{(diào)用,再配以Lambda匿名函數(shù)的調(diào)用,可以配置出各種各樣想要的豐富的動(dòng)畫效果。

  * 3.DoTween還可以實(shí)現(xiàn)隊(duì)列延遲回調(diào)函數(shù),也能完成各種異步延遲執(zhí)行的功能。

  * 4.DoTween為了方便開(kāi)發(fā)者使用,對(duì)各種Unity的腳本對(duì)象進(jìn)行了函數(shù)綁定,例如:

  * Transform, Color, Text, Material等都可以直接調(diào)用DoTween的動(dòng)畫函數(shù)

  *

  * 綁定的快捷方式動(dòng)畫函數(shù)API

  * 函數(shù)名稱解釋:

  * 都是以DO開(kāi)頭,帶Local的就是局部坐標(biāo)系,不帶的指的是基于世界坐標(biāo)系

  * 所有函數(shù)調(diào)用都是鏈?zhǔn)秸{(diào)用

  * 可以自己設(shè)置緩動(dòng)算法的類型,也可以用一些已經(jīng)配置好的緩動(dòng)算法,比如跳躍Jump

  * 這類函數(shù)的API調(diào)用更符合常用函數(shù)的使用習(xí)慣,move就是移動(dòng),scale就是縮放,rotation就是旋轉(zhuǎn),color就是顏色,數(shù)值的變化就是float

  * 更多的功能用法直接在程序中自動(dòng)補(bǔ)全就可以理解意思了

  *

  * 1.以DO開(kāi)頭的方法:就是補(bǔ)間動(dòng)畫的方法。例如:transform.DOMoveX(100,1)

  * 2.以Set開(kāi)頭的方法:設(shè)置補(bǔ)間動(dòng)畫的一些屬性。例如:myTween.SetLoops(4, LoopType.Yoyo)

  * 3.以O(shè)n開(kāi)頭的方法:補(bǔ)間動(dòng)畫的回調(diào)方法。例如:myTween.OnStart(myStartFunction)

  好了,正式開(kāi)始!首先去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)建一個(gè)Tween時(shí),DOTween就會(huì)自動(dòng)初始化(只初始化一次)。

  當(dāng)然,也可以使用DOTween.Init方法進(jìn)行自定義,但要在第一次創(chuàng)建一個(gè)Tween前。所有創(chuàng)建的Tween都會(huì)受DOTween.Init方法的影響。

  *recycleAllByDefault :如果為true,則當(dāng)Tween完成時(shí)就會(huì)被回收,放到一個(gè)池中;否則就會(huì)被destroy

  *useSafeMode :效率會(huì)稍微降低,但更安全

  *logBehaviour :默認(rèn)值為只打印錯(cuò)誤信息

  */

  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動(dòng)畫序列函數(shù)API

  /*

  * 基本解釋說(shuō)明:

  * 動(dòng)畫序列其實(shí)就是包含了一組Tweener并且操作其他Tweener的一個(gè)工具

  * 動(dòng)畫序列并不一定要一個(gè)接著一個(gè)的播放和執(zhí)行

  * 動(dòng)畫序列之間可以重疊和重復(fù)

  * 你可以以任何你所期望的形式混合夾雜著去使用它們

  * DOTween.Sequence()會(huì)創(chuàng)建一個(gè)動(dòng)畫序列對(duì)象,以后所有的Sequence函數(shù)都會(huì)返回這個(gè)Sequence對(duì)象,也就是說(shuō)動(dòng)畫序列也可以鏈?zhǔn)秸{(diào)用

  * Append(tweener) 可以在隊(duì)尾追加一個(gè)tweener,會(huì)按照順序依次執(zhí)行這個(gè)tweener序列,一個(gè)tweener完成后執(zhí)行下一個(gè)。

  * Insert(time, tweener) 可以在隊(duì)列中插入一個(gè)tweener,第1個(gè)參數(shù)代表插入的時(shí)間點(diǎn),第2個(gè)參數(shù)代表在此時(shí)間點(diǎn)插入的動(dòng)畫。

  * AppendInterval(time) 可以在隊(duì)尾追加一個(gè)時(shí)間間隔功能函數(shù),在隊(duì)列執(zhí)行的過(guò)程中,停頓一個(gè)時(shí)間,然后繼續(xù)執(zhí)行。

  * AppendCallback(func) 可以在隊(duì)尾追加一個(gè)匿名函數(shù),在隊(duì)列中執(zhí)行一個(gè)回調(diào)。

  */

  //(5) Sequence 隊(duì)列

  TestSequenceAnim();

  //(6) Tweener的設(shè)置

  SetterTweener();

  //7.關(guān)于Ease緩動(dòng)函數(shù)的說(shuō)明

  /*

  * 基本概念說(shuō)明:

  * 緩動(dòng)函數(shù)是指動(dòng)畫效果在執(zhí)行時(shí)的速度,使其看起來(lái)更加真實(shí)。

  * Ease.InSine 表示正弦加速動(dòng)作

  * Ease.OutSine 表示正弦減速動(dòng)作

  * Ease.InOutSine 表示正弦加速減速動(dòng)作

  * 每個(gè)效果都分3種緩動(dòng)方式:

  * (1).easeIn:從0開(kāi)始加速的緩動(dòng)

  * (2).easeOut:減速到0的緩動(dòng)

  * (3).easeInOut:前半段從0開(kāi)始加速,后半段減速到0的緩動(dòng)

  * 其中Linear是線性緩動(dòng),也叫無(wú)緩動(dòng)效果,沒(méi)有上述說(shuō)明中的效果。

  */

  //(7) 運(yùn)動(dòng)曲線的設(shè)置

  TestEaseFuncAnima();

  //(8) 動(dòng)畫回調(diào)事件

  TestCallBack();

  //(9) 動(dòng)畫控制方法

  TestAnimatorController();

  //(10) 獲取數(shù)據(jù)方法

  GetTweenerDat();

  //(11) 協(xié)程方法

  StartCoroutine(Wait());

  }

  //(1) Transform拓展方法

  private void TestTransformFuncAnim()

  {

  //Position

  //1)改變世界坐標(biāo)

  //移動(dòng)方法,第一個(gè)參數(shù)是要移動(dòng)到的目標(biāo)點(diǎn),不是移動(dòng)這個(gè)向量的距離

  transform.DOMove(new Vector3(1, 1, 1), 2);

  //只控制x軸上的移動(dòng),其他兩個(gè)方向同理

  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);

  // 在給定時(shí)間內(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);

  //其他兩個(gè)軸向同理

  transform.DOScaleX(3, 2);

  //Punch

  /*

  第一個(gè)參數(shù) punch:表示方向及強(qiáng)度

  第二個(gè)參數(shù) duration:表示動(dòng)畫持續(xù)時(shí)間

  第三個(gè)參數(shù) vibrato:震動(dòng)次數(shù)

  第四個(gè)參數(shù) elascity: 這個(gè)值是0到1的

  當(dāng)為0時(shí),就是在起始點(diǎn)到目標(biāo)點(diǎn)之間運(yùn)動(dòng)

  不為0時(shí),會(huì)把你賦的值乘上一個(gè)參數(shù),作為你運(yùn)動(dòng)方向反方向的點(diǎn),物體在這個(gè)點(diǎn)和目標(biāo)點(diǎn)之間運(yùn)動(dòng)

  */

  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ù)時(shí)間,力量,震動(dòng),隨機(jī)性,淡出

  力量:實(shí)際就是震動(dòng)的幅度,可以理解成相機(jī)施加的力的大小 使用Vector3可以選擇每個(gè)軸向不同的強(qiáng)度

  震動(dòng):震動(dòng)次數(shù)

  隨機(jī)性:改變震動(dòng)方向的隨機(jī)值(大小:0~180)

  淡出:就是運(yùn)動(dòng)最后是否緩慢移動(dòng)回到原本位置

  */

  transform.DOShakePosition(1, 5, 10, 50, true);

  transform.DOShakeRotation(3);

  transform.DOShakeScale(3);

  //帶Blend名稱的方法,允許混合動(dòng)畫

  //原本同時(shí)執(zhí)行兩個(gè)Move方法,只會(huì)執(zhí)行最新的一個(gè)動(dòng)畫命令

  //例如:

  transform.DOMove(Vector3.one, 2);

  transform.DOMove(Vector3.one * 2, 2);

  //結(jié)果是物體運(yùn)動(dòng)到了(2,2,2)坐標(biāo)上

  //DOBlendableMoveBy方法有兩個(gè)特點(diǎn)

  //1)允許多個(gè)同時(shí)執(zhí)行

  //例如:

  transform.DOBlendableMoveBy(new Vector3(1, 1, 1), 1);

  transform.DOBlendableMoveBy(new Vector3(-1, 0, 0), 1);

  //假設(shè)起始為(0,0,0),最后動(dòng)畫停止時(shí)的坐標(biāo)就是(0,1,1)

  //2)它是增量動(dòng)畫

  transform.DOBlendableMoveBy(new Vector3(1, 1, 1), 1);

  //假設(shè)其實(shí)點(diǎn)為(1,1,1),最后動(dòng)畫停止時(shí)的坐標(biāo)就是(2,2,2)

  //它的參數(shù)不是目標(biāo)點(diǎn),而是要移動(dòng)的量

  /*以下三個(gè)函數(shù)同理

  transform.DOBlendableRotateBy

  transform.DOBlendableScaleBy()

  transform.DOBlendablePunchRotation()

  */

 }

  //(2) Camera拓展方法

  private void TestCameraFuncAnim()

  {

  //1)調(diào)整屏幕視角的寬高比 第一個(gè)參數(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)按照屏幕像素計(jì)算的顯示范圍

  _camera.DOPixelRect(new Rect(0f, 0f, 600f, 500f), 2);

  //8)按照屏幕百分比計(jì)算的顯示范圍

  _camera.DORect(new Rect(0.5f, 0.5f, 0.5f, 0.5f), 2);

  /*

  9)相機(jī)震動(dòng)

  相機(jī)震動(dòng)效果 參數(shù):持續(xù)時(shí)間,力量,震動(dòng),隨機(jī)性,淡出

  力量:實(shí)際就是震動(dòng)的幅度,可以理解成相機(jī)施加的力的大小 使用Vector3可以選擇每個(gè)軸向不同的強(qiáng)度

  震動(dòng):震動(dòng)次數(shù)

  隨機(jī)性:改變震動(dòng)方向的隨機(jī)值(大?。?~180)

  淡出:就是運(yùn)動(dòng)最后是否緩慢移動(dòng)回到原本位置

  */

  _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屬性的名稱對(duì)應(yīng)的Vector4值

  material.DOVector(new Vector4(0, 0, 0, 1), "_Color", 3);

  // 7)顏色混合

  // 跟位置混合動(dòng)畫同理,可以同時(shí)執(zhí)行而不干擾,產(chǎn)生混合在一起的顏色

  material.DOBlendableColor(Color.red, "_Color", 3);

 }

  //(4) Text拓展方法

  private void TestTextFuncAnim()

  {

  //頭三個(gè)都是常規(guī)方法,不多介紹了

  text.DOColor(Color.black, 2);

  text.DOFade(0, 2);

  text.DOBlendableColor(Color.black, 2);

  //打字機(jī)效果

  //是把第一個(gè)參數(shù)傳入的內(nèi)容按照時(shí)間,一個(gè)字一個(gè)字的輸入到文本框中

  text.DOText("context", 2);

  }

  //(5) Sequence 隊(duì)列

  private void TestSequenceAnim()

  {

  Sequence quence = DOTween.Sequence();

  //1)添加動(dòng)畫到隊(duì)列中

  quence.Append(transform.DOMove(Vector3.one, 2));

  //2)添加時(shí)間間隔

  quence.AppendInterval(1);

  //3)按時(shí)間點(diǎn)插入動(dòng)畫

  //第一個(gè)參數(shù)為時(shí)間,此方法把動(dòng)畫插入到規(guī)定的時(shí)間點(diǎn)

  // 以這句話為例,它把DORotate動(dòng)畫添加到此隊(duì)列的0秒時(shí)執(zhí)行,雖然它不是最先添加進(jìn)隊(duì)列的

  quence.Insert(0, transform.DORotate(new Vector3(0, 90, 0), 1));

  //4)加入當(dāng)前動(dòng)畫

  // Join會(huì)加入和讓動(dòng)畫與當(dāng)前正在執(zhí)行的動(dòng)畫一起執(zhí)行

  //如下兩行代碼,DOMove會(huì)和DOScale一起執(zhí)行

  quence.Append(transform.DOScale(new Vector3(2, 2, 2), 2));

  quence.Join(transform.DOMove(Vector3.zero, 2));

  //5)預(yù)添加動(dòng)畫

  // 預(yù)添加 會(huì)直接添加動(dòng)畫到Append的前面,也就是最開(kāi)始的時(shí)候

  //quence.Prepend(transform.DOScale(Vector3.one * 0.5f, 1));

  //這里需要特別說(shuō)一下預(yù)添加的執(zhí)行順序問(wèn)題

  //它這里也采取了隊(duì)列的性質(zhì),不過(guò),預(yù)添加與原本的的隊(duì)列相比是一個(gè)反向隊(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

  //就是最后添加的會(huì)在隊(duì)列的最頂端

  //6)預(yù)添加時(shí)間間隔

  quence.PrependInterval(1);

  // 回調(diào)函數(shù)

  // 1)預(yù)添加回調(diào)

  quence.PrependCallback(

  () => { Destroy(gameObject); }

 );

  // 2)在規(guī)定的時(shí)間點(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è)置動(dòng)畫循環(huán)

  // 第一個(gè)參數(shù)是循環(huán)次數(shù) - 1代表無(wú)限循環(huán)

  // 第二個(gè)參數(shù)是循環(huán)方式

  // Restart 重新開(kāi)始

  // Yoyo 從起始點(diǎn)運(yùn)動(dòng)到目標(biāo)點(diǎn),再?gòu)哪繕?biāo)點(diǎn)運(yùn)動(dòng)回來(lái),這樣循環(huán)

  //Incremental 一直向著運(yùn)動(dòng)方向運(yùn)動(dòng)

  para.SetLoops(-1, LoopType.Yoyo);

  //2)設(shè)置參數(shù)

  transform.DOMove(Vector3.one, 2).SetAs(para);

  //3)設(shè)置自動(dòng)殺死動(dòng)畫

  transform.DOMove(Vector3.one, 1).SetAutoKill(true);

  //4)from補(bǔ)間

  // 例如;

  transform.DOMove(Vector3.one, 2).From(true);

  //From參數(shù) isRelative(相對(duì)的):

  //為true,傳入的就是偏移量,即當(dāng)前坐標(biāo) + 傳入值 = 目標(biāo)值

  //為falese,傳入的就是目標(biāo)值,即傳入值 = 目標(biāo)值

  //5)設(shè)置動(dòng)畫延時(shí)

  transform.DOMove(Vector3.one, 2).SetDelay(1);

  //6)設(shè)置動(dòng)畫運(yùn)動(dòng)以速度為基準(zhǔn) 例如:

  transform.DOMove(Vector3.one, 1).SetSpeedBased();

  //使用SetSpeedBased時(shí),移動(dòng)方式就變成以速度為基準(zhǔn)

  //原本表示持續(xù)時(shí)間的第二個(gè)參數(shù),就變成表示速度的參數(shù),每秒移動(dòng)的單位數(shù)

  //7)設(shè)置動(dòng)畫ID

  transform.DOMove(Vector3.one, 2).SetId("Id");

  //8)設(shè)置是否可回收

  // 為true的話,動(dòng)畫播放完會(huì)被回收,緩存下來(lái),不然播完就直接銷毀

  transform.DOMove(Vector3.one, 2).SetRecyclable(true);

  //9)設(shè)置動(dòng)畫為增量運(yùn)動(dòng)

  //例如:

  transform.DOMove(Vector3.one, 2).SetRelative(true);

  //SetRelative參數(shù) isRelative(相對(duì)的):

  //為true,傳入的就是偏移量,即當(dāng)前坐標(biāo) + 傳入值 = 目標(biāo)值

  //為falese,傳入的就是目標(biāo)值,即傳入值 = 目標(biāo)值

  //10)設(shè)置動(dòng)畫的幀函數(shù)

  //例如:

  transform.DOMove(Vector3.one, 2).SetUpdate(UpdateType.Normal, true);

  //第一個(gè)參數(shù) UpdateType :選擇使用的幀函數(shù)

  //UpdateType.Normal:更新每一幀中更新要求。

  //UpdateType.Late:在LateUpdate調(diào)用期間更新每一幀。

  //UpdateType.Fixed:使用FixedUpdate調(diào)用進(jìn)行更新。

  //UpdateType.Manual:通過(guò)手動(dòng)DOTween.ManualUpdate調(diào)用進(jìn)行更新。

  //第二個(gè)參數(shù):為TRUE,則補(bǔ)間將忽略Unity的Time.timeScale

  }

  //(7) 運(yùn)動(dòng)曲線的設(shè)置

  private void TestEaseFuncAnima()

  {

  //關(guān)于Ease緩動(dòng)函數(shù)的說(shuō)明

  /*

  * 基本概念說(shuō)明:

  * 緩動(dòng)函數(shù)是指動(dòng)畫效果在執(zhí)行時(shí)的速度,使其看起來(lái)更加真實(shí)。

  * Ease.InSine 表示正弦加速動(dòng)作

  * Ease.OutSine 表示正弦減速動(dòng)作

  * Ease.InOutSine 表示正弦加速減速動(dòng)作

  * 每個(gè)效果都分3種緩動(dòng)方式:

  * (1).easeIn:從0開(kāi)始加速的緩動(dòng)

  * (2).easeOut:減速到0的緩動(dòng)

  * (3).easeInOut:前半段從0開(kāi)始加速,后半段減速到0的緩動(dòng)

  * 其中Linear是線性緩動(dòng),也叫無(wú)緩動(dòng)效果,沒(méi)有上述說(shuō)明中的效果。

  */

  //線性緩動(dòng),勻速運(yùn)動(dòng)

  //transform.DOMove(new Vector3(0, 5, 0), 2).SetRelative().SetLoops(-1, LoopType.Yoyo).SetEase(Ease.Linear);

  //先快后慢正弦運(yùn)動(dòng)

  transform.DOMove(new Vector3(0, 5, 0), 2).SetRelative().SetLoops(-1, LoopType.Yoyo).SetEase(Ease.InOutSine);

  }

  //(8) 動(dòng)畫回調(diào)事件

  private void TestCallBack()

  {

  //1)動(dòng)畫完成回調(diào)

  transform.DOMove(Vector3.one, 2).OnComplete(() => { });

  //2)動(dòng)畫被殺死時(shí)回調(diào)

  transform.DOMove(Vector3.one, 2).OnKill(() => { });

  //3)動(dòng)畫播放時(shí)回調(diào),暫停后重新播放也會(huì)調(diào)用

  transform.DOMove(Vector3.one, 3).OnPlay(() => { });

  //4)動(dòng)畫暫停時(shí)回調(diào)

  transform.DOMove(Vector3.one, 2).OnPause(() => { });

  //5)動(dòng)畫回退時(shí)回調(diào)

  // 以下情況會(huì)被調(diào)用

  //使用DORestart重新播放時(shí)

  //使用Rewind倒播動(dòng)畫完成時(shí)

  //使用DOFlip翻轉(zhuǎn)動(dòng)畫完成時(shí)

  //使用DOPlayBackwards反向播放動(dòng)畫完成時(shí)

  transform.DOMove(Vector3.one, 2).OnRewind(() => { });

  //6)只在第一次播放動(dòng)畫時(shí)調(diào)用,在play之前調(diào)用

  transform.DOMove(Vector3.one, 2).OnStart(() => { });

  //7)完成單個(gè)循環(huán)周期時(shí)觸發(fā)

  transform.DOMove(Vector3.one, 2).OnStepComplete(() => { });

  //8)幀回調(diào)

  transform.DOMove(Vector3.one, 2).OnUpdate(() => { });

  //9)在路徑動(dòng)畫時(shí),改變目標(biāo)點(diǎn)時(shí)的回調(diào),參數(shù)為當(dāng)前目標(biāo)點(diǎn)的下標(biāo)

  transform.DOMove(Vector3.one, 2).OnWaypointChange((value) => { });

  }

  //(9) 動(dòng)畫控制方法

  private void TestAnimatorController()

  {

  //1)播放

  transform.DOPlay();

  //2)暫停

  transform.DOPause();

  // 3)重播

  transform.DORestart();

  // 4)倒播,此方法會(huì)直接退回起始點(diǎn)

  transform.DORewind();

  // 5)平滑倒播,此方法會(huì)按照之前的運(yùn)動(dòng)方式從當(dāng)前位置退回起始點(diǎn)

  transform.DOSmoothRewind();

  // 6)殺死動(dòng)畫

  transform.DOKill();

  // 7)翻轉(zhuǎn)補(bǔ)間的方向

  transform.DOFlip();

  // 8)跳轉(zhuǎn)時(shí)間點(diǎn)

  // 第一個(gè)參數(shù)跳轉(zhuǎn)的時(shí)間點(diǎn),第二個(gè)參數(shù)是跳轉(zhuǎn)后是否播放動(dòng)畫

  transform.DOGoto(1.5f, true);

  // 9)反向播放動(dòng)畫

  // 反向播放動(dòng)畫,在動(dòng)畫播放到一半時(shí)執(zhí)行,會(huì)退回起始點(diǎn),在一開(kāi)始執(zhí)行看不到效果是因?yàn)椋矬w本身就在起始點(diǎn)

  transform.DOPlayBackwards();

  // 10)正向播放動(dòng)畫

  // 正向播放動(dòng)畫

  transform.DOPlayForward();

  // 11)TogglePause

  // 當(dāng)暫停時(shí),執(zhí)行就繼續(xù)播放,播放時(shí),執(zhí)行就暫停

  transform.DOTogglePause();

 }

  private void GetTweenerDat()

  {

  // 一、類方法

  //1)返回所有暫停的動(dòng)畫,沒(méi)有則返回null

  DOTween.PausedTweens();

  //2)返回所有真正播放的動(dòng)畫,沒(méi)有則返回null

  DOTween.PlayingTweens();

  //3)獲取給定ID的數(shù)組

  //例如:

  DOTween.TweensById("id", true);

  //返回滿足條件的動(dòng)畫數(shù)組

  //第一個(gè)參數(shù)是動(dòng)畫的ID

  //第二個(gè)參數(shù)是是否只收集正在播放的動(dòng)畫

  //4)返回給定對(duì)象的數(shù)組

  //例如:

  DOTween.TweensByTarget(transform, true);

  //返回滿足條件的動(dòng)畫數(shù)組

  //第一個(gè)參數(shù)是播放動(dòng)畫的對(duì)象

  //例如:transform.DOMove(Vector3.one, 2); 第一個(gè)參數(shù)就傳入transform

  // material.DOColor(Color.White, 2); 第一個(gè)參數(shù)就傳入材質(zhì)對(duì)象material

  //第二個(gè)參數(shù)是是否只收集正在播放的動(dòng)畫

  //5)收集傳入的對(duì)象是否有動(dòng)畫在活動(dòng)

  //例如:

  DOTween.IsTweening(transform);

  //第一個(gè)參數(shù)為檢測(cè)的對(duì)象

  //第二個(gè)參數(shù)為是否檢測(cè)動(dòng)畫在播放狀態(tài)

  //為true時(shí),給定對(duì)象在播放狀態(tài)時(shí) 返回true

  //為false時(shí),只檢測(cè)給定對(duì)象是否有動(dòng)畫(在pause狀態(tài)時(shí)也算)有則返回true

  // 6)正在播放的動(dòng)畫的總數(shù),目前處于延遲播放狀態(tài)的動(dòng)畫也算

  DOTween.TotalPlayingTweens();

  // 二、實(shí)例方法

  _tweener = transform.DOMove(Vector3.one, 2);

  //1)表示動(dòng)畫執(zhí)行時(shí)間的屬性,可讀可寫

  _tweener.fullPosition = 1;

  // 2)表示動(dòng)畫執(zhí)行完的次數(shù)

  _tweener.CompletedLoops();

  // 3)獲取動(dòng)畫的延遲時(shí)間

  _tweener.Delay();

  // 4)獲取動(dòng)畫的持續(xù)時(shí)間

  // 參數(shù)為true 表示計(jì)算循環(huán)的時(shí)間,無(wú)限循環(huán)為Infinity

  _tweener.Duration(false);

  //5)動(dòng)畫已播放的時(shí)間

  // 參數(shù)為true 表示計(jì)算循環(huán)的時(shí)間

  _tweener.Elapsed();

  //6)返回動(dòng)畫進(jìn)度的百分比

  // 起始點(diǎn)為0 目標(biāo)點(diǎn)為1 當(dāng)yoyo循環(huán)模式下,值會(huì)從0變到1再?gòu)?變到0

  _tweener.ElapsedDirectionalPercentage();

  //7)返回動(dòng)畫區(qū)間已用的百分比

  //單次循環(huán)的數(shù)值為0到1

  //參數(shù)為 是否包含循環(huán) 為true時(shí) 返回值是循環(huán)總區(qū)間的已用百分比 若為無(wú)限循環(huán) 返回值為0

  _tweener.ElapsedPercentage(true);

  //8)動(dòng)畫是否在活動(dòng)

  _tweener.IsActive();

  // 9)是否是反向動(dòng)畫

  _tweener.IsBackwards();

  //10)動(dòng)畫是否完成

  _tweener.IsComplete();

  //11)是否以初始化

  _tweener.IsInitialized();

  //12)是否正在播放

  _tweener.IsPlaying();

  //13)返回循環(huán)次數(shù), 無(wú)限循環(huán)為Infinity

  _tweener.Loops();

  }

  //協(xié)程方法

  private IEnumerator Wait()

  {

  _tweener = transform.DOMove(Vector3.one, 2);

  // 1)等待動(dòng)畫執(zhí)行完

  yield return _tweener.WaitForCompletion();

  //2)等待指定的循環(huán)次數(shù)

  //參數(shù)為執(zhí)行次數(shù),等待傳入的循環(huán)次數(shù)后,繼續(xù)執(zhí)行

  //若是傳入的次數(shù)大于動(dòng)畫的循環(huán)次數(shù) 則在動(dòng)畫結(jié)束時(shí)繼續(xù)執(zhí)行

  yield return _tweener.WaitForElapsedLoops(2);

  //3)等待動(dòng)畫被殺死

  yield return _tweener.WaitForKill();

  //4)等待動(dòng)畫執(zhí)行指定時(shí)間

  //參數(shù)為時(shí)間,動(dòng)畫執(zhí)行傳入的時(shí)間之后或動(dòng)畫執(zhí)行完畢,繼續(xù)執(zhí)行

  yield return _tweener.WaitForPosition(0.5f);

  //5)等待動(dòng)畫回退

  // 以下情況會(huì)繼續(xù)執(zhí)行函數(shù)

  //使用DORestart重新播放時(shí)

  //使用Rewind倒播動(dòng)畫完成時(shí)

  //使用DOFlip翻轉(zhuǎn)動(dòng)畫完成時(shí)

  //使用DOPlayBackwards反向播放動(dòng)畫完成時(shí)

  yield return _tweener.WaitForRewind();

  // 6)等待Start執(zhí)行后繼續(xù)執(zhí)行

  yield return _tweener.WaitForStart();

  }

 }

 更多關(guān)于ITUnity培訓(xùn)的問(wèn)題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓(xùn)服務(wù)經(jīng)驗(yàn),采用全程面授高品質(zhì)、高體驗(yàn)培養(yǎng)模式,擁有國(guó)內(nèi)一體化教學(xué)管理及學(xué)員服務(wù),助力更多學(xué)員實(shí)現(xiàn)高薪夢(mèng)想。

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
能不能幫我打開(kāi)抖音小店店鋪呢怎么弄

抖音小店是近年來(lái)非?;鸨囊粋€(gè)網(wǎng)絡(luò)業(yè)務(wù),也是提供了很多商業(yè)機(jī)會(huì)的平臺(tái)。對(duì)于一個(gè)創(chuàng)業(yè)者而言,開(kāi)設(shè)抖音小店是一個(gè)不錯(cuò)的選擇。但是,許多小店...詳情>>

2023-10-08 15:01:21
藍(lán)v抖音小店怎么開(kāi)通店鋪

藍(lán)v抖音小店是一個(gè)非常熱門的電商平臺(tái),它可以讓賣家在抖音上開(kāi)設(shè)自己的店鋪,從而出售自己的商品。隨著抖音的不斷發(fā)展壯大,越來(lái)越多的賣家希...詳情>>

2023-10-08 14:51:53
抖音小店怎么更改類目名稱

抖音小店是現(xiàn)在非?;馃岬囊环N網(wǎng)店形態(tài),許多小生意也從中獲得了收益。但是隨著經(jīng)營(yíng)時(shí)間的增長(zhǎng),小店也需要對(duì)自己的類目名稱進(jìn)行更改,因?yàn)檫@可...詳情>>

2023-10-08 14:46:50
抖音小店怎么合作賣貨

抖音小店作為一種新型的電商形式,近年來(lái)在國(guó)內(nèi)市場(chǎng)上逐漸火熱起來(lái),成為了許多年輕人賺取收入的途徑之一。因?yàn)槎兑糇鳛楫?dāng)前最流行的短視頻平臺(tái)...詳情>>

2023-10-08 14:35:49
抖音小店運(yùn)營(yíng)和天貓區(qū)別是什么呢

隨著社交媒體的廣泛應(yīng)用,抖音小店開(kāi)始走進(jìn)人們的生活,成為越來(lái)越多人的購(gòu)物選擇之一。而天貓作為國(guó)內(nèi)最具影響力的電商平臺(tái)之一,是許多電商從...詳情>>

2023-10-08 14:23:10