Dotween常用方法API詳解

 

其他Dotween博文
Dotween Path 路徑動畫使用方法詳解
Dotween常見問題及使用方式

Dotween是unity裏非常常用的插件,但是很多人應該沒有仔細的閱讀過它的api,它實際有很多好用的方法,下面我就針對一些相對常用的方法,做下總結:

一、Unity常用組件拓展方法
(1) Transform拓展方法
1)Position
      1)改變世界座標
        移動方法,第一個參數是要移動到的目標點,不是移動這個向量的距離
        transform.DOMove(new Vector3(1, 1, 1), 2);
        只控制x軸上的移動,其他兩個方向同理
        transform.DOMoveX(1, 2);

      2)改變局部座標
        transform.DOLocalMove(new Vector3(1, 1, 1), 2);
        transform.DOLocalMoveX(1, 2);
 
2)Rotation
      1)世界旋轉
        旋轉到給定的值,改變的是歐拉角
        transform.DORotate(new Vector3(0, 90, 0), 2);
        旋轉到給定的值,改變的是四元數
        transform.DORotateQuaternion(new Quaternion(0.1f, 0.1f, 0.1f, 0.1f), 2);
        
      2)局部旋轉
        旋轉到給定的值,改變的是歐拉角
        transform.DOLocalRotate(new Vector3(0, 90, 0), 2);
        旋轉到給定的值,改變的是四元數
        transform.DOLocalRotateQuaternion(new Quaternion(0.1f, 0.1f, 0.1f, 0.1f), 2);
        
        在給定時間內,平滑的讓自身的z軸正方向指向目標點
        transform.DOLookAt(new Vector3(0, 0, 0), 2);
 
3) Scale
        同上面一樣,這裏改變物體的縮放到目標值
        transform.DOScale(new Vector3(2, 2, 2), 2);
        其他兩個軸向同理
        transform.DOScaleX(3, 2);
 
4) Punch
        第一個參數 punch:表示方向及強度
        第二個參數 duration:表示動畫持續時間
        第三個參數 vibrato:震動次數
        第四個參數 elascity: 這個值是0到1的

                            當爲0時,就是在起始點到目標點之間運動
                            不爲0時,會把你賦的值乘上一個參數,作爲你運動方向反方向的點,物體在這個點和目標點之間運動
        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);
 
以position爲例,elascity的取值是 0 到 1 的
elascity爲0時,物體就在起始點和目標點之間運動
elascity不爲0時,會自動計算,產生一個反向點,數值越大方向點離的越遠


5)Shake
        參數:持續時間,力量,震動,隨機性,淡出
        力量:實際就是震動的幅度,可以理解成相機施加的力的大小 使用Vector3可以選擇每個軸向不同的強度
        震動:震動次數
        隨機性:改變震動方向的隨機值(大小:0~180)
        淡出:就是運動最後是否緩慢移動回到原本位置
        transform.DOShakePosition(1, 5, 10, 50, true);
        transform.DOShakeRotation(3);
        transform.DOShakeScale(3);
 
6)Blend
       帶Blend名稱的方法,允許混合動畫
       原本同時執行兩個Move方法,只會執行最新的一個動畫命令
       例如:
        transform.DOMove(Vector3.one, 2);
        transform.DOMove(Vector3.one * 2, 2);
       結果是物體運動到了(2,2,2)座標上
       
       DOBlendableMoveBy方法有兩個特點
       1)允許多個同時執行
       例如:
        transform.DOBlendableMoveBy(new Vector3(1, 1, 1), 1);
        transform.DOBlendableMoveBy(new Vector3(-1, 0, 0), 1);
        假設其實點爲(0,0,0),最後動畫停止時的座標就是(0,1,1)
       2)它是增量動畫
        transform.DOBlendableMoveBy(new Vector3(1, 1, 1), 1);
        假設其實點爲(1,1,1),最後動畫停止時的座標就是(2,2,2)
        它的參數不是目標點,而是要移動的量
        
        以下三個函數同理
        transform.DOBlendableRotateBy()
        transform.DOBlendableScaleBy()
        transform.DOBlendablePunchRotation()
 
 
(2) Camera拓展方法
      1)調整屏幕視角的寬高比 第一個參數是寬高的比值
        camera.DOAspect(0.6f, 2);
        
      2)改變相機background參數的顏色
        camera.DOColor(Color.blue, 2);
        
      3)改變相機近切面的值
        camera.DONearClipPlane(200, 2);
        
      4)改變相機遠切面的值
        camera.DOFarClipPlane(2000, 2);
        
      5)改變相機FOV的值
        camera.DOFieldOfView(30, 2);
        
      6)改變相機正交大小
        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)相機震動
        相機震動效果 參數:持續時間,力量,震動,隨機性,淡出
        力量:實際就是震動的幅度,可以理解成相機施加的力的大小 使用Vector3可以選擇每個軸向不同的強度
        震動:震動次數
        隨機性:改變震動方向的隨機值(大小:0~180)
        淡出:就是運動最後是否緩慢移動回到原本位置
        camera.DOShakePosition(1, 10, 10, 50, false);
 
 
