Unity---DOTween插件學習(1)---Transform、Material、Camera、Text、Sequence


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

介紹
在Unity Asset Store上搜索DOTween下載免費版。
Pro收費版就比免費版多了可視化功能,作用並不大。

添加引用 Using DG.Tweening;

DO開頭的方法:設置動畫的方法
Set開頭的方法:設置動畫屬性的方法
On開頭的方法:設置動畫的回調函數

1、Transform方法

Unity中添加一個Cube,並掛載這個腳本

Position

transform.DOMove(Vector3.one, 2);  //1.要移動的目標位置,2.移動的時間s
transform.DOMoveX(1, 2);  //只控制X軸方向上的移動
transform.DOLocalMove();  //改變局部坐標

Rotate

transform.DORotate(new Vector3(0,90,0), 2);  //旋轉
transform.DOLocalRotate();  
transform.DORotateQuaternion(new Quaternion(0.1f, 0.1f, 0.1f, 0.1f), 2);   //四元數旋轉
transform.DOLookAt(Vector3.one, 2); //Z軸正方向指向目標

Scale

transform.DOScale(Vector3.one * 2, 2);  //縮放到目標值
transform.DOScaleX(3, 2);  //縮放比例

Punch:類似彈跳功能

//參數1.punch 運動的方向和力的大小   
//參數2.duration 持續時間
//參數3.vibrato 震動的次數
//參數4.elascity 0-1的數,越大往反方向運動越多
transform.DOPunchPosition(new Vector3(0, 1, 0), 2, 5, 0.5f);
transform.DOPunchRotation();
transform.DOPunchScale();

Shake:左右亂震的效果

//參數1.持續時間   
//參數2.方向的力大小   
//參數3.震動次數   
//參數4.震動角度范圍   
//參數5.是否淡入淡出
transform.DOShakePosition(2, Vector3.one, 10, 90);
transform.DOShakeRotation();
transform.DOShakeScale();

Blend:混合動畫

//普通情況
transform.DOMove(Vector3.one, 2);
transform.DOMove(Vector3.one*2, 2);
//第二個會覆蓋第一個方法,物體運動到2,2,2


//Blend 混合
//DOBlendableMoveBy方法有兩個特點
//1.允許多個同時執行
transform.DOBlendableMoveBy(new Vector3(1, 1, 1), 1);
transform.DOBlendableMoveBy(new Vector3(-1, 0, 0), 1);
//假設其實點為(0,0,0),最后動畫停止時的坐標就是(0,1,1)

//2.它是增量動畫
transform.DOBlendableMoveBy(new Vector3(1, 1, 1), 1);
//假設其實點為(1,1,1),最后動畫停止時的坐標就是(2,2,2),它的參數不是目標點,而是要移動的量

2、Material方法

Unity中添加一個Material,並掛載這個腳本

改變顏色

material.DOColor(Color.red,"_TintColor", 2);  
//參數2默認 改變shader中_Color的值,但如果沒有這個屬性,再改變就會報錯。
//所以用之前看一下Color的名字是不是 _Color

改變透明度alpha

material.DOFade(0,"_TintColor", 2);
//1.透明度   2.color屬性名   3.時間

材質顏色漸變

//顏色漸變,但是並沒有改變
//可以直接在屬性腳本中設置Gradient的內容
public Gradient gradient;  //漸變編輯器
		material.DOGradientColor(gradient, "_TintColor", 2);

漸變編輯器

改變材質offect的值

material.DOOffset();  //類似用多個貼圖實現動畫的功能,但一般不怎么會用這個方法

改變提供的shader屬性的名稱對應的Vector4值

material.DOVector(Color.clear,"_TintColor",2);

材質顏色混合(和位置混合道理相同)

material.DOColor(Color.red,"_TintColor",2);  
material.DOColor(Color.yellow, "_TintColor",2);  //第二個會覆蓋第一個

