Unity Dotween快速入门

常用API

using DG.Tweening;
using DG.Tweening.Core;
using NUnit.Framework.Constraints;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using UnityEngine;

public class Test : MonoBehaviour {

    public Gradient _gradient;  //颜色渐变
    public AnimationCurve _Curve;
    private Tweener _tweener;
    public Transform[] positions;
    // Use this for initialization
    async void Start () {
        //都不是增量,而是目标值
        //Position
        //移动
        //transform.DOMove(new Vector3(10,10,10),3);
        //-----测试两个动画一起执行--
        //transform.DOMove(new Vector3(2, 2, 2), 2);
        //transform.DOMove(new Vector3(-3, -2, -1), 3);
        //transform.DORotate(new Vector3(0,90,0),2);
        //--------结束;结论:相同类型后面的动画会覆盖前面的动画--------

        //相对位置移动
        //transform.DOLocalMove(new Vector3(10,1,1),1);
        //移动到x值为10
        //transform.DOMoveX(10,2);
        //Rotation
        //旋转 绕着y轴旋转到150 两秒
        //transform.DORotate(new Vector3(0,150,0),2);
        //看向目标点
        //transform.DOLookAt(new Vector3(10,10,10),2);
        //Scale
        //transform.DOScale(Vector3.one*2,2);

        //来回弹跳 第一个参数:位置 方向 第二个参数:持续时间 第三个参数:弹跳次数(频率) 第四个参数:越大向相反方向移动越大
        //transform.DOPunchPosition(new Vector3(0,5,0),4,3,0);

        //shake 1:持续时间 2:范围 3:频率
        //transform.DOShakePosition(2,new Vector3(2,2,2),5);
        //transform.DOShakeRotation(2,new Vector3(90,90,90),2);

        //blend 动画混合 增量动画
        //transform.DOBlendableMoveBy(new Vector3(2, 2, 2), 2);
        //transform.DOBlendableMoveBy(new Vector3(-1, -1, -2), 2);
        //transform.DOBlendableRotateBy(new Vector3(0,90,0),2);

        //materail 
        //Material material = GetComponent<MeshRenderer>().material;
        //material.DOColor(Color.red,2);//shader必须有_Color属性 否则 DoColor(Color.red,"_OtherColor",2)
        //material.DOFade(0,2); material.DOColor(Color.clear,2)//变透明 两种
        //material.DOGradientColor(_gradient, 2);  //颜色渐变
        //material.DOOffset(new Vector2(10,20),2); //贴图偏移
        //material.DOVector(new Vector4(1,1,1,1),"",2); // 修改shader属性值
        //颜色混合
        //material.DOBlendableColor(Color.red,2);
        //material.DOBlendableColor(Color.blue,2);

        //动画队列 依次执行动画
        //Sequence sequence = DOTween.Sequence();
        //sequence.Append(transform.DOMove(new Vector3(2,2,2),2));
        //sequence.Join(transform.DOScale(Vector3.one*3,4));   //加入到上一个动画一起执行 ↑
        //sequence.AppendInterval(2);//等待两秒
        //sequence.Append(transform.DOMove(new Vector3(2,0,8),2));
        //sequence.Join(transform.DOScale(Vector3.one,2));
        //sequence.Insert(2,transform.DOMove(-Vector3.one,1)); //插入动画 1:哪个时间插入 2:动画;一秒后移动到-1,-1,-1
        //sequence.Prepend(transform.DOMove(new Vector3(-2,-2,-2),2)); // 预添加 后添加先执行

        //sequence.InsertCallback(5,InsertCallback); //在第五秒插入回调函数
        //transform.DOMove(new Vector3(3,3,3),2).SetLoops(-1,LoopType.Incremental); // Yoyo来回循环 单边算一次 Restart 重头再来  Incremental 增量的形式
        //transform.DOMove(new Vector3(2,2,2),2).From();//从目标点到起始点 From 参数为true则为增量
        //transform.DOMove(Vector3.one,2).SetDelay(3);//设置延迟多少秒后执行动画 单位秒
        //transform.DOMove(Vector3.one,2).SetSpeedBased();//2代表移动速度 设置以速度为基准
        //transform.DOMove(Vector3.one*3,2).SetRelative(true);//相对运动 即增量运动
        //transform.DOMove(Vector3.one * 3, 2).SetId("Ani1");//设置动画ID 方便再次使用
        //transform.DOMove(Vector3.one * 3, 2).SetId("Ani2").SetRelative(true).SetRecyclable(true);//设置是否可回收
        //transform.DOMove(Vector3.one * 2, 2 ).SetUpdate(UpdateType.Fixed); // 设置帧动画更新类型 normal普通 fixed late
        //Time.timeScale = 0;
        //transform.DOMove(Vector3.one * 10, 5).SetUpdate(UpdateType.Normal,true) ; //不受unity Time.timeScale影响
        //transform.DOMove(Vector3.one*5,2).SetEase(Ease.InBack);//设置动画速度变化的运动曲线
        //transform.DOMove(Vector3.one * 5, 2).SetEase(Ease.Flash,10,1); //10 震动次数 1 从大到小
        //transform.DOMove(Vector3.one*2,2).SetEase(_Curve);//可以用Unity自带的AnimationCurve动画曲线来设置速度变化的曲线
        //transform.DOMove(Vector3.one*2,1).SetEase(EaseFunc);//通过自己编写的曲线函数来设置速度变化的曲线
        //生命周期的回调函数
        //transform.DOMove(Vector3.one * 2, 2).SetLoops(3,LoopType.Yoyo)
        //    .OnRewind(() => { Debug.Log("OnRewind"); })
        //    .OnStart(() => { Debug.Log("OnStart"); })
        //    .OnUpdate(()=> { Debug.Log("OnUpdate"); })
        //    .OnPlay(()=> { Debug.Log("OnPlay"); })
        //    .OnComplete(() => { Debug.Log("OnComplete"); })
        //    .OnStepComplete(()=>{ Debug.Log("OnStepComplete"); })
        //    .OnKill(() => { Debug.Log("OnKill"); });
        //控制函数
        //transform.DOMove(Vector3.one * 2, 2);
        //await Task.Delay(TimeSpan.FromSeconds(1));
        //transform.DOPause();//暂停
        //transform.DOPlay();//开始播放
        //transform.DORestart();//重新播放
        //transform.DORewind();//倒播 一下子回到起始点  播放完不回倒
        //transform.DOSmoothRewind();//倒播 平滑的回到起始点 播放完不回倒

        //transform.DOMove(Vector3.one * 2, 2);
        //await Task.Delay(TimeSpan.FromSeconds(1));
        //transform.DOFlip();  //动画翻转 终点变为起始点

        //transform.DOGoto(1,true);//跳转到动画第几秒,true 接着播放动画
        //transform.DOPlayBackwards();//倒放
        //transform.DOTogglePause();//暂停开始开关;暂停是调用则播放,播放时调用则暂停

        //List<Tween> list = DOTween.PausedTweens(); // 获取所有暂停的动画
        //List<Tween> list2 = DOTween.PlayingTweens();//获取所有正在播放的动画
        //DOTween.TweensByTarget(transform,true);  获取目标的动画,为true表示正在播放的动画

        //Tweener tweener = transform.DOMove(Vector3.one * 2, 2);
        //await Task.Delay(TimeSpan.FromSeconds(1));
        //Debug.Log(tweener.fullPosition);
        //await Task.Delay(TimeSpan.FromSeconds(1));
        //tweener.fullPosition = 0; // 动画播放的时间点 (可读可写) 修改后可以从另一个时间点运动
        //tweener.Elapsed(); // 已运动的时间  true 包括循环 false 不包括
        //tweener.ElapsedPercentage();//同上 不过是百分比

        //通过协程执行回调
        //_tweener = transform.DOMove(Vector3.one * 2, 2).SetLoops(3);
        //StartCoroutine(Wait());

        //路径动画
        var posiList = positions.Select(t => t.position).ToArray() ;
        //路径点 持续时间 路线类型(直线 曲线) 路径类型 路线精细程度 路线颜色 
        transform.DOPath(posiList, 5, PathType.Linear, PathMode.Full3D, 50, Color.blue)
            .SetOptions(true, AxisConstraint.X, AxisConstraint.Y); //true收尾相连 锁定x轴位移(x值不发生变化) 锁定Y轴旋转

           
    }
    private IEnumerator Wait()
    {
        //yield return _tweener.WaitForCompletion(); // 动画执行完成
        yield return _tweener.WaitForElapsedLoops(3); // 循环执行几次后
        Debug.Log("DDD");
    }


    // Update is called once per frame
    void Update () {
        if (Input.GetKeyDown(KeyCode.W))
        {
            DOTween.Play("Ani2");
        }
    }

    void InsertCallback()
    {
        print("插入回调函数");
    }

    /// <summary>
    /// 运动曲线回调函数
    /// </summary>
    /// <param name="time">当前运行到某时刻</param>
    /// <param name="duration">总共的运行时间--持续时间</param>
    /// <param name="overshootOrAmplitude">振幅</param>
    /// <param name="period">期间 范围</param>
    /// <returns>运动路程与总路程的比值</returns>
    private float EaseFunc(float time, float duration, float overshootOrAmplitude, float period)
    {
        return time/duration;//匀速运动到终点
    }
}


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容