(3) Material拓展方法
      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)改變材質offset的值
        material.DOOffset(new Vector2(1, 1), 2);
        
      6)改變提供的shader屬性的名稱對應的Vector4值
        material.DOVector(new Vector4(0, 0, 0, 1), "_Color", 3);
        
      7)顏色混合
        跟位置混合動畫同理,可以同時執行而不干擾,產生混合在一起的顏色
        material.DOBlendableColor(Color.red, "_Color", 3);
 
漸變編輯器


(4) Text拓展方法
        頭三個都是常規方法,不多介紹了
        text.DOColor(Color.black, 2);
        text.DOFade(0, 2);
        text.DOBlendableColor(Color.black, 2);
        
        這個方法比較有意思
        是把第一個參數傳入的內容按照時間,一個字一個字的輸入到文本框中
        text.DOText("context", 2);
 
二、Dotween常用方法
(1) Sequence
        Sequence quence = DOTween.Sequence();
        
      1)添加動畫到隊列中
        quence.Append(transform.DOMove(Vector3.one, 2));
        
      2)添加時間間隔
        quence.AppendInterval(1);
        
      3)按時間點插入動畫
        第一個參數爲時間,此方法把動畫插入到規定的時間點
        以這句話爲例,它把DORotate動畫添加到此隊列的0秒時執行,雖然它不是最先添加進隊列的
        quence.Insert(0, transform.DORotate(new Vector3(0, 90, 0), 1));
        
      4)加入當前動畫
        Join會加入和讓動畫與當前正在執行的動畫一起執行
        如下兩行代碼,DOMove會和DOScale一起執行
        quence.Append(transform.DOScale(new Vector3(2, 2, 2), 2));
        quence.Join(transform.DOMove(Vector3.zero, 2));
        
      5)預添加動畫
        預添加 會直接添加動畫到Append的前面,也就是最開始的時候
        quence.Prepend(transform.DOScale(Vector3.one * 0.5f, 1));
        這裏需要特別說一下預添加的執行順序問題
        它這裏也採取了隊列的性質,不過,預添加與原本的的隊列相比是一個反向隊列
        例如:
         Sequence quence = DOTween.Sequence();
         quence.Append(transform.DOMove(Vector3.one, 2));
         quence.Prepend(transform.DOMove(-Vector3.one*2, 2));
         quence.PrependInterval(1);
         執行順序是 PrependInterval----Prepend-----Append
         就是最後添加的會在隊列的最頂端
        
      6)預添加時間間隔
        quence.PrependInterval(1);
        
    回調函數
        
       1)預添加回調
        quence.PrependCallback(PreCallBack);
        
       2)在規定的時間點加入回調
        quence.InsertCallback(0, InsertCallBack);
        
       3)添加回調
        quence.AppendCallback(CallBack);
 
(2) Tweener的設置
        TweenParams para = new TweenParams();

      1)設置動畫循環 
        第一個參數是循環次數  -1代表無限循環
        第二個參數是循環方式 
         Restart  重新開始  
         Yoyo   從起始點運動到目標點,再從目標點運動回來,這樣循環 
         Incremental   一直向着運動方向運動
        para.SetLoops(-1, LoopType.Yoyo);

      2)設置參數
        transform.DOMove(Vector3.one, 2).SetAs(para);
        
      3)設置自動殺死動畫
        transform.DOMove(Vector3.one, 1).SetAutoKill(true);
        
      4)from補間
        例如;
        transform.DOMove(Vector3.one, 2).From(true);
          From參數 isRelative(相對的):
           爲true,傳入的就是偏移量,即當前座標 + 傳入值 = 目標值
           爲falese,傳入的就是目標值,即傳入值 = 目標值
           
      5)設置動畫延時 
        transform.DOMove(Vector3.one, 2).SetDelay(1);
        
      6)設置動畫運動以速度爲基準
         例如:
         transform.DOMove(Vector3.one, 1).SetSpeedBased();
          使用SetSpeedBased時,移動方式就變成以速度爲基準
          原本表示持續時間的第二個參數,就變成表示速度的參數,每秒移動的單位數
        
      7)設置動畫ID
        transform.DOMove(Vector3.one, 2).SetId("Id");
        
      8)設置是否可回收
        爲true的話,動畫播放完會被回收,緩存下來,不然播完就直接銷燬
        transform.DOMove(Vector3.one, 2).SetRecyclable(true);

      9)設置動畫爲增量運動
          例如:
           transform.DOMove(Vector3.one, 2).SetRelative(true);
            SetRelative參數 isRelative(相對的):
            爲true,傳入的就是偏移量,即當前座標 + 傳入值 = 目標值
            爲falese,傳入的就是目標值,即傳入值 = 目標值
          
      10)設置動畫的幀函數
       例如:
        transform.DOMove(Vector3.one, 2).SetUpdate(UpdateType.Normal, true);
         第一個參數 UpdateType :選擇使用的幀函數
         UpdateType.Normal:更新每一幀中更新要求。 
         UpdateType.Late:在LateUpdate調用期間更新每一幀。 
         UpdateType.Fixed:使用FixedUpdate調用進行更新。 
         UpdateType.Manual:通過手動DOTween.ManualUpdate調用進行更新。
         第二個參數:爲TRUE,則補間將忽略Unity的Time.timeScale
       
 
