DoTween學習筆記


using DG.Tweening;
 
Tweener
首先dotween在游戲剛開始運行時會默認進行一次初始化
DOTween.Init();
如果為了有更好的效率,可以手動控制最大同時進行dotween動作的執行數量,
DOTween.Init(true,true,LogBehavior,Verbose).SetCapacity(200,10);  //200個是tween補間動作,10是squence
 
有三種方式創建tweener動作
1: DOTween.To(getter,setter,to,float duration)
getter, 數值補間動作返回值   setter,數值補間動作的設置值, to 是目標的數值, duration是補間動作的時長
 
getter,和setter的變量一致, 利用lambda表達式來設置
()=>變量A ;  x=>變量A=x
 
如:  float myFloat;   //定義一個float
 
void Start()
{
DOTween.To(()=>myFloat, x=>myFloat=x, 10f,1f);   //讓myfloat在一秒內,從myfloat當前值過度到10;
}
 
  DOTween.To(setter,from, to,float duration)    //另一種寫的方法, 只寫setter,定義 數值的開始和結束值
 
void Start()
{
DOTween.To(x=>myFloat=x, -10f,10f,1f);   //讓myfloat在一秒內,從-10過度到10;
}
 
此外還有DOTween.Punch();   //搖晃數值到初始值
//方法原型  
public static TweenerCore<Vector3, Vector3[], Vector3ArrayOptions> Punch(DOGetter<Vector3> getter, DOSetter<Vector3> setter, Vector3 direction, float duration, int vibrato = 10, float elasticity = 1);

//參數1:getter 參數2:setter 參數3:enPos 參數4:duration時間 參數4:晃動的次數 參數5:晃動的幅度
DOTween.Punch(() => myValue, x => myValue = x, new Vector3(100, 100, 100), 3,1,100);

 
DOTween.shake();   //顫抖數值
 
DOTween.ToArray()     //數值集合間過度
如 
Vector3[] endValues = new[] { new Vector3(1,0,1), new Vector3(2,0,2), new Vector3(1,4,1) };
float[] durations = new[] { 1, 1, 1 };
DOTween.ToArray(()=> myVector, x=> myVector = x, endValues, durations);
 
DOTween.ToAlpha()    顏色alpha過度
DOTween.ToAxis();      過度變換 vector3中的某一軸數值
如:
DOTween.ToAxis(()=> myVector, x=> myVector = x, 3, 1);   //始終變換x軸的數值到3,在一秒內
 
DOTween.ToAxis(()=> myVector, x=> myVector = x, 3, 1, AxisConstraint.Y);   //1秒內變換myVector 到(myVector.x,3,myVector.z)
 
 
 
2: 組件后綴形式    (特點是前綴加DO  :DOMove  ,DOScale)
tranform.DOMove(targetVector3, durationTime, isSnap);   //這是從當前位置值移動到目標值
tranform.DOMove(targetVector3, durationTime, isSnap).From();  //這是從targetVector3
值作為起點,移動到當前位置值
 
tranform.DoMove和rigidBody.DoMove.  功能相同;都是移動到目標距離
3 :針對不同組件的屬性數值有對應的dotween補間動作值
 
如:audiosource.DOFade(targetVolume,durationTime);//是將聲音值過度到對應值
 
 
sequence 
就像動畫編輯器一樣,在時間軸上布置dotween 動作
布置動作的API有 Append (tweener) AppendCallBack(方法)   
AppendInterval(間隔時間)序列結尾增加間隔時間      
以及PreAppend(tweener) 開頭位置 插入 一個tweener
 PreAppendInterval (time)   開頭位置插入一個空隙時間  
 
Insert(插入時間,tweener)  無視序列順序, 同步進行 
InsertCallBack();
 
sequence的總時間 sequence.Duration();
 
如 void Start()
{
Sequence mySequence=DOTween.Sequece();  //定義一個sequence
mySequence.Append(transform.DoMoveX(3f,1f));   //x軸一秒內移動到3
mySequence.AppendInterval(2f);  //延遲2秒
 
mySequence.AppendCallback(()=>Debug.log("2秒后.."));  //兩秒后調用一個回調函數
 
mySequence.PreAppend(tranform.DoScale((5f,5f,5f),1f));  //開頭插入1秒內一個縮放到(5,5,5)的補間動作
mySequence.PreAppendInterval(1f);//序列開頭插入1秒的等待時間
 
mySequence.Insert( 2f, Renderer.Material.DoColor(Color.Green,5f) );   //在序列第二秒插入一個並行的補間動作: 5秒內材質變換成綠色;
}
 
 
 
Chained Setting   代碼鏈式設置    tweener后可以跟隨無限個以下方法
如: myTweener.SetEase().SetRelative(true).OnComplete()......;
 
