在Unity手游開發中,經常用到插值運算,我們可以使用Mathf.Lerp自行去實現效果,但是使用插件提高了我們的開發效率,這里歸結一下DoTween的基本使用方式以及效果說明:
直接代碼:
1 using DG.Tweening; 2 using System.Collections; 3 using System.Collections.Generic; 4 using UnityEngine; 5 using UnityEngine.UI; 6 7 public class OwnTextDoTween : MonoBehaviour { 8 //DoTween.To(); 9 public int value; 10 public GameObject cube; 11 Vector3 myValue = new Vector3(0, 0, 0); 12 13 //打字機 14 //text.DoText() 15 public Text text; 16 17 //屏幕震動效果 18 // mainCamera.DOShakePosition() 19 public Camera mainCamera; 20 21 //冷卻Image 22 public Image image; 23 24 public float start = 1;//fillAmount最大值 25 public float end = 0;//fillAmount最小值 26 27 void Start() 28 { 29 #region 1. DOTween.To() 對變量做一個動畫,通過插值的方式修改一個值的變化 30 ///對變量做一個動畫,通過插值的方式修改一個值的變化 31 //A. 用兩秒的時間從0變化到50 32 33 //()=> value,表示返回值為value,x=>value=x,表示將系統計算好的x值(當前值到目標值的插值)賦給value,50,表示達到的目標值,5表示所需時間 34 35 // value = 0; 36 // DOTween.To(() => value, x => value =x, 50,5); 37 38 39 //B. 控制Cube或UI面板的動畫 40 41 ///1)、將腳本掛在Cube上,並且在Update方法中把myValue的值賦給當前位置,這樣便實現了Cube從當前位置移動到了目標位置 42 ///用兩秒的時間從0,0,0變化到10,10,10 43 ///()=> myValue,表示返回值為myValue,x=>myValue=x,表示將系統計算好的x值(當前值到目標值的插值)賦給myValue,new Vector3(10,10,10),表示達到的目標值,5表示所需時間 44 45 // DOTween.To(() => myValue, x => myValue = x, new Vector3(10, 10, 10), 5); 46 47 48 #endregion 49 50 #region 5. FromTween:表示讓物體從目標位置移動到當前位置,即等同於播放反向的移動動畫 51 52 //1. DOMoveX()、DOMoveY()、DOMoveZ() 53 54 ///A. 如果只是讓物體的單個坐標移動,可直接用DOMoveX()、DOMoveY()、DOMoveZ()方法控制移動動畫,參數為(目標位置,所需時間) 55 // Tweener tweer =cube.transform.DOMoveX(10, 3); 56 57 ///B. DoTween中任何調用動畫的方法后面都可以添加From(),表示從目標位置移動到當前位置 58 // tweer.From(); 59 60 ///C. From(true)表示目標坐標等於當前坐標加上當前目標坐標,如果物體當前坐標為2,那么這行代碼表示從目標位置(10+ 2),經過1秒,移動到當前位置(2) 61 /// tweer.From(true); 62 63 //2. DOLocalMoveX()、DOLocalMoveY()、DOLocalMoveZ() 64 65 /// 表示局部坐標的位移動畫方法。DoTween中所有對動畫的設置都是通過對象Tweener來完成的 66 67 // Tweener tweener = cube.transform.DOLocalMoveX(10, 2f); 68 69 70 71 #endregion 72 73 #region 6.SetEase() 設置緩沖類型 通過次方法來設置動畫的曲線,曲線動畫效果很多,在此僅做三個案例,其他的可以在系統給的枚舉類型中找 74 75 // Tweener teweer = cube.transform.DOMoveX(10, 2); 76 //A.Ease.InBack 77 /// 表示物體先向后一點,再向前播放(相當於蓄力起跑) 78 // teweer.SetEase(Ease.InBack); 79 80 //B.Ease.InBounce 81 82 ///相當於一個多次蓄力進入的效果 83 // teweer.SetEase(Ease.InBounce); 84 85 //C.Ease.OutBounce 86 87 /// 相當於一個落地之后的彈跳效果(慣性撞擊反彈(物理屬性)) 88 // teweer.SetEase(Ease.OutBounce); 89 90 91 92 #endregion 93 94 #region 7.SetLoops()可以通過此方法設置動畫循環的次數 95 // Tweener twer = cube.transform.DOMoveX(10, 3); 96 97 //表示動畫的循環次數 98 //twer.SetLoops(2);//循環兩次 99 100 101 102 #endregion 103 104 #region 8.OnComplete()表示事件函數,當前動畫播放完后調用另一個方法,參數為需要調用的方法 105 //Tweener twer = cube.transform.DOMoveX(10, 3);//DoTween中所有對動畫的設置都是通過對象Tweener來完成的 106 //twer.SetEase(Ease.OutBounce);//相當於一個落地之后彈跳的效果 107 //twer.SetLoops(2);//表示動畫的循環次數 108 //twer.OnComplete(Onclick);//表示當前動畫播放完之后調用的事件,相當於一個注冊方法,參數為需要注冊的方法即為Onclick 109 #endregion 110 111 #region 9. SetId 設置ID 可以只用 int、string、object等類型的值 112 //Tweener tweener = cube.transform.DOScale(2, 2); 113 //tweener.OnComplete(() => 114 //{ 115 // tweener.Restart();//重復播放此動畫 116 //}); 117 //tweener.SetId(1); 118 119 #endregion 120 121 #region 10. SetAutoKill 設置自動銷毀 122 // Tweener tweener = cube.transform.DOScale(2, 2); 123 // tweener.SetAutoKill();//執行完就銷毀 124 #endregion 125 126 #region 11.Sequence 隊列 127 //在實際的需求中,一個動畫一般都包含對多個物體的操作,那么如何使用DoTween制作這種動畫呢?對於一些簡單的動畫,直接順序執行多個DoTween語句即可;對於一些復雜的動畫,諸如包含延時、動畫事件回調、播放音效等的動畫,可以利用DoTween的動畫隊列完成這些操作。 128 //Sequence sequence = DOTween.Sequence();//創建一個動畫(Tweener)隊列 129 //sequence.Append(cube.transform.DOMoveX(6, 3).SetRelative().SetEase(Ease.OutBounce)); 130 //sequence.Append(cube.transform.DOScale(3,3)); 131 //sequence.Append(cube.transform.DOShakeScale(5, 1, 10, 90));//果凍顫動的效果 132 #endregion 133 134 #region 12.設置冷卻轉圈的 Image 135 ///設置冷卻轉圈 附帶設置 轉一圈(回調方法直接實現,不用調用其他的方法) 136 // image.DOFillAmount(0, 5).SetEase(Ease.Linear).SetLoops(1, LoopType.Yoyo);//從當前到0,時間為5秒 137 138 #endregion 139 140 141 #region 142 #endregion 143 #region 144 #endregion 145 #region 146 #endregion 147 148 149 } 150 /// <summary> 151 /// OnComplete()事件函數執行完所有動畫后調用的方法 152 /// </summary> 153 public void Onclick() 154 { 155 Debug.Log("OnComplete()表示事件函數,當前動畫播放完后調用另一個方法,我是參數為需要調用的方法"); 156 } 157 158 159 void Update() 160 { 161 162 #region 1. DOTween.To() 對變量做一個動畫,通過插值的方式修改一個值的變化(updata中賦值show變化) 163 ///對變量做一個動畫,通過插值的方式修改一個值的變化(updata中賦值show變化) 164 //A. text.text = value.ToString(); 165 166 167 ///B.1)、將腳本掛在Cube上,並且在Update方法中把myValue的值賦給當前位置,這樣便實現了Cube從當前位置移動到了目標位置 168 // cube.transform.localPosition = myValue; 169 170 171 #endregion 172 173 #region 2. 對話框文字動畫,該方法顯示打字機效果 174 ///DOText() 175 ///對話框文字動畫,該方法顯示打字機效果 176 if (Input.GetKeyDown(KeyCode.A)) 177 { 178 text.DOText("你好我好他好大家好大大所多所多", 10);//打字機效果 179 } 180 #endregion 181 182 #region 3. 屏幕震動效果,原理是讓攝像機進行隨機方向的位移,產生震動的假象 183 ///DOShakePosition() 184 /// 屏幕震動效果,原理是讓攝像機進行隨機方向的位移,產生震動的假象 185 if (Input.GetKeyDown(KeyCode.B)) 186 { 187 mainCamera.DOShakePosition(0.8f);//表示震動時間是0.8秒,震動方向隨機 188 mainCamera.DOShakePosition(0.8f, new Vector3(1, 1, 0));//表示震動時間是0.8秒,震動方向為x和y方向,震動強度為1 189 } 190 #endregion 191 192 #region 4. 顏色漸變和透明度漸變動畫 193 /// DOColor()、DOFade() 194 ///顏色漸變和透明度漸變動畫 195 if (Input.GetKeyDown(KeyCode.C)) 196 { 197 text.DOText("你好拿的數據大發發附件", 8);//打字機 198 text.DOColor(Color.blue, 2);//漸變顏色動畫 199 text.DOFade(0, 5);//漸變透明度動畫參數為(透明度,漸變時間),其中0為不透明,1為完全透明 200 } 201 #endregion 202 203 } 204 205 #region 小案例 206 //private Button myButton; 207 //private RectTransform taskPanelTransform;//UGUI是通過RectTransform組件來控制移動屬性的 208 //private bool isShow = false; 209 210 //void Start() 211 //{ 212 // myButton = transform.Find("Button").GetComponent<Button>(); 213 // taskPanelTransform = transform.Find("Panel").GetComponent<RectTransform>(); 214 // myButton.onClick.AddListener(OnClickBtn);//UGUI中監聽按鈕的方法 215 // Tweener tweener = taskPanelTransform.DOLocalMove(new Vector3(0, 0, 0), 1);//修改的是局部坐標,默認動畫完后會被銷毀 216 // //Tweener對象保存這個動畫的信息,每次調用do類型的方法都會調用一個tweener對象,這個對象使用DoTween來管理 217 // tweener.SetAutoKill(false);//把SetAutoKill自動銷毀設置為false 218 // tweener.Pause();//讓動畫在開始時暫停 219 //} 220 //public void OnClickBtn() 221 //{ 222 // // taskPanelTransform.DOMove(new Vector3(0, 0, 0),1);//DOMove()方法是Dotween擴展的方法,表示經過1秒運動到0,0,0的位置(修改的是世界坐標) 223 // if (isShow == false) 224 // { 225 // // taskPanelTransform.DOPlay();//讓動畫只播放一次 226 // taskPanelTransform.DOPlayForward();//讓動畫向前播放 227 // isShow = true; 228 // } 229 // else 230 // { 231 // taskPanelTransform.DOPlayBackwards();//倒放動畫的方法 232 // isShow = false; 233 // } 234 //} 235 #endregion 236 }
以上就是一些基本使用方式,這是個局部,后續有機會再更新!!!
渴望交流!!!