material.DOBlendableColor(Color.red, "_TintColor", 2);
material.DOBlendableColor(Color.yellow, "_TintColor", 2); //混合

3、Camera方法

Unity中添加一個Camera,並掛載這個腳本

改變屏幕視角寬高比

camera.DOAspect(0.5f,2);  //1.相機的寬/高

改變相機background參數的顏色

camera.DOColor(Color.red, 2);

改變相機近切面的值

camera.DONearClipPlane(200, 2);

改變相機遠切面的值

camera.DOFarClipPlane(2000, 2);

改變相機file of view(fov)的值

camera.DOFieldOfView(30, 2);

改變相機正交模式下size的大小

camera.DOOrthoSize(10, 2);

相機震動(比如fps游戲,被雷炸到后視角的晃動)

//參數1.持續時間  
//參數2.力量:實際就是震動的幅度,可以理解成相機施加的力的大小 使用Vector3可以選擇每個軸向不同的強度
//參數3.震動:震動次數
//參數4.隨機性:改變震動方向的隨機值(大小:0~180)
//參數5.淡出:就是運動最后是否緩慢移動回到原本位置
camera.DOShakePosition(1, 10, 10, 30, false);

對應Viewport Rect中的X,Y,W,H

camera.DOPixelRect(new Rect(100f, 0f, 500f, 500f), 2);

和上個一樣,但為百分比方式

camera.DORect(new Rect(0.5f, 0.5f, 0.5f, 0.5f), 2);

利用這個方法創建有4個視角的相機
1.創建四個相機,w、h都改為0.5
2.調整x、y位置使四個相機各自位於一角

4、Text方法

Unity中添加一個Camera,並掛載這個腳本

顏色

text.DOColor(Color.black, 2);

透明度

text.DOFade(0, 2);

混合顏色

text.DOBlendableColor(Color.black, 2);

類似galgame對話框中字體緩慢的出現

text.DOText("Hello Wrold", 3); 
text.DOText("Hello Wrold", 3).SetEase(Ease.Linear);  //勻速

5、Sequence隊列

Unity中添加一個Cube,並掛載這個腳本

添加動畫和添加延時

//利用隊列兩個DOMove方法就不會覆蓋了,會一個一個的執行
quence.Append(transform.DOMove(Vector3.one,2)); //0-2
quence.AppendInterval(1); //添加延時,隔1s執行下一個  //2-3
quence.Append(transform.DOMove(-Vector3.one,2));  //3-5

按時間點插入動畫

//把動畫插入到某個位置,但並不會妨礙隊列中原來的動畫運動
//比如插入這個1s的動畫,第0s時開始這個動畫覆蓋了剛開始的動畫,第1s開始又開始執行原隊列中的動畫
quence.Insert(0, transform.DOMove(-Vector3.one, 1));  //0-1

加入動畫Join

quence.Append(transform.DOMove(Vector3.one,2));
quence.Join(transform.DOScale(Vector3.one * 2,2));
//Join會加入和當前正在執行的動畫一起執行
quence.Append(transform.DOMove(-Vector3.one,2)); 
quence.Join(transform.DOScale(Vector3.one * 2, 2));

預添加動畫

quence.Append(transform.DOMove(Vector3.one,2));
//預添加動畫
//預添加的動畫和正常添加執行是反的,后添加的先執行
quence.PrependInterval(1);  //預添加的間隔
quence.Prepend(transform.DOMove(-Vector3.one * 2, 2));
//先執行PrependInterval,再執行Prepend,再執行Append

添加回調函數:

private void Start()
{
     Sequence quence = DOTween.Sequence();

     quence.Append(transform.DOMove(Vector3.one,2));
     //寫在某個隊列后,在執行完這個方法就會調用回調函數
     quence.AppendCallback(InsertCallBack);

   //在規定時間點插入回調函數
   quence.InsertCallback(1, InsertCallBack);
}

private void InsertCallBack()
{
   Debug.Log("回調一次");
}


免責聲明!

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



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