Tweener.SetAs(tweener);   復制設置數值到新的tweener
.SetAutoKill(false)  結束時禁止銷毀    適用於經常使用的情況
.SetEase(Ease.Liner)  過度方式
.SetLoop(int 次數,LoopType)
.SetRecycle()   重復利用   不同於SetAutoKill,它會被其他tweener發起者調用
.SetRelative();   相對數值,結束值變成了開始值+結束值  如(1,1f) 移動到1,relative為true后 變成 移動當前數值+1
.SetUpdate(UpdateType, bool isIndenpendant);  update模式, 以及是否受unityENgine的timescale影響  默認false  受影響    盡量不用 fixed 一旦 timescale為0,就沒有補間動畫
 
Chained Callbacks
.OnComplete(方法)   補間動畫結束調用方法
.OnKill()
.OnPlay()
.OnPause()
.Rewind()
.OnStart()
.OnUpdate()
OnWayPointChange()
.OnStep();
 
特殊后綴
.From(bool isRelative)   isRelative 真時, 起始位置為 endPos +StartPos
.SetDelay()
.SetSpeedBased  速度  需要 SetEasy.liner   
 
 
 
字幕的漸顯效果
 
string zimu;
DOTween.TO(()=>zimu,x=>zimu=x, "要顯示的台詞",durationTime).setOption(true,scrambleMode)  ;     //是否使用richtext,以及混亂變換字符
 
 把補間動作設置內容保存成對象,  用setAs(),來調用,方便全局調試
 
TweenParams tParms = new TweenParams().SetLoops(-1).SetEase(Ease.OutElastic);
// Apply them to a couple of tweens
transformA.DOMoveX(15, 1).SetAs(tParms);
transformB.DOMoveY(10, 1).SetAs(tParms);
 
控制補間動畫
1
DOTween.pauseAll();  //停止所有補間動畫
DOTween.Pause(id) ;//停止制定id的補間動畫    id設置     tweener.SetId(object);
DoTWeen.Pause(組件)  //停止組件上的所有補間動畫
 
2
tweener.Pause();
 
3
myTransform.DOPause();    //組件快捷方式前綴加DO
 
 
所有控制補間動畫的API    (組件后綴名稱前綴加DO)     如DOTween.Pause(id)   myTransform.DOPause();
 
Complete/ALL //立即播放到結尾
Flip/All  //反轉播放順序
 
Play/All 
Pause/all
 
PlayForward/All
PlayBackward/all
 
Goto/all   //在某處時間播放
 
Kill/all   //立即銷毀tweener ,即使setAutoKill(false)
 
Restart//all
Rewind/all    //和restart 區別是 rewind起始位置不播放
 
TogglePause/all   //play和pause狀態間切換
 
根據狀態獲得tweener
 
DOTween.PausedTweens();  //獲得所有暫停的tweener
 
DOTween.PlayingTweens();
 
DOTween.TweenById(object id, bool playingOnly=false);
 
DOTween.TweenByTarget(object target,bool playingOnly=false) //根據組件獲得其tweener
 
DOTween.IsTweening(object idor Target) :bool   //目標是否tweening
 
DOTween.TotalPalyingTweens():int   //全部正在播放的tweener個數
 
tweener實例的狀態
 
myTweener.fullPosition   //全部播放的時間  包括循環和延遲
 
myTweener.completedLoops  //以及循環的次數
myTweener.Delay();   //獲得延遲的時間    myTweener.SetDelay(2f)  是指延遲的時間
 
myTweener.Elapsed(bool includeLoops=true);  //已經播放過的時間
.ElapsedPercentage();
myTweener.Duration(bool includeLoops=true);   //補間動畫的時長,不包括延遲的時間
 
myTweener.IsActive();
myTweener.IsBackWard();
myTweener.IsComplete()
myTweener.IsPlaying()
myTweener.loops();
 
 
異步協程
yield return myTween.WaitForCompletion();  //等待tweener結束
 
yield return myTween.WaitForElapsedLoops(2) //等待兩次循環后
 
WaitForKill()  //等待銷毀后
 
waitForPosition(0.5f)  //等待時間位置在0.5秒后
 
waitForRewind //等待重播
waitForStart()  //等待開始    有延遲的情況
 
 
改變tweener的動畫起始和結束值
 
tweener.ChangeEndValue(newEndValue,float duration=-1,bool keepStartValue)  //keepStartValue 為真時,當前值設為開始值  ,duration值大於0,則重設補間時間
 
tweener.ChangeStartValue(newStartValue,float duration=-1)
 
tweener.ChangeValue(newStartValue,newEndValue,float duration=-1);
 
 
DOTVirtual    實用的方法
 
DOTVirtual.Float(float from,float to,float durationTime, Callback);
 
DOTVirtual.Float(-10f,10f,1f,x=>Debug.log(x));     //一秒內從-10到10, 並每幀打印當前過度值
 
DOTVitual.DelayedCall(float delayTime, Callback, bool isIgoreTimeScale=true)   
DOTVitual.DelayedCall(1f,()=>Debug.log("1秒后"));   //延遲一秒后調用指定回調函數


免責聲明!

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



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