Unity---DOTween插件學習(3)---獲取數據、協程、路徑動畫


本文及系列參考於Andy老師的DOTween系列
歡迎大家關注Andy老師

10、獲取數據

類方法

返回所有暫停的動畫,沒有則返回null

var list = DOTween.PausedTweens();

返回所有真正播放的動畫,沒有則返回null

var list = DOTween.PlayingTweens();

獲取給定ID的數組

var list = DOTween.TweensById("id", true);
//第一個參數是動畫的ID
//第二個參數是是否只收集正在播放的動畫

返回給定對象上播放或緩存的動畫數組

var list = DOTween.TweensByTarget(transform, true);
//第一個參數是播放動畫的對象
//例如:transform.DOMove(Vector3.one, 2); 第一個參數就傳入transform
//material.DOColor(Color.White, 2); 第一個參數就傳入材質對象material
//第二個參數是是否只收集正在播放的動畫

檢測傳入的對象是否有動畫在活動

bool isTween = DOTween.IsTweening(transform);
//第一個參數為檢測的對象
//第二個參數為是否檢測動畫在播放狀態
//為true時,給定對象在播放狀態時 返回true
//為false時,只檢測給定對象是否有動畫(在pause狀態時也算)有則返回true

正在播放的動畫的總數,目前處於延遲播放狀態的動畫也算

int allPlaying = DOTween.TotalPlayingTweens();

**實例方法** Tweener _tweener = transform.DOMove(Vector3.one, 2);

表示動畫已經執行時間的屬性,可讀可寫

_tweener.fullPosition = 1;

表示動畫已經執行的次數

_tweener.CompletedLoops();

獲取動畫的延遲時間

_tweener.Delay();

獲取動畫的持續時間

//參數為true 表示計算循環的時間,無限循環為Infinity
_tweener.Duration(false);

動畫已播放的時間

//參數為true 表示計算循環的時間
_tweener.Elapsed();

返回動畫進度的百分比

//起始點為0 目標點為1 當yoyo循環模式下,值會從0變到1再從1變到0
_tweener.ElapsedDirectionalPercentage();

返回動畫區間已用的百分比

//單次循環的數值為0到1
//參數為 是否包含循環 為true時 返回值是循環總區間的已用百分比 若為無限循環 返回值為0
_tweener.ElapsedPercentage(true);

動畫是否在活動

_tweener.IsActive();

是否是反向動畫

_tweener.IsBackwards();

動畫是否完成

_tweener.IsComplete();

是否以初始化

_tweener.IsInitialized();

是否正在播放

_tweener.IsPlaying();

返回循環次數,無限循環為Infinity

_tweener.Loops();

11、攜程

private Tweener _tweener;
private void Start()
{
    _tweener = transform.DOMove(Vector3.one, 2);
    StartCoroutine(Wait());
}

private IEnumerator Wait()
{
	yield return ;
}

等待動畫執行完

yield return _tweener.WaitForCompletion();

等待指定的循環次數

//參數為執行次數,等待傳入的循環次數后,繼續執行
//若是傳入的次數大於動畫的循環次數 則在動畫結束時繼續執行
yield return _tweener.WaitForElapsedLoops(2);

等待動畫被殺死

yield return _tweener.WaitForKill();

等待動畫執行指定時間

//參數為時間,動畫執行傳入的時間之后或動畫執行完畢,繼續執行
yield return _tweener.WaitForPosition(0.5f);

等待動畫回退

//以下情況會繼續執行函數
//使用DORestart重新播放時
//使用Rewind倒播動畫完成時
//使用DOFlip翻轉動畫完成時
//使用DOPlayBackwards反向播放動畫完成時
yield return _tweener.WaitForRewind();

等待Start執行后繼續執行

yield return _tweener.WaitForStart();

12、路徑動畫

DOPath的一個使用小案例
在面板中創建如圖的Cube,並如圖擺放

給最上面那個Cube掛載腳本,把下面所有Cube賦值給腳本屬性。

public class CubeText : MonoBehaviour
{
    public Transform[] pointList;
    
    private void Start()
    {
        var position = pointList.Select(u => u.position).ToArray();

        transform.DOPath(position, 5, PathType.Linear).SetOptions(true).SetLookAt(new Vector3(0, 0, 0);
    }
}

路徑動畫中DOPath的六個參數

//參數1 waypoints: 是提供路徑上點的坐標,需要按順序添加進數組
//參數2 duration:路徑動畫的整體持續時間
//參數3 pathType:路徑類型(就是點於點之間路徑連線的生成方式)
      //Linear:直線
      //CatmullRom:曲線
//參數4 pathModel: 路徑模式(用於確定正確的LookAt方向)
      //Ignore:忽略此參數和設置的LookAt參數
      //Full3D:在3d場景下,代表物體可以看向任何方向
      //TopDown2D:代表物體只能上下旋轉,看向物體
      //Sidescroller2D:代表物體只能左右旋轉看向物體
//參數5 resolution:路徑分辨率(默認10),代表路徑點之間的曲線由多少個點構成,也就是點越多,曲線就越圓,此參數在直線路徑類型下無效
//參數6 gizmoColor:在Scene視圖中,生成的路徑曲線的顏色

SetOptions(closePath, lockPosition, lockRotation)

//參數1 closePath:是否是封閉路徑,設為true的話,會形成閉環,最后運動回起點
//參數2 lockPosition:鎖定位置,參數為軸向,例如,填入AxisConstraint.X的話,橫向的位移將被鎖定,物體只能在其他方向上移動
//參數3 lockRotation:鎖定旋轉,參數為軸向,和鎖定位置同理,鎖定的軸向不能旋轉

SetLookAt()

//參數1 closePath:是否是封閉路徑,設為true的話,會形成閉環,最后運動回起點
//參數2 lockPosition:鎖定位置,參數為軸向,例如,填入AxisConstraint.X的話,橫向的位移將被鎖定,物體只能在其他方向上移動
//參數3 lockRotation:鎖定旋轉,參數為軸向,和鎖定位置同理,鎖定的軸向不能旋轉
//參數4 lookAhead參數:取值范圍0-1


0:看向路徑的前方
0.99:看向路徑的后方
(1)closePath為false (運動最后,物體的朝向移動是路徑的運動方向的前方)
lookAhead = 0:目標會沿着路徑看向前方
lookAhead != 0:目標會按照參數,決定開始運動時的朝向,但是運動期間會勻速轉動朝向,最后朝向會轉回路徑前方的朝向

(2)closePath為true(開始時確定方向后就不會變化了)
lookAhead = 0:目標會沿着路徑看向前方
lookAhead >0 && lookAhead <1:一直保持開始時的方向(即如上圖所示)
lookAhead = 1:這個時候,SetLookAt沒有效果,即物體不會改變朝向

這里所說的朝向是相對於運動路徑的朝向

路過的大神給出的學術性的解釋:
lookAhead 參數的意思就是 看前看的偏移量

假設整個路徑normalize. 即開始點為0,結束點為1. 走到路程的一半即為0.5.

所以如果lookAhead = 0.5 時, 假設當前Transform行走進程到 0.1的位置,則會 LookAt 行走進程 0.6的位置.

如果closePath=true, 則 lookAtPercent = Mathf.Repeat(movePercent + lookAhead, 1);
否則closePath=false, 則 lookAtPercent = Mathf.Clamp01(movePercent + lookAhead);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM