Unity UGUI DoTween 学习笔记

官网:http://dotween.demigiant.com/

动画的基本设置
DOTween.defaultAutoKill:(全局操作) 当该值为真时,之后创建的动画当其播放完毕之后会自动被销毁。

DOTween.defaultAutoPlay:(全局操作) 当该值为真时,之后创建的动画会自动播放。

        DOTween.defaultEaseType:(全局操作) 该值为创建动画时候默认的动画曲线。

        DOTween.defaultLoopType:(全局操作) 该值为创建动画时候默认的循环模式。

        tweener.SetAs():(局部操作) 参数为Tween或者TweenParams.用于设置该动画相关属性。
        tweener.SetAutoKill():(局部操作) 参数为true或者false.用于设置该动画是否自动销毁。
        tweener.SetId():(局部操作) 参数为obj.用于设置该动画id。
        tweener.SetLoop():(局部操作)参数为float&LoopType.用于设置该动画循环次数和循环类型,次数为-1表示无限循环。      5.动画的播放操作
    tweener.From():参数为true或者false。表示运动为相对运动还是绝对运动。并且动画效果为tweener的逆动画
        tweener.Pause():动画播放暂停。

        tweener.Play():动画继续播放。

        tweener.Flip():动画播放中执行,动画原轨迹运动到起始点,当动画回到起始状态时动画结束。

        tweener.Complete():动画播放中执行,物体立即运动到动画末尾状态,动画结束。

        tweener.Goto():参数为float,表示动画立即进入到时间为t时候的状态。

        tweener.PlayForward():动画顺序播放。

        tweener.PlayBackwards():动画倒序播放。

        tweener.TogglePause():

暂停\播放,如果动画处于播放状态就暂停,反之就播放

tweener.ReStart():动画重新开始播放。

        tweener.Kill():立即销毁该动画。

  6.动画的回调函数

        tweener.OnComplete():动画结束时触发。

        tweener.OnPlay():动画开始播放时触发。

        tweener.OnStart():动画被创建时触发。

        tweener.OnKill():动画被销毁时触发。

选取了几个常用的,至于其余的可以查看DOTween的官网介绍。

//十秒内X,Y,Z 局部坐标(localPosition)移动到 10,10,10 位置
//transform.DOBlendableLocalMoveBy(new Vector3(10, 10, 10), 10);

