本文及系列參考於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("回調一次");
}
