Unity---DOTween插件学习(3)---获取数据、协程、路径动画
目錄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)---获取数据、协程、路径动画的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wundergraph 又一个即将开源强
- 下一篇: css实现对勾