//十秒内 X,Y,Z 方向的局部旋转(localPosition),转动到 30,30,30
    //transform.DOBlendableLocalRotateBy(new Vector3(30, 30, 30), 10);

    //十秒内X,Y,Z坐标移动到 自身坐标 加 new Vector3( 10,10,10) 位置 原始 坐标 3,3,3,移动后 13,13,13
    //transform.DOBlendableMoveBy(new Vector3(10, 10, 10), 10);

    //十秒内X,Y,Z自身旋转到 30,30,30(有父物体的相对于父物体)
    //transform.DOBlendableRotateBy(new Vector3(30, 30, 30), 10);

    //十秒内 自身X,Y,Z方向的比例 加 3,3,3如原始比例 2,1,1 变化后5,4,4
    //transform.DOBlendableScaleBy(new Vector3(10, 10, 10), 10);

    //执行该方法,变化立即结束,且完成移动
    //transform.DOComplete();

    //在变化过程中执行该方法,则物体慢慢的变回原样,如果变化已经完成,该方法无效
    //transform.DOFlip();

    // 变化过程中执行该方法,则物体变化到 第二秒 时该物体的位置、比例等
    //transform.DOGoto(2);

    //十秒内 弹跳 3次
    //transform.DOJump(new Vector3(10, 10, 10), 3, 10);

    //停止掉当前的变化
    //transform.DOKill();

    // 十秒内 弹跳 3次, 局部坐标最终变化为  10, 0, 10
    //transform.DOLocalJump(new Vector3(10, 10, 10), 3, 10);

    // 5 秒内, 局部坐标变化到  10,10,10
    //transform.DOLocalMove(new Vector3(10, 10, 10), 5);

    // 10 秒内 X 局部坐标变换到 5
    //transform.DOLocalMoveX(5, 10);

    // 10 秒内 Y 局部坐标变化到 5
    //transform.DOLocalMoveY(5, 10);

    //10 秒内 Z 局部坐标变化到 5
    //transform.DOLocalMoveZ(5, 10);

    //transform.DOLocalPath();

    //5 秒内 局部旋转变化到  10,10, 10
    //transform.DOLocalRotate(new Vector3(10, 10, 10), 5);

    // 自身朝向 坐标(10,10,10)
    //transform.DOLookAt(new Vector3(10, 10, 10), 5);

    // 5 秒内 移动到 坐标 (10,10,10)
    //transform.DOMove(new Vector3(10, 10, 10), 5);

    //10 秒内 X 局部坐标变化到 5
    //transform.DOMoveX(5, 10);

    //10 秒内 Y 局部坐标变化到 5
    //transform.DOMoveY(5, 10);

    //10 秒内 Z 局部坐标变化到 5
    //transform.DOMoveZ(5, 10);

    //
    //transform.DOPath();

    //执行该方法停止 变化
    //transform.DOPause();

    //transform.DOPlay();

    //变化结束前调用该方法,物体回到原始位置
    //transform.DOPlayBackwards();

    //执行 transform.DOPlayBackwards(); 物体回到原始位置
    //执行 下面方法则再次变化
    //transform.DOPlayForward();

    //冲压机,在 5 秒内在原始坐标和下面坐标之间,来回冲压
    //transform.DOPunchPosition(new Vector3(10, 10, 10), 5);

    //冲压机,在 5 秒内在原始旋转和下面角度之间,来回冲压变化
    //transform.DOPunchRotation(new Vector3(50, 50, 50), 5);

    //冲压机,在 5 秒内在原始比例和下面比例之间,来回冲压变化
    //transform.DOPunchScale(new Vector3(5, 5, 5), 5);

    //在变化结束之前,执行该方法,则重新开始变化
    //transform.DORestart();

    //变化过程中执行该方法,回到原始
    //transform.DORewind();

    // 10 秒内 旋转角度 到  (50,50,50)
    //transform.DORotate(new Vector3(50, 50, 50), 5);

    // 10 秒内 比例变化到  (5,5,5)
    //transform.DOScale(new Vector3(5, 5, 5), 5);

    // 10 秒内 X 比例变化到 5 
    //transform.DOScaleX(5, 10);

    // 10 秒内 Y 比例变化到 5 
    //transform.DOScaleY(5, 10);

    // 10 秒内 Z 比例变化到 5 
    //transform.DOScaleZ(5, 10);

    // 10 秒内 物体 X,Y,Z 坐标在   自身-5 到 自身加 5 之间震动
    //transform.DOShakePosition(10, new Vector3(10, 10, 10));

    // 10 秒内, 物体 X,Y,Z 旋转角度在 自身-5 到 自身加 5 之间震动
    //transform.DOShakeRotation(10, new Vector3(10, 10, 10));

    // 10 秒内, 物体 X,Y,Z 比例在 自身-5 到 自身加 5 之间震动
    //transform.DOShakeScale(10, new Vector3(10, 10, 10));

    //在变化过程中执行该方法,停止、开始、停止、开始
    //transform.DOTogglePause();

    // 执行该方法,坐标立即变化为 0,5,0, 从 0,5,0 两秒移动到初始位置
    //transform.DOMove(new Vector3(0, 5, 0), 2).From();

    // 执行该方法,移动到相对于原始位置 6,0,2 的位置
    // 如原始位置 3,2,1。 移动后位置为 3+6,2+0,2+2 即 9,2,4
    //transform.DOMove(new Vector3(6, 0, 2), 2).SetRelative();
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using DG.Tweening;
using UnityEditor;
using UnityEngine.EventSystems;
using LuaInterface;

namespace LuaFramework
{
    public class DoTweenManager : Manager
    {

        //**************************************************/
        /*传入一个Text形成一个漂浮文字Tips*/
        //**************************************************/
        public void ShowTips(Graphic graphic)
        {

            graphic.transform.SetParent(GameObject.Find("msg_canvas").transform);  //让创建的Text挂载到msg_canvas上
            graphic.transform.parent.position = new Vector3(0, 0, 0);
            RectTransform rt = graphic.rectTransform;
            rt.sizeDelta = new Vector2(200, 100);                                 //改变RectTransform的size

            rt.transform.position = new Vector3(0, 0, 0);                          //改变RectTransform的pos
                                                                                   //    rt.transform.Rotate(new Vector3(0, 0, 45));
            rt.transform.localScale = new Vector3(1, 1, 1);


            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 + 350, 0.5f);               //创建向上移动的第二个动画

            Tweener alpha1 = graphic.DOColor(new Color(c.r, c.g, c.b, 1), 0.5f);  //创建Alpha由0到1渐变的动画
            Tweener alpha2 = graphic.DOColor(new Color(c.r, c.g, c.b, 0), 0.5f);  //创建Alpha由1到0渐变的动画
            mySequence.Append(move1);                  //先添加向上移动的动画
            mySequence.Join(alpha1);                   //同时执行Alpha由0到1渐变的动画
            mySequence.AppendInterval(1);              //延迟1秒钟
            mySequence.Append(move2);                  //添加向上移动的动画
            mySequence.Join(alpha2);                   //同时执行Alpha由1到0渐变的动画
        }