(3) Ease 運動曲線的設置
        1)以Ease枚舉作爲參數
          例如:
          transform.DOMove(Vector3.one, 2).SetEase(Ease.Flash, 3, 0f);
         第二個參數 Amplitude(振幅):實際就是移動次數,起始點移動到目標算移動一次,再移動回來移動兩次
         第三個參數 period 值的範圍是 - 1~1
          值 > 0時,爲活動範圍的衰減值,活動範圍會由大變小
          值 = 0時,就是均勻的在起始座標和目標座標之間運動
          值 < 0時,會施加一個向目標座標的一個力,活動範圍一點點增大,最後逼近目標點
         這兩個參數只對Flash, InFlash, OutFlash, InOutFlash這四種曲線有用,其他的曲線起作用的就只有Ease枚舉參數
       
        2)使用AnimationCurve當作參數
          例如:
           transform.DOMove(Vector3.one * 2, 1).SetEase(curve);
          AnimationCurve 橫軸是時間,不過不是具體的時間,而是時間比例
          AnimationCurve 縱軸是倍數
          假設縱軸的值爲v,傳入DOMove的第一個參數endValue是e,起始點座標是s
          此物體最後動畫結束時的實際座標即爲 v* (e -s)+ s
          
         3)以回調函數爲參數
          例如:
           transform.DOMove(Vector3.one * 2, 1).SetEase(MyEaseFun);
           
           //返回值是運動距離的百分比 值應爲0~1之間,最後的值需爲1,不然停留的位置不會是目標位置
           private float MyEaseFun(float time, float duration, float overshootOrAmplitude, float period)
           {
               return time / duration;
           }
 
(4) 回調函數
      1)動畫完成回調
        transform.DOMove(Vector3.one, 2).OnComplete(() => { });
        
      2)動畫被殺死時回調
        transform.DOMove(Vector3.one, 2).OnKill(() => { });
        
      3)動畫播放時回調,暫停後重新播放也會調用
        transform.DOMove(Vector3.one, 3).OnPlay(() => { });
        
      4)動畫暫停時回調
        transform.DOMove(Vector3.one, 2).OnPause(() => { });
        
      5)動畫回退時回調
        以下情況會被調用
        使用DORestart重新播放時
        使用Rewind倒播動畫完成時
        使用DOFlip翻轉動畫完成時
        使用DOPlayBackwards反向播放動畫完成時
        transform.DOMove(Vector3.one, 2).OnRewind(() => { });
        
      6)只在第一次播放動畫時調用,在play之前調用
        transform.DOMove(Vector3.one, 2).OnStart(() => { });
        
      7)完成單個循環週期時觸發
        transform.DOMove(Vector3.one, 2).OnStepComplete(() => { });
      8)幀回調
        transform.DOMove(Vector3.one, 2).OnUpdate(() => { });
        
      9)在路徑動畫時,改變目標點時的回調,參數爲當前目標點的下標
        transform.DOMove(Vector3.one, 2).OnWaypointChange((value) => { });
 
