Unity中DoTween的使用


在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 }

以上就是一些基本使用方式,這是個局部,后續有機會再更新!!!

渴望交流!!!


免責聲明!

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



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