        //**************************************************/
        /*图片到屏幕中心*/
        //**************************************************/

        public void TransformImage(Graphic graphic)/*RectTransform image*/
        {
            graphic.transform.SetParent(GameObject.Find("msg_canvas").transform);
            graphic.transform.parent.position = new Vector3(0, 0, 0);
            RectTransform rt = graphic.rectTransform;
             rt.sizeDelta = new Vector2(500, 500);                                 //改变RectTransform的size

            rt.transform.position = new Vector3(0, 0, 0);                          //改变RectTransform的pos
                                                                                   //    rt.transform.Rotate(new Vector3(0, 0, 45));
            rt.transform.localScale = new Vector3(1, 1, 1);


            //透明度设置
            Color c = graphic.color;
            c.a = 0;
            graphic.color = c;                                                   //先将字体透明
            Sequence mySequence = DOTween.Sequence();                            //创建空序列
            Tweener alpha1 = graphic.DOColor(new Color(c.r, c.g, c.b, 1), 0.1f);  //创建Alpha由0到1渐变的动画
            Tweener alpha2 = graphic.DOColor(new Color(c.r, c.g, c.b, 0), 0.1f);  //创建Alpha由1到0渐变的动画
            mySequence.Join(alpha2);                   //同时执行Alpha由0到1渐变的动画
            mySequence.AppendInterval(0.1f);              //延迟1秒钟
            mySequence.Join(alpha1);                   //同时执行Alpha由1到0渐变的动画


            // 缩放  
            Tweener  m_scale = rt.DOScale(new Vector3(1.5f, 1.5f, 1f), 0.2f);
            m_scale.SetEase(Ease.Linear);  
            m_scale.SetLoops(2, LoopType.Yoyo); 


            //ui组件要使用本地坐标
            //第一个参数:目标地点,就是要移动到哪个位置
            //第二个参数:移动到那个位置需要的时间
            // rt.DOLocalMove(new Vector3(0, 0, 0), 0.6f);


           //震动   3 秒内 物体 X,Y,Z 坐标在   自身-5 到 自身加 5 之间震动
            rt.transform.DOShakePosition(1f, new Vector3(10, 10, 10));

            // rt.transform.DOShakeScale(2, new Vector3(3, 3, 3));


           //几种移动效果
            // rt.transform.DOMoveX(20, 1).SetEase(Ease.OutBack).SetRelative();
            // rt.transform.DOMoveX(20, 1).SetEase(Ease.InQuad).SetRelative();
            // rt.transform.DOMoveX(20, 1).SetEase(Ease.InOutQuad).SetRelative();
            // rt.transform.DOMoveX(20, 1).SetEase(Ease.Linear).SetRelative();
            // rt.transform.DOMoveX(20, 1).SetEase(Ease.InOutCubic).SetRelative();
        }

        //生成Text对象
        public void CreateTextObject()
        {
            // if(Input.GetMouseButtonDown(0))
            // {

            GameObject tex = new GameObject("CreateText", typeof(Text));
            // tex.transform.SetParent(GameObject.Find("msg_canvas").transform);  
            // tex.transform.parent.position = new Vector2(0,0);
            Text text = tex.GetComponent<Text>();
            text.text = "正在开发中";
            text.font = AssetDatabase.LoadAssetAtPath<Font>("Assets/Fonts/Arial Black.TTF");   // 默认字体 
            text.fontSize = 25;
            text.alignment = TextAnchor.MiddleCenter;
            //    text.alignment = TextAnchor.LowerCenter;
            //    RectTransform rt = tex.GetComponent<RectTransform>();              
            //    rt.sizeDelta = new Vector2(200, 100);  
            //    rt.transform.position = new Vector3(0, 0, 0);  
            // //    rt.transform.Rotate(new Vector3(0, 0, 45));
            // rt.transform.localScale = new Vector3(1,1,1);

            ShowTips(text);

            // }
        }



