日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Unity---DOTween插件学习(3)---获取数据、协程、路径动画

發(fā)布時間:2023/12/13 综合教程 54 生活家
生活随笔 收集整理的這篇文章主要介紹了 Unity---DOTween插件学习(3)---获取数据、协程、路径动画 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄10、獲取數(shù)據(jù)11、攜程12、路徑動畫

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

10、獲取數(shù)據(jù)

類方法

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

var list = DOTween.PausedTweens();

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

var list = DOTween.PlayingTweens();

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

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

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

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

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

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

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

int allPlaying = DOTween.TotalPlayingTweens();

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

表示動畫已經(jīng)執(zhí)行時間的屬性,可讀可寫

_tweener.fullPosition = 1;

表示動畫已經(jīng)執(zhí)行的次數(shù)

_tweener.CompletedLoops();

獲取動畫的延遲時間

_tweener.Delay();

獲取動畫的持續(xù)時間

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

動畫已播放的時間

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

返回動畫進度的百分比

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

返回動畫區(qū)間已用的百分比

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

動畫是否在活動

_tweener.IsActive();

是否是反向動畫

_tweener.IsBackwards();

動畫是否完成

_tweener.IsComplete();

是否以初始化

_tweener.IsInitialized();

是否正在播放

_tweener.IsPlaying();

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

_tweener.Loops();

11、攜程

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

private IEnumerator Wait()
{
	yield return ;
}

等待動畫執(zhí)行完

yield return _tweener.WaitForCompletion();

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

//參數(shù)為執(zhí)行次數(shù),等待傳入的循環(huán)次數(shù)后,繼續(xù)執(zhí)行
//若是傳入的次數(shù)大于動畫的循環(huán)次數(shù) 則在動畫結束時繼續(xù)執(zhí)行
yield return _tweener.WaitForElapsedLoops(2);

等待動畫被殺死

yield return _tweener.WaitForKill();

等待動畫執(zhí)行指定時間

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

等待動畫回退

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

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

yield return _tweener.WaitForStart();

12、路徑動畫

DOPath的一個使用小案例
在面板中創(chuàng)建如圖的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的六個參數(shù)

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

SetOptions(closePath, lockPosition, lockRotation)

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

SetLookAt()

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


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

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

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

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

假設整個路徑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);

總結

以上是生活随笔為你收集整理的Unity---DOTween插件学习(3)---获取数据、协程、路径动画的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。