• DoTween简单的API,以及一些回调


    Transform组件的Dotween

    Unity 版本Unity2021 1.18f1c1
    DoTween版本DOTween_1_2_632
    IDEvs2022
    系统版本win 10
    撰写日期2022年8月

    在两个旋转之间来回切换

    		//类似汽车的雨刮器
            gameObject.transform.DOLocalRotate(new Vector3(0, 0, 90), 2).SetLoops(-1,LoopType.Yoyo);
    
    • 1
    • 2
    		//用两秒钟渐变的旋转到90度,以最短距离
            gameObject.transform.DORotate(new Vector3(90f, 0f, 0f), 2,RotateMode.Fast);
    
     1. RotateMode.Fast 最快的方式
     2. FastBeyond360 旋转超过360度
     3. WorldAxisAdd 没搞明白
     4. LocalAxisAdd  将给定的旋转添加到转换的局部轴(就像在Unity的编辑器中启用“局部”开关或使用transform. rotate (Space.Self)旋转一个对象)。在这种模式下,最终值总是被认为是相对的 (没搞明白)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    		//看向某个目标,只会旋转一次
            gameObject.transform.DOLookAt(cu.transform.position, 2);
    
    • 1
    • 2

    在两个点之间坐标进行切换

    		//在当前位置与Vector3(4f,4f,4f)之间来回切换,往返的
            gameObject.transform.DOMove(new Vector3(4f, 4f, 4f),2).SetLoops(-1,LoopType.Yoyo);
    
    • 1
    • 2
    	//在当前位置与Vector3(4f,4f,4f)之间来回切换,耗时2s,每次都从开始点进行
            gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(-1,LoopType.Restart);
    
    • 1
    • 2
    		//gameobject在两个点   new Vector3(5, 5f, 5f)  之间进行跳跃
            gameObject.transform.DOLocalJump(new Vector3(5, 5f, 5f), 2f, 1, 1).SetLoops(-1,LoopType.Yoyo);
           //DOLocalJump(Vector3 endValue, float jumpPower, int numJumps, float duration, bool snapping)
           //endValue 结束点
           //jumpPower 跳跃的力量,Y轴的高度
           //duration 跳跃的总数,分几次跳跃到目标位置
           //snapping 是否平滑,True不平滑,Flase平滑
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    来回膨胀和变小

    就像是心脏的跳动一样
            gameObject.transform.DOScale(new Vector3(3f,3f,3f),2).SetLoops(-1,LoopType.Yoyo);
    
    • 1
    • 2
    //旋转到指定的大小
            gameObject.transform.DOScale(new Vector3(3f, 3f, 3f), 2);
    
    • 1
    • 2

    Material.Color

        private Color _OrgionColor = Color.black;
        private Color _TargetColor = Color.green;
    
        private void Start()
        {
           //可用于提示闪烁效果
            gameObject.GetComponent().material.color = _OrgionColor;
            gameObject.GetComponent().material.DOColor(_TargetColor, 2).SetLoops(-1, LoopType.Yoyo).SetId("DotweenAni");
            //获取材质,设置目标颜色,设置切换次数,切换模式,设置ID。
    		
                DOTween.Kill("DotweenAni");//在想要停止的地方调用,可以停止动画
    
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    可以多个动画同时播放

    //很复杂我描述不出来
            gameObject.transform.DOScale(new Vector3(4f, 4f, 4f), 2).SetLoops(-1,LoopType.Yoyo);
            gameObject.GetComponent().material.DOColor(Color.black, 2).SetLoops(-1, LoopType.Yoyo);
            gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(-1, LoopType.Yoyo);
            gameObject.transform.DORotate(new Vector3(180f,180f,180f),2).SetLoops(-1,LoopType.Yoyo);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    使用回调

    OnComplete_播放结束时调用

    yoyo的次数为-1则不会被调用
    在运动三次后调用OnComplete

      private void Start()
        {
            gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(3, LoopType.Yoyo).OnComplete(MyCallBack);
        }
    
    
        private void Update()
        {
            if (Input.GetKeyDown(KeyCode.A))
            {
                DOTween.Kill("ha");
            }
        }
    
        private void MyCallBack()
        {
            Debug.Log("哈哈哈");
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    OnKill_被杀死的时候调用

      private void Start()
        {
            gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(-1, LoopType.Yoyo).OnComplete(MyCallBack).SetId("ha");
        }
    
    
        private void Update()
        {
            if (Input.GetKeyDown(KeyCode.A))
            {
                DOTween.Kill("ha");//按下A会调用回调
            }
        }
    
        private void MyCallBack()
        {
            Debug.Log("哈哈哈");
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    OnPlay_在开始播放的时候调用

    在按下暂停然后再播放的时候会调用,第一次自动播放会调用

      private void Start()
        {
            gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(-1, LoopType.Yoyo).OnPlay(MyCallBack).SetId("ha");
        }
    
    
        private void Update()
        {
            if (Input.GetKeyDown(KeyCode.A))
            {
                DOTween.Pause("ha");
            }
            if (Input.GetKeyDown(KeyCode.D))
            {
                DOTween.Play("ha");
            }
        }
    
        private void MyCallBack()
        {
            Debug.Log("哈哈哈");
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    OnPause_在暂停的时候调用

    播放的时候按下一次调用一次

     private void Start()
        {
            gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(-1, LoopType.Yoyo).OnPause(MyCallBackPause).SetId("ha");
        }
    
    
        private void Update()
        {
            if (Input.GetKeyDown(KeyCode.A))
            {
                DOTween.Pause("ha");
            }
            if (Input.GetKeyDown(KeyCode.D))
            {
                DOTween.Play("ha");
            }
        }
    
        private void MyCallBack()
        {
            Debug.Log("哈哈哈");
        }
    
        private void MyCallBackPause()
        {
            Debug.Log("暂停的时候调用我");
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    OnStepComplete_往返的时候调用

    加入循环三次
    0-1调用一次
    1-2调用一次
    2-3调用一次
    Loop.Yoyo每次都会调用,0-0不调用

       private void Start()
        {
            gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(-1, LoopType.Yoyo).OnStepComplete(MyCallBackStepComplete).SetId("ha");
        }
    
    
        private void Update()
        {
            if (Input.GetKeyDown(KeyCode.A))
            {
                DOTween.Pause("ha");
            }
            if (Input.GetKeyDown(KeyCode.D))
            {
                DOTween.Play("ha");
            }
        }
    
    
        private void MyCallBackStepComplete()
        {
            Debug.Log("哈哈哈");
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    OnUpdate_在播放的时候就调用

    如果暂停或者杀死就不会调用了。

     private void Start()
        {
            gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2).SetLoops(-1, LoopType.Yoyo).OnUpdate(MyCallBackUpdate).SetId("ha");
        }
    
    
        private void Update()
        {
            if (Input.GetKeyDown(KeyCode.A))
            {
                DOTween.Pause("ha");
            }
            if (Input.GetKeyDown(KeyCode.D))
            {
                DOTween.Play("ha");
            }
        }
    
    
        private void MyCallBackUpdate()
        {
            Debug.Log("哈哈哈");
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    多个回调同时启用

    private void Start()
    {
        gameObject.transform.DOMove(new Vector3(4f, 4f, 4f), 2)
            .SetLoops(-1, LoopType.Yoyo)
            .OnStart(MyCallBackStart)
            .OnUpdate(MyCallBackUpdate)
            .OnPlay(MyCallBackPlay)
            .OnKill(MyCallBackKill)
            .SetId("ha");
    }
    
    
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            DOTween.Pause("ha");
        }
        if (Input.GetKeyDown(KeyCode.D))
        {
            DOTween.Play("ha");
        }
    }
    
    
    private void MyCallBackPlay()
    {
        Debug.Log("OnPlay");
    }
    
    private void MyCallBackStart()
    {
        Debug.Log("开始");
    
    }
    
    
    private void MyCallBackUpdate()
    {
        Debug.Log("哈哈哈");
    }
    
    private void MyCallBackKill()
    {
        Debug.Log("杀死的时候调用我");
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    DoTwenn.To

    using DG.Tweening;
    using UnityEngine;
    
    public class DotweenTest : MonoBehaviour
    {
        void Start()
        {
            DOTween.To(value =>
            {
                //todo something
            }, 1, 30, 5);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    参数说明:1:开始值
    30:结束值
    5花费时间
    todo something :在这段时间(5s内)需要做的事情。

    就这么多,太多了

    请添加图片描述

  • 相关阅读:
    1906. 查询差绝对值的最小值-动态规划算法
    LVGL---走进LVGL
    【浅谈设计模式】装饰器模式篇
    【NOWCODER】- Python:内置函数(三)
    五、DRF 模型序列化器ModelSerializer
    数据结构复杂度分析
    SpringBoot解决LocalDateTime返回数据为数组问题
    23种设计模式(二十二)状态模式(阁瑞钛伦特软件-九耶实训)
    Denoising diffusion implicit models 阅读笔记
    [RK3399] [Firefly-Ubuntu] 1min教你搭建远程桌面
  • 原文地址:https://blog.csdn.net/GoodCooking/article/details/126415256