        //**************************************************/
        /*文字以打印机的形式显示*/
        //**************************************************/
        public void ComponentEvent(Graphic graphic)
        {

            graphic.transform.SetParent(GameObject.Find("msg_canvas").transform);  //让创建的Text挂载到msg_canvas上
            graphic.transform.parent.position = new Vector3(0, 0, 0);
            RectTransform rt = graphic.rectTransform;
            rt.sizeDelta = new Vector2(500, 300);                                 //改变RectTransform的size

            rt.transform.position = new Vector3(0, 0, 0);                          //改变RectTransform的pos
                                                                                   //    rt.transform.Rotate(new Vector3(0, 0, 45));
            rt.transform.localScale = new Vector3(1, 1, 1);

           //默认为false  
           //Vector3.forward是相对位置,表示从Vector3.forward加当前位置移动到当前位置 
            rt.transform.DOMove(Vector3.forward, 2).From(true);

            Text test = graphic.GetComponent<Text>();
            //逐字显示  
            test.DOText("大千世界年度最佳模拟经营游戏,大千世界年度最佳模拟经营游戏,大千世界年度最佳模拟经营游戏,大千世界年度最佳模拟经营游戏", 5);
            test.DOBlendableColor(Color.yellow, 5);
        }

        //**************************************************/
        /*屏幕震动效果*/
        //**************************************************/
        public void ShakeEvent()
        {
            transform.DOShakePosition(2f, new Vector3(2, 2, 3));

            transform.DOShakeScale(2, new Vector3(3, 3, 3));
        }

        //**************************************************/
        /*使sphere在1秒内向x轴相对(SetRelative())的移动了+20的位置。中间的SetEase()函数确定了使用那个缓动函数,可以看出不同的缓动函数可以实现不同的动画过度效果。 
5个小球同时达到终点,但是运动过程却不一样,有些先快后慢,有些先慢后快,有些会超过终点再折回。*/
        //**************************************************/

        // public void Test(Transform sphere1, Transform sphere2, Transform sphere3, Transform sphere4, Transform sphere5)
        // {
        //     sphere1.DOMoveX(20, 1).SetEase(Ease.OutBack).SetRelative();
        //     sphere2.DOMoveX(20, 1).SetEase(Ease.InQuad).SetRelative();
        //     sphere3.DOMoveX(20, 1).SetEase(Ease.InOutQuad).SetRelative();
        //     sphere4.DOMoveX(20, 1).SetEase(Ease.Linear).SetRelative();
        //     sphere5.DOMoveX(20, 1).SetEase(Ease.InOutCubic).SetRelative();
        // }

        //**************************************************/
        /**/
        //**************************************************/

        // public void Show(ArrayList boxes)
        // {
        //     //boxes引用了图片中的那些方块Transform
        //     foreach (var j in boxes)
        //         j.DOScale(new Vector3(1, 1, 1), 0.5f);
        // }
        // public void Hide()
        // {
        //     foreach (var j in boxes)
        //         j.transform.DOScale(new Vector3(0, 0, 0), 0.4f);
        // }


    private Tweener m_pos;  
    private Tweener m_rota;  
    private Tweener m_scale;  
    private Tweener m_color;  
    public void ImageMove() {  
        // 全局初始化  
        DOTween.Init(true, true, LogBehaviour.ErrorsOnly).SetCapacity(200, 10);  
        Image image = transform.GetComponent<Image>();  
        // 位置  
        m_pos = image.rectTransform.DOMove(new Vector3(Screen.width * 0.5f, Screen.height * 0.5f,0), 1f);  
        m_pos.SetEase(Ease.OutCubic);  
        m_pos.SetLoops(10,LoopType.Yoyo);  
        // 旋转  
        m_rota = image.rectTransform.DORotate(new Vector3(0,180,0), 1);  
        m_rota.SetEase(Ease.Linear);  
        m_rota.SetLoops(10, LoopType.Yoyo);  
        // 缩放  
        m_scale = image.rectTransform.DOScale(new Vector3(0.6f, 0.6f, 1f), 1);  
        m_scale.SetEase(Ease.Linear);  
        m_scale.SetLoops(10, LoopType.Yoyo);  
        // 颜色  
        m_color = image.material.DOColor(new Color(0f,1f,1f, 0.7f), 1f);  
        m_color.SetEase(Ease.Linear);  
        m_color.SetLoops(10, LoopType.Yoyo);  
        // 注册开始和结束事件  
        m_pos.OnStart(AnimaStart);  
        m_pos.OnComplete(AnimaEnd);  
    }  
    private void AnimaStart()  
    {  
        Debug.Log("动画开始");  
    }  
    private void AnimaEnd()  
    {  
        Debug.Log("动画结束");  
    }  
    }
}

参考http://www.taidous.com/forum.php?mod=viewthread&tid=38061&extra=page%3D3&page=1

http://blog.csdn.net/jason_520/article/details/54349227http://www.cnblogs.com/android-blogs/p/6092561.html

Demohttp://www.360doc.com/content/17/0601/12/39658022_658977934.shtml

http://blog.csdn.net/qq_33927832/article/details/53887828http://www.cnblogs.com/Study02/p/7254461.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农老K

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值