(5) 動畫控制方法
      1)播放
        transform.DOPlay();
        
      2)暫停
        transform.DOPause();
        
      3)重播
        transform.DORestart();
        
      4)倒播,此方法會直接退回起始點
        transform.DORewind();
        
      5)平滑倒播,此方法會按照之前的運動方式從當前位置退回起始點
        transform.DOSmoothRewind();
        
      6)殺死動畫
        transform.DOKill();
        
      7)翻轉補間的方向
        transform.DOFlip();
        
      8)跳轉時間點
        第一個參數跳轉的時間點,第二個參數是跳轉後是否播放動畫
        transform.DOGoto(1.5f, true);
        
      9)反向播放動畫
        反向播放動畫,在動畫播放到一半時執行,會退回起始點,在一開始執行看不到效果是因爲,物體本身就在起始點
        transform.DOPlayBackwards();
        
      10)正向播放動畫
        正向播放動畫
        transform.DOPlayForward();
        
      11)TogglePause
        當暫停時,執行就繼續播放,播放時,執行就暫停
        transform.DOTogglePause();
 
(6) 獲取數據方法
  一、類方法
      1)返回所有暫停的動畫,沒有則返回null
        DOTween.PausedTweens();
        
      2)返回所有真正播放的動畫,沒有則返回null
        DOTween.PlayingTweens();
        
      3)獲取給定ID的數組
       例如:
       DOTween.TweensById("id", true);
        返回滿足條件的動畫數組
        第一個參數是動畫的ID
        第二個參數是是否只收集正在播放的動畫
        
      4)返回給定對象的數組
       例如:
       DOTween.TweensByTarget(transform, true);
         返回滿足條件的動畫數組
         第一個參數是播放動畫的對象
         例如:transform.DOMove(Vector3.one, 2); 第一個參數就傳入transform
              material.DOColor(Color.White, 2); 第一個參數就傳入材質對象material
         第二個參數是是否只收集正在播放的動畫
        
      5)收集傳入的對象是否有動畫在活動
       例如:
       DOTween.IsTweening(transform);
        第一個參數爲檢測的對象
        第二個參數爲是否檢測動畫在播放狀態
         爲true時,給定對象在播放狀態時 返回true
         爲false時,只檢測給定對象是否有動畫(在pause狀態時也算)有則返回true
        
      6)正在播放的動畫的總數,目前處於延遲播放狀態的動畫也算
        DOTween.TotalPlayingTweens();
        
  二、實例方法
      _tweener = transform.DOMove(Vector3.one, 2)

      1)表示動畫執行時間的屬性,可讀可寫
        _tweener.fullPosition = 1;
        
      2)表示動畫執行完的次數
       _tweener.CompletedLoops()
        
      3)獲取動畫的延遲時間
        _tweener.Delay();
        
      4)獲取動畫的持續時間
        參數爲true 表示計算循環的時間,無限循環爲Infinity
        _tweener.Duration(false)
        
      5)動畫已播放的時間
        參數爲true 表示計算循環的時間
        _tweener.Elapsed()
        
      6)返回動畫進度的百分比
        起始點爲0 目標點爲1 當yoyo循環模式下,值會從0變到1再從1變到0
        _tweener.ElapsedDirectionalPercentage()
        
      7)返回動畫區間已用的百分比
        單次循環的數值爲0到1
        參數爲 是否包含循環 爲true時 返回值是循環總區間的已用百分比 若爲無限循環 返回值爲0
        _tweener.ElapsedPercentage(true)
        
      8)動畫是否在活動
        _tweener.IsActive();
        
      9)是否是反向動畫
        _tweener.IsBackwards();
        
      10)動畫是否完成
        _tweener.IsComplete();
        
      11)是否以初始化
        _tweener.IsInitialized();
        
      12)是否正在播放
        _tweener.IsPlaying();
        
      13)返回循環次數,  無限循環爲Infinity
        _tweener.Loops();
 
(7) 攜程方法
    private IEnumerator Wait()
    {
        _tweener = transform.DOMove(Vector3.one, 2);
        
      1)等待動畫執行完
        yield return _tweener.WaitForCompletion();
        
      2)等待指定的循環次數
        參數爲執行次數,等待傳入的循環次數後,繼續執行
        若是傳入的次數大於動畫的循環次數 則在動畫結束時繼續執行
        yield return _tweener.WaitForElapsedLoops(2);
        
      3)等待動畫被殺死
        yield return _tweener.WaitForKill();
        
      4)等待動畫執行指定時間
        參數爲時間,動畫執行傳入的時間之後或動畫執行完畢,繼續執行
        yield return _tweener.WaitForPosition(0.5f);
        
      5)等待動畫回退
        以下情況會繼續執行函數
        使用DORestart重新播放時
        使用Rewind倒播動畫完成時
        使用DOFlip翻轉動畫完成時
        使用DOPlayBackwards反向播放動畫完成時
        yield return _tweener.WaitForRewind();
        
      6)等待Start執行後繼續執行
        yield return _tweener.WaitForStart();
    }
————————————————

引用:https://blog.csdn.net/zcaixzy5211314/article/details/84886663

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章