DoTween插件学习笔记

来源:互联网 发布:斯维尔算量软件价格 编辑:程序博客网 时间:2024/04/29 07:58

首先瞎扯几句,网上关于DoTween插件的教程很多,以下是我学习过程中总结出来的。虽然界面很丑,但原理大多相同,每个场景都举例了相对应的适应范围。
场景2很有意思,因为场景2完全可以在场景1的基础上添加一个bool类型的开关来实现,但是这种方法比较消耗资源。一个动画从开始移动到结束移动的生命历程中伴随着生成和销毁,每移动一次都会伴随着生成和销毁,对于重复的动作如果我们只生成一次和销毁一次,就会节省资源提高游戏性能。
在这里举个草船借箭的典故,诸葛亮要想曹操“借”10万支箭,假设曹操只有500名弓箭手,那么每人就要射20支箭,对吧?假设一名弓箭手把箭射给诸葛亮后,当他要射第二支箭时,能不能把射给诸葛亮的箭要回来,重新射一次???如果可以的话,只需500支箭就可以玩美代替10万支箭!!!现实世界中这当然是不可能的,但是游戏世界中都是骗人的,我们看到的只是弓箭手在射箭,每射出去一支箭,诸葛亮的“草人”身上箭的显示数量只需+1即可。“想要马儿跑,又不给马儿吃草”。poolManager插件也是这个道理,扯远了,回归正题。
前提,把DoTween插件导入项目工程中。插件的下载就不提供了,网上搜一下有很多。学习DoTween之前要具备UGUI相关知识的基础。
DoTween主要做各种小动画,实现了动画的移动、旋转、缩放,按指定路线行走。在以下的代码中有详细的注释。

场景一:
点击运行按钮,(在游戏暂停的情况下)头像移动到方块的位置.
适用场景: 在场景中任意地方建立一个空物体,设置成头像移动的目标位置即可。
图1
图1
注意:使用DoTween插件 必须要引用命名空间using DG.Tweening;
在做游戏暂停的时候通常会使用Time.Scale = 0 ,
可是暂停的时候UI如果需要继续有动画怎么办呢?在DoTween中只需要设置 tweener.SetUpdate(true); 即可。
意思就是这个Tween是忽略TimeScale,如果不写的话 tweener.SetUpdate 是 false。
tweener.onComplete是指动画播放完毕后要执行的方法。在下面的代码块中执行了2个Debug语句,也可以定义要执行的函数。
(脚本挂载在Canvas上)

