UGUI_使用DoTween
?
因?yàn)?/span>NGUI中已經(jīng)有UITween了,可是UGUI中是沒有這樣的Tween的。因?yàn)樵谧鲇螒驎和5臅r(shí)候通常會(huì)使用Time.Scale =0 ,
可是暫停的時(shí)候UI如果需要繼續(xù)有動(dòng)畫怎么辦呢?
在DoTween中只需要設(shè)置?? ?tweener.SetUpdate(true); 即可。
意思就是這個(gè)Tween是忽略TimeScale,如果不寫的話?tweener.SetUpdate 是 false。
例子
using?DG.Tweening; //不能少了這個(gè)命名空間。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | ????void Start () ????{ ????????//讓TimeScale = 0 ????????Time.timeScale = 0; ? ? ????????Image image = transform.Find("Image").GetComponent<Image>(); ????????//調(diào)用DOmove方法來讓圖片移動(dòng) ????????Tweener tweener = image.rectTransform.DOMove(Vector3.zero,1f); ????????//設(shè)置這個(gè)Tween不受Time.scale影響 ????????tweener.SetUpdate(true); ????????//設(shè)置移動(dòng)類型 ????????tweener.SetEase(Ease.Linear); ????????tweener.onComplete = delegate() { ????????????Debug.Log("移動(dòng)完畢事件"); ????????}; ????????image.material.DOFade(0,1f).onComplete = delegate() { ????????????Debug.Log("褪色完畢事件"); ????????}; ????} |
Tween的移動(dòng)類型有很多種,比如勻速運(yùn)動(dòng)、加速運(yùn)動(dòng)、減速運(yùn)動(dòng),等等。如果你拿捏不準(zhǔn)你需要用什么移動(dòng)類形式。
http://www.robertpenner.com/easing/easing_demo.html?你可以在這里預(yù)覽一下那種移動(dòng)類型更佳適合你。
代碼中我們?cè)O(shè)置了圖片的移動(dòng) 和 褪色,因?yàn)橐苿?dòng)的Tween設(shè)置了忽略Time.Scale,所以代碼中Time.Scale =0時(shí),圖片的Tween響應(yīng)了位移操作,然后褪色的Tween卻沒有。
?
部分文檔
?
DoTween UnityUI
Dotween已為新的GUI系統(tǒng)做好準(zhǔn)備,包括CanvasGroup,Graphic,Image,LayoutElement,Outline,RectTransform,ScrollRect,Slider,Text。
利用它你肯定可以定制出強(qiáng)大的動(dòng)畫系統(tǒng)。
Dotween TextMesh Pro/2D Tookit
Dotween同樣為2D Tookit的Tk2dBaseSprite,tk2dSliceSprite等做好準(zhǔn)備
Dotween同樣為TextMeshPro+TextMeshProUGUI做好準(zhǔn)備,包括DOFontSize,DOText,DOFaceFade等
Dotween 路徑動(dòng)畫
dotwwen pro包含路徑動(dòng)畫,路徑可視化編輯,強(qiáng)大的屬性面板
Dotween Pro :https://www.assetstore.unity3d.com/en/#!/content/32416
Dotween Free:https://www.assetstore.unity3d.com/en/#!/content/27676
一、術(shù)語(yǔ)
Tweener
一個(gè)tween控制value和animates
Sequence
一個(gè)特殊的tween,并不是控制value,和其它的tween一起成為一個(gè)動(dòng)畫組
Tween
一個(gè)普通詞,既可以表示? Tweener 也可以表示 序列
Nested tween
一個(gè)tween,包含序列
DoTween前綴
前綴在智能感知里是非常重要的,所以盡可能要記住這些:
DO? 前綴是所有的tween的快捷方式(可以直接操作已知 object,比如transform或material),也是DOTween 類主要的前綴
transform.DOMoveX(100, 1);
transform.DORestart();
DOTween.Play();
Set?? 前綴,所有的tween設(shè)置
myTween.SetLoops(4, LoopType.Yoyo).SetSpeedBased();
On?? 前綴, 所有的tween回調(diào)
myTween.OnStart(myStartFunction).OnComplete(myCompleteFunction);
二、DOTween.Init
當(dāng)你第一次創(chuàng)建 tween,DOTween將會(huì)使用默認(rèn)值自動(dòng)初始化。
如果你喜歡自己初始化(推薦),在創(chuàng)建任何tween之前(創(chuàng)建之后將不會(huì)有任何效果),調(diào)用這些方法一次。
想想看,你可以使用DOTween的 global settting 改變所有的初始化設(shè)置。
或者,你可以 通過鏈?SetCapacity?初始化方法,它可以設(shè)置 Tweeners最大值/FPS的初始容量(在高版本中可以調(diào)用?DOTween.SetTweensCapacity)
static DOTween.Init(bool recycleAllByDefault = false, bool useSafeMode = true, LogBehaviour logBehaviour = default)
比如:
DOTween.Init(true, true, LogBehaviour.Verbose).SetCapacity(200, 10);
三、Creating a Tweener
Tweener好似為DOTween工作的一只螞蟻,它采用 屬性/字段對(duì)給定值進(jìn)行動(dòng)畫處理。
截止目前 DOTween可以處理這些類型的值:
float,int,uint,Vector2/3/4,Quaternion,Rect,RectOffset,string
有三種方式創(chuàng)建 Tweener
A.便捷方式
DOTween包括一些已知的unity object,比如 Transform,Rigidbody和Material,你可以直接對(duì)這些object進(jìn)行tween(這也會(huì)自動(dòng)設(shè)置對(duì)象自己為target)比如:
transform.DOMove(new Vector3(2,3,4), 1);
rigidbody.DOMove(new Vector3(2,3,4), 1);
material.DOColor(Color.green, 1);
所有這些快速方式也有From,除了特殊說明,只需在方法名稱后添加From
transform.DOMoveFrom(new Vector3(2,3,4), 1);
rigidbody.DOMoveFrom(new Vector3(2,3,4), 1);
material.DOColorFrom(Color.green, 1);
Camera
DOColor(Color to, float duration)
DOShakePosition(float duration, float strength, int vibrato, float randomness)
DOShakeRotation(float duration, float strength, int vibrato, float randomness)
Light
Material
Rigidbody
Move
SpriteRenderer
詳細(xì)的文檔請(qǐng)參考官方:http://dotween.demigiant.com/documentation.php
Transform
Move
DOMove(Vector3 to, float duration, bool snapping)
DOMoveX/DOMoveY/DOMoveZ(float to, float duration, bool snapping)
DOLocalMove(Vector3 to, float duration, bool snapping)
DOLocalMoveX/DOLocalMoveY/DOLocalMoveZ(float to, float duration, bool snapping)
Rotate
DORotate(Vector3 to, float duration, bool useShortest360Route = true)
DOLocalRotate(Vector3 to, float duration, bool useShortest360Route = true)
DOLocalAxisRotate(Vector3 to, float duration)
Scale
DOScale(Vector3 to, float duration)
DOScaleX/DOScaleY/DOScaleZ(float to, float duration)
Punch – no FROM
DOPunchPosition(Vector3 punch, float duration, int vibrato, float elasticity, bool snapping)
DOPunchRotation(Vector3 punch, float duration, int vibrato, float elasticity)
DOPunchScale(Vector3 punch, float duration, int vibrato, float elasticity)
Shake – no FROM
DOShakePosition(Vector3 punch, float duration, float strength, int vibrato, float randomness, bool snapping)
DOShakeRotation(Vector3 punch, float duration, int vibrato, float elasticity)
DOShakeScale(Vector3 punch, float duration, int vibrato, float elasticity)
WaitFor coroutines
WaitForCompletion()
WaitForElapsedLoops(int elapsedLoops)
WaitForKill()
WaitForPosition(float position)
WaitForStart()
官方英文API
后面大多比較簡(jiǎn)單就不再一一翻譯了,附上官方英文文檔:http://dotween.demigiant.com/documentation.php
?
總結(jié)
以上是生活随笔為你收集整理的UGUI_使用DoTween的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UGUI_判断鼠标或者手指是否点击在UI
- 下一篇: Shader相关Mask裁切UI粒子特效