static DOTween.To(getter, setter, to, float duration) getter:lambda表達式 ()=> myValue setter:lambda表達式 (x)=> myValue = x to:最終值 duration:補間時長 例如: DOTween.To(()=> myVector, x=> myVector = x, new Vector3(3,4,8), 1); DOTween.To(()=> myFloat, x=> myFloat = x, 52, 1);
移動的方法用法相似只有兩個經常使用的分別是DOMove()和DOLocalMove(),主要是對世界座標和局部座標區分的,固然你也能夠對單個軸進行動畫,好比上面的平移操做可使用DOLocalMoveX();html
旋轉經常使用的就是DORotate(),DOLocalRotate()旋轉三維向量
DORotateQuaternion()旋轉四元數
遊戲中經常使用的DOLookAt(),比本身寫差值方便不少,具體參數能夠查看官方例子git
public RectTransform panelTransform; private bool isIn = false; void Start() { //panelTransform.DOMove(new Vector3(0, 0, 0), 1);//讓paneltransfrom從當前位置 動畫到 0,0,0的位置 時間爲1s (修改的世界座標) Tweener tweener = panelTransform.DOLocalMove(new Vector3(0, 0, 0), 0.3f);//默認動畫播放完成會被銷燬 //Tweener對象保存這個動畫的信息 每次調用do類型的方法都會建立一個tweener對象,這個對象是dotween來管理 tweener.SetAutoKill(false);// 把autokill 自動銷燬設置爲false tweener.Pause();//暫停動畫播放 } public void OnClick() { if (isIn == false) { panelTransform.DOPlayForward();//前放 isIn = true; } else { //讓panel離開屏幕 panelTransform.DOPlayBackwards();//倒放 isIn = false; } }
這個須要注意,ui和3d物體不同,他的移動是控制RectTransform,並且ui的座標都是局部座標,這裏咱們由於dotween每次都會自動銷燬,對咱們作返回很差,因此使用SetAutoKill(false)不時它銷燬,可是若是放在update方法的話每次執行都會生成一個動畫存放在tweener物體身上,由於不會自動銷燬因此咱們須要將它放在start裏面生成,而後控制動畫向前播放和向後播放就能夠了。
github
transform.localScale = Vector3.zero; transform.DOScale(1, 1f);
void Start () { //參數分別是震動時間和相機位移的向量,震動次數和隨機方向,好比我不想讓先後動,就把z軸設置爲0 transform.DOShakePosition(1,new Vector3(3,3,0),10,90); }
//第一個參數 ,抖動的方向,例如我這裏是從當前位置向上抖動到1的位置 //第二個參數,抖動的時間 //第三個參數,抖動的次數 //第四個參數 0-1之間的數,表明回彈的幅度, 假如爲零從最高點當前位置+Vector3.up回來的時候只會回到當前位置,若是爲一就會回到當前位置-Vector3.up的位置 transform.DOPunchPosition(Vector3.up, 2, 2, 0.5f);
普通UI的顏色函數
private Text text; // Use this for initialization void Start () { text = GetComponent<Text>(); //設置顏色 //text.DOColor(Color.red, 2); //設置透明度 text.DOFade(1, 3); }
3D物體咱們一般使用材質球控制顏色和透明度工具
Material ma = this.GetComponent<MeshRenderer>().material; ma.DOColor(new Color(0.5f, 0.5f, 0.5f, 1), 2);//注意當前材質的shader必須有_Color屬性,若是沒有或者名字不對會報錯,須要給其餘的賦值 //例如: ma.DOColor(new Color(0.5f, 0.5f, 0.5f, 1),"_TintColor", 2);//不知道名字的能夠經過編輯shader查看
這個主要是用在兩種同時須要的相同動畫進行融合效果
例如
下面這種狀況下dotween會忽略第一行動畫效果直接執行最終的動畫效果oop
transform.DOMove(new Vector3(0,1,1),2); transform.DOMove(new Vector3(1,2,0),2);
這時候就須要用到咱們的Blend動畫融合,DOBlendableMoveBy()這個方法會將這兩個動畫的參數進行融合計算出最終的座標當成一個動畫進行融合,固然你也能夠經過計算兩個點的向量計算最終點的位置使用DOMove()方法進行移動.動畫
transform.DOBlendableMoveBy(new Vector3(0,1,1),2); transform.DOBlendableMoveBy(new Vector3(1,2,0),2);
void Start () { transform.DOMoveX(5, 3).From(); //默認是從當前位置運行到目標位置 加上From()方法之後表示從目標位置移動到當前位置 transform.DOMoveX(5, 4).From(true); }
from方式就是和直接使用是反方向的,好比第一句代碼不加from方法是想從當前位置運動到5的位置,時間三秒,加上以後就是從5運動到當前位置時間3秒,from方法裏面有一個參數,默認爲false就是直接從目標位置運動到當前位置,若是改成ture就是相對座標,也就是從距離5的位置運動到目標位置,假如當前位置是1,就是從1+5也就是6的位置運動到1的位置。ui
修改SetEase()這個方法裏面的Ease便可
OnComplete是動畫結束須要觸發的事件,能夠跟在任何動畫後面this
void Start () { Tweener tweener = transform.DOLocalMoveX(0, 2); tweener.SetEase(Ease.OutBounce);//動畫曲線 tweener.OnComplete(OnTweenComplete);//動畫結束事件 tweener.SetLoops(2);//動畫循環次數 } void OnTweenComplete() { Debug.Log("動畫播放完成了"); }
OnComplete();//綁定事件的函數 Onkill();//動畫被銷燬的時候調用 OnPlay();//動畫播放的時候調用 OnPause();//動畫暫停的時候調用 OnRewind();//動畫被重置的時候 OnStart();//動畫被播放的時候(只會調用一次)
若是想執行完第一個以後再執行第二個是不可使用兩行代碼直接作動畫的,dotween會默認執行第二個動畫,因此咱們想要再一個動畫執行完成以後再執行第二個甚至第三個動畫…這樣就要使用OnComplete()或者隊列保存動畫列表挨個執行,通常隊列是調用最方便的,OnComplete()在執行超過兩個動畫的拼接以後會出現莫名錯誤spa
private void SizeTween () { Sequence quence = DOTween.Sequence(); quence.Append( damageText.rectTransform.DOScale(new Vector3(1.5f,1.5f,1.5f),0.3f)); quence.AppendInterval(1);//兩個動畫之間的延時 quence.Append(damageText.rectTransform.DOScale(new Vector3(1, 1, 1), 1)); }
Dotween經常使用方法詳解
http://www.javashuo.com/article/p-sdxskzxl-bz.html
Dotween Path 路徑動畫使用方法詳解
http://www.javashuo.com/article/p-bzggofax-bz.html
MoveEffectTool工具Github地址
https://github.com/BlueMonk1107/MoveEffectTool
Dotween Ease效果演示地址
http://robertpenner.com/easing/easing_demo.html