DoTween 控制UGUI tween动画

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011484013/article/details/73566187

NGUI有自带的tween动画,但是UGUI却没有,如果需要UGUI实现tween动画效果,需要使用插件DoTween.
下载地址http://download.csdn.net/detail/u011484013/9877427

DoTween使用之前,需要添加引用 using DG.Tweening;

使用方式:
首先获取对象的RectTransform实例rectTransform
基本的移动:rectTransform.DOMove (new Vector2(100,100),1f);
DoMove移动的位置是屏幕的左下角,如果想要移动的位置和Inspector上面显示的左边一致,需要添加屏幕的偏移量:
这里写图片描述
centerPos = new Vector2 (Screen.width*0.5f,Screen.height*0.5f);
rectTransform.DOMove(new Vector3(Screen.width * 0.5f+100, Screen.height * 0.5f+100,0), 1f);

缩放:rectTransform.DOScale (new Vector3(2,2,1),1f);

旋转:rectTransform.DORotate (new Vector3(0,0,180),1f);

移动相关的基本事件:

OnComplete(TweenCallback callback)  
OnKill(TweenCallback callback)  
OnPlay(TweenCallback callback)  
OnPause(TweenCallback callback)  
OnRewind(TweenCallback callback)  
OnStart(TweenCallback callback)  
OnStepComplete(TweenCallback callback)  
OnUpdate(TweenCallback callback)  
OnWaypointChange(TweenCallback<int> callback) 

使用方式:

tweener.OnComplete (delegate() {
        Debug.Log("tween animation 结束");
    });

测试demo:
创建一个UGUI image对象,然后在该对象上面添加脚本DoTweenTest2.cs
这里写图片描述
code:

using UnityEngine;
using System.Collections;
using DG.Tweening;
using UnityEngine.UI;
public class DoTweenTest2 : MonoBehaviour {
    Vector2 centerPos;
    Image image;
    // Use this for initialization
    void Start () {
        centerPos = new Vector2 (Screen.width*0.5f,Screen.height*0.5f);
        image = transform.GetComponent<Image>();

    }



    void OnGUI(){
        if(GUILayout.Button("move to word pos(100,100)")){
            //DoMove的坐标系是左下角为准,移动到100,100位置
            image.rectTransform.DOMove (new Vector2(100,100),1f);
        }
        if(GUILayout.Button("move to anchor pos(100,100)")){
            image.rectTransform.DOMove(new Vector3(Screen.width * 0.5f+100, Screen.height * 0.5f+100,0), 1f); 
        }
        if(GUILayout.Button("add scale (2,2)")){//每点击一次,在原始缩放基础上放大(2,2)
            //当前sacle(1,1,1)1秒内添加到(3,3,1)
            image.rectTransform.DOBlendableScaleBy (new Vector2(2,2),1f);
            //          image.rectTransform.DOScale (new Vector2(2,2),1f);

        }
        if(GUILayout.Button("scale to (2,2,1)")){

            image.rectTransform.DOScale (new Vector3(2,2,1),1f);

        }
        if(GUILayout.Button("rotate 180 degree")){
            //旋转到180度
            image.rectTransform.DORotate (new Vector3(0,0,180),1f);
        }

        if(GUILayout.Button("test tweener event")){
            Tweener tweener = image.rectTransform.DOMove(new Vector3(Screen.width * 0.5f+300, Screen.height * 0.5f-100,0), 1f); 
            tweener.OnPlay (OnPlay);
            tweener.OnComplete (OnComplete);
//          tweener.OnComplete (delegate() {
//              Debug.Log("tween animation 结束");
//          });
        }
    }

    void OnComplete(){
        Debug.Log("tween animation 结束");
    }

    void OnPlay(){
        Debug.Log("tween animation 开始");
    }
}

这里写图片描述

常用事件脚本:

using UnityEngine;
using System.Collections;
using DG.Tweening;

public class DoTween_event : MonoBehaviour {

    public RectTransform panelTranform;
    private bool isIn = false;
    public LoopType loopType;                  //循环的模式

    void Start()
    {

        Tweener paneltweener = panelTranform.DOScale (new Vector3(2,2,1),1f);
        //多次调用DOTween动画会影响性能
        //DOTween默认动画播放完毕时会自动销毁动画
        //Tweener对象保存这个动画

        paneltweener.SetAutoKill(false);              //禁止销毁动画
        paneltweener.Pause();                         //停止播放动画
        //paneltweener.SetDelay(0.5f);                //设置动画延迟播放
        //paneltweener.SetEase(Ease.INTERNAL_Zero);   //设置动画运动的模式
        //paneltweener.SetLoops(-1);                  //设置循环播放 (当参数为-1的时候循环播放;当参数>=0的时候则表示循环的次数;0的时候表示循环一次)
        paneltweener.SetLoops(-1,loopType);          //设置循环播放并且设置动画循环的模式
        //paneltweener.PlayForward();                 //播放
        //paneltweener.PlayBackwards();               //倒放
        paneltweener.OnComplete(OnComplete);        //动画播放完毕后执行,动画倒放时候不执行
        paneltweener.OnStart(OnStart);              //动画第一次播放时执行
        paneltweener.OnUpdate(OnUpdate);            //动画播放时不断执行
        paneltweener.OnPlay(OnPlay);                //动画开始播放时执行
        //paneltweener.OnStepComplete(OnStepComplete);//动画播放且倒放都会执行一次,且执行顺序先于OnComplete
        //paneltweener.OnKill(OnKill);                //动画删除的时候执行事件
        //paneltweener.Kill(true);                    //删除动画且组件会直接到达指定位置
    }

    private void OnKill()
    {
        Debug.Log("This is OnKill");
    }

    private void OnStepComplete()
    {
        Debug.Log("This is OnStepComplete");
    }

    private void OnPlay()
    {
        Debug.Log("This is OnPlay");
    }

    private void OnUpdate()
    {
        Debug.Log("This is OnUpdate");
    }

    private void OnStart()
    {
        Debug.Log("动画第一次播放");
    }

    void OnComplete()
    {
        Debug.Log("动画播放完毕!");
    }

    // Update is called once per frame
    void Update () {
        if(Input.GetMouseButtonDown(0)){
            if(!isIn)
            {
                //注释掉的方法是效果都是一样的
                //panelTranform.DOPlay();                     //动画只会播放一次
                panelTranform.DOPlayForward();                //前进
                //paneltweener.PlayForward();                 //播放
                isIn = true;
            }
            else
            {
                //paneltweener.PlayBackwards();               //倒放
                panelTranform.DOPlayBackwards();              //倒放
                isIn = false;
            }
        }

    }



}

相关博客参考:
http://blog.csdn.net/lyh916/article/details/45888117
http://m.blog.csdn.net/begonia__z/article/details/51244304

猜你喜欢

转载自blog.csdn.net/u011484013/article/details/73566187