using UnityEngine;using System.Collections;using UnityEngine.UI;using DG.Tweening;  public class UIMain : MonoBehaviour{    Image image;    private Transform cube;    // Use this for initialization    void Start()    {        //暂停游戏.        Time.timeScale = 0;        image = GameObject.Find("Image").GetComponent<Image>();        cube = GameObject.Find("Cube").GetComponent<Transform>();        //调用DOMove方法让图片移动.        Tweener tweener = image.rectTransform.DOMove(cube.position, 1f);        //设置这个tweener不受Time.scale影响.        tweener.SetUpdate(true);        //设置移动类型.        tweener.SetEase(Ease.OutBack);        tweener.onComplete = delegate ()        {            Debug.Log("移动完毕");        };        image.material.DOFade(0, 1f).onComplete = delegate ()           {               Debug.Log("褪色完毕");           };    }

场景二:
点击button按钮,屏幕外的图片移动到屏幕中指定位置,再次点击按钮,图片再次移动到屏幕外.
适用场景:在很多游戏中,点击某个按钮,一系列装备列表显示在屏幕中,再次点击按钮,装备列表又退回去.图如下图2,3所示。
这里写图片描述
图2
这里写图片描述
图3
注意:这里用一个图片代表列装备列表框。(比较丑,只是为了显示功能).
第二章图片中,图片移动到了一个空物体的位置上,(空物体没显示,但是是存在的)
image.rectTransform.DOPlayForward();是正常播放动画,
image.rectTransform.DOPlayBackwards();是倒放动画。
(脚本挂载在Canvas上)

using UnityEngine;using System.Collections;using UnityEngine.UI;using DG.Tweening;public class Button : MonoBehaviour {    public Image image;    public GameObject Cube;    private bool isIn = false;       // Use this for initialization       void Start () {        //调用DoMove方法来让图片移动.        Tweener tweener = image.rectTransform.DOMoveX(Cube.GetComponent<Transform>().position.x, 0.3f);        //不受Time.timeScale的影响.        tweener.SetUpdate(true);        //设置移动类型.        tweener.SetEase(Ease.Linear);        //设置自动销毁动画为flase        tweener.SetAutoKill(false);        //暂停动画        tweener.Pause();       }    public void TransformImage()    {        if (isIn == false)        {            //正常播放动画.            image.rectTransform.DOPlayForward();            isIn = true;        }        else        {            //倒放动画.            image.rectTransform.DOPlayBackwards();            isIn = false;        }    }}

场景三:
主要实现图片的旋转,和实现“下沉的感觉”。
适用场景:在捕鱼游戏中,实现场景地面塌陷的效果等。
这里写图片描述
图4
这里写图片描述
图5
注意:
image.rectTransform.DORotate(new Vector3(0,0,180),3f);指3秒内沿Z轴旋转180度.
image.rectTransform.DOScale(new Vector3(0.5f, 0.5f, 0), 5);5秒后,X轴,Y轴缩小0.5倍.

using UnityEngine;using System.Collections;using UnityEngine.UI;using DG.Tweening;public class Button2 : MonoBehaviour{    public Image image;    private Text txt;    // Use this for initialization    void Start()    {        //获取Text物体        //txt = GameObject.Find("Text").GetComponent<Text>();        //移动cube1的x轴,从当前位置移动到 5,需要的时间为 1秒        // Tweener tweener = image.rectTransform.DOMoveX(5, 1);        Tweener tweener = image.rectTransform.DOMoveX(5, 1).From();        //设置image的大小.        image.rectTransform.DOScale(new Vector3(0.5f, 0.5f, 0), 5);        //旋转动画.        image.rectTransform.DORotate(new Vector3(0,0,180),3f);        //设置移动类型.        tweener.SetEase(Ease.Linear);        //动画循环播放.        tweener.SetLoops(2);        tweener.onComplete = delegate ()        {            XS();        };    }    void XS()    {        Debug.Log("框选掉渣天");    }}

场景4:
路径编辑器
在需要添加Path动画的物体上挂上 DOTweenPath 组件.在Scene面板中
Shift + Ctrl : 添加路径点
Shift + Alt : 删除路径点
这里写图片描述
图6
无需额外编写代码,就实现了物体按指定路线行走。
DOTweenPath 组件相关参数
waypoints : 路径点
duration : 动画时间
pathtype : 路径类型
pathmode : 路径模式
ClosePath :封闭路径
Orientation :运动朝向,分为ToPath朝向路线LookAtTran朝向Tran和LookatPos朝向点.
详细的组件相关参数请参考点击查看

DoTween插件对文字的控制: 字体移动的同时显示和隐藏的功能:上图6中的“人美、声甜”。
1.字体向上移动同时颜色Alpha从0渐变到1。
2.延迟1秒,字体显示一秒钟。
3.字体向上移动同时颜色Alpha从1渐变到0。

using UnityEngine;using System.Collections;using UnityEngine.UI;using DG.Tweening;public class FlyText : MonoBehaviour{    public Text txt;    // Use this for initialization    void Start()    {        txt = txt.GetComponent<Text>();    }    // Update is called once per frame    void Update()    {        if (Input.GetMouseButtonDown(0))        {            FlyTo(txt);        }    }    public void FlyTo(Graphic graphic)    {        RectTransform rt = graphic.rectTransform;        Color c = graphic.color;        c.a = 0;        //先将字体透明.        graphic.color = c;        //创建空序列.        Sequence mySequence = DOTween.Sequence();        //创建向上移动的第一个动画.        Tweener move1 = rt.DOMoveY(rt.position.y + 2, 0.5f);        //创建向上移动的第二个动画.        Tweener move2 = rt.DOMoveY(rt.position.y + 4, 0.5f);        //创建Alpha由0到1渐变的动画.        Tweener alpha1 = graphic.DOColor(new Color(c.r, c.g, c.b, 1), 0.5f);        //创建Alpha由1到0渐变的动画.        Tweener alpha2 = graphic.DOColor(new Color(c.r, c.g, c.b, 0), 0.5f);        //添加向上移动的动画.        mySequence.Append(move1);        //同时执行Alpha由0到1渐变的动画.        mySequence.Join(alpha1);        //延迟1秒钟.        mySequence.AppendInterval(1);        //添加向上移动的动画.        mySequence.Append(move2);        //同时执行Alpha由1到0渐变的动画.        mySequence.Join(alpha2);    }}
0 0
原创粉丝点击