Dotween

作者: 荼蘼toome | 来源:发表于2020-08-12 16:39 被阅读0次

    Dotween动态效果插件
    https://blog.csdn.net/zcaixzy5211314/article/details/84988535

    广泛用于UI效果,点击效果 相当于扩展插件的库

    (DotweenPro收费版 免费版free)

    获取插件放到项目的新建文件夹Plugins中

    或者在Asset Store商店中导入import(新版本中)

    image.png image.gif ​点击 image.png image.gif

    image.png image.gif

    就可以了

    图片.png
    点击Documentation 官网上了解
    http://dotween.demigiant.com/documentation.php
    图片.png

    有点晕晕的,查看该方法详解
    https://www.cnblogs.com/Damon-3707/p/11367585.html

    02-物体移动和旋转的方法

    引用命名空间
    
    using DG.Tweening;
    
     //单轴移动  目标位置,移动时间
            transform.DOMove(Vector3.one,2);
            //世界坐标
            transform.DOLocalMoveX(1, 2);
            //局部坐标  
            transform.DOLocalMove(Vector3.one, 2);
            //旋转  只有整体改变的没有单坐标的
            transform.DORotate(Vector3.zero,2);
            //局部旋转
            transform.DOLocalRotate(Vector3.zero, 2);
    
    rotate旋转
            //旋转  只有整体改变的没有单坐标的
            transform.DORotate(Vector3.zero,2);
            //局部旋转
            transform.DOLocalRotate(Vector3.zero, 2);
            //资源树   旋转到提供的位置   使用较少,难度高
            transform.DORotateQuaternion(new Quaternion(0.1f,0.1f,0.1f,0.1f),2);
             // 慢慢看向这个位置   
            transform.DOLookAt(Vector3.one,2);
     //scale缩放部分
            //man --kuai -man  平滑曲线
            //transform.DOScale(Vector3.one*2,2);
    
            /*弹弹弹   第一个参数 punch 运动的方向  力的大小 
              第二个参数 duration持续时间
              第三个参数 震动次数(频率)
              第四个参数0-1  
            当它为0的时候 从起始点
             */
            // transform.DOPunchPosition(new Vector3(0,1,0),2,2,0.1f);
          //参数是一样的,运用到不同的地方
            //transform.DOPunchRotation(new Vector3(0, 1, 0), 2, 2, 0.1f);
           //transform.DOPunchScale(new Vector3(0, 1, 0), 2, 2, 0.1f);
    
    

    Shake函数的使用

    /***
         * 
         * Shake函数
         * 震动函数
         * duration持续时间
         * strength力量强度(振幅)
         * vibrato次数  默认 10
         * tandomness随机角度 默认90
         * 
         * **是否淡入弹出
         * 
         * 特别适用于相机
         * transform.DOShakePosition(2,Vector3.one,10,90);
         */
    

    Tip
    /**
    * 老版本都会执行,产生效果
    * 新版本只会执行最新的一行
    * transform.DOMove(Vector3.one,2);
    transform.DOMove(Vector3.one*2, 2);
    */
    关于移动的曲线参考文章ease
    https://blog.csdn.net/zcc858079762/article/details/81279828

    Blend函数的使用

      //blend  将正常的两个坐标合在一起  动画混合  先进行计算,后显示
            //transform.DOBlendableMoveBy(Vector3.one , 2);
            // transform.DOBlendableMoveBy(-Vector3.one , 2);
             //只有一个punch方法 
                transform.DOBlendablePunchRotation(-Vector3.one * 2, 2);
          
    

    /** 材质material改变颜色动画 */

      //获取子的材质球
            Material material = GetComponent<MeshRenderer>().material;
            //设置颜色
            material.DOColor(Color.red,2);
    
          //通过shaders改变颜色--适用于没有maincolor的材质
            // material.DOColor(Color.red,"_Color", 2);
            //material.SetColor("_Color",Color.red);
    
            //透明  颜色的值,是一个四维向量,最后一位 阿尔法 是0
            //material.DOColor(Color.clear,1);
            //淡入透明所需要的时间  
       
    

    Tip:中间最好指定名字
    默认设置_Color的值
    (为空报错)

    //需要把unity中shader材质修改particles/Standard Unlit
    //Blending Options Rendering Mode改成Fade
    结合代码一起使用

    小测试

      //  Material material = GetComponent<MeshRenderer>().material;
      //Material[] material;
            ////material = GameObject.Find("Quad").GetComponent<MeshRenderer>().material;
            //GameObject[] gos = GameObject.FindGameObjectsWithTag("Player");
            //material = new Material[gos.Length];
            //for (int i = 0; i < gos.Length; i++)
            //{
            //    material[i] = gos[i].GetComponent<MeshRenderer>().material;
            //    material[i].DOFade(0, "_Color", 10-i*2);
            //}
            GameObject cube1 = GameObject.Find("Cube (1)");
            cube1.transform.DOMove(new Vector3(1,1,1),5).SetEase(Ease.Linear);
    

    材质颜色渐变动画

    图片.png
         颜色渐变Gradient
    
        首先定义一个_gradient   在unity中该脚本产生出颜色渐变器工具
    
        Alpha值代表透明度0-255
        上面的代表透明度
    
        下面的代表颜色
    
    
       //让unity上面指定的颜色显示
     `material.DOGradientColor(_gradient,2);`
    

    Tip:

    图片.png
    看到并非是在物体中绑定的脚本
    创建一个脚本解决多个物体问题
    在脚本中:1. Material material;声明
    material = GameObject.Find("Quad").GetComponent<MeshRenderer>().material;查找组件的子材质
    即可
    》2. //Material material = GetComponent<MeshRenderer>().material;//挂在物体上的脚本 获得组件的子才子
    1. //获取多个子的材质球 让他逐渐透明
      `

      Material[] material;
      GameObject[] gos = GameObject.FindGameObjectsWithTag("Player");
      material = new Material[gos.Length];
      for (int i = 0; i < gos.Length; i++)
      {
          material[i] = gos[i].GetComponent<MeshRenderer>().material;
          material[i].DOFade(0, "_Color", 10-i*2);
      }
      

    `

    >  /*
         * GameObject cube1 = GameObject.Find("Cube (1)");
        cube1.transform.DOMove(new Vector3(1,1,1),5).SetEase(Ease.Linear);
        */
    

    材质Offet的使用及DOVector的作用

    改变材质offset的值
    material.DOOffset(new Vector2(1, 1), 2);
    不常用
    改变提供的shader属性的名称对应的Vector4值
    material.DOVector(new Vector4(0, 0, 0, 1), "_Color", 3);

    10-材质的颜色混合

    DOColor同时执行两个会执行最新的那个
    * material.DOColor(Color.red,"_Color",2);
    * material.DOColor(Color.green, "_Color", 2);
    * 将 红色-绿色 混合在一起 变成了黑色

        `material.DOBlendableColor(Color.red,"_Color", 2);`
       ` material.DOBlendableColor(Color.green, "_Color",2);`
    

    11-相机拓展方法(一)

    //Camera camera = GetComponent<Camera>();
    ////改变屏幕的宽高比
    //camera.DOAspect(0.5f,2);
    ////改变颜色
    //camera.DOColor(Color.red,2);
    //启用协程
    StartCoroutine(ChangeColor());

    /// <summary>
        ///  创建协程方法
        /// </summary>
        IEnumerator ChangeColor() {
            Camera camera = GetComponent<Camera>();
            //这个颜色是渐变的,时间越长效果突出
            camera.DOColor(Color.red, 0.1f);
            yield return new WaitForSeconds(0.1f);
            camera.DOColor(Color.blue, 5);
            yield return new WaitForSeconds(5);
            camera.DOColor(Color.red, 0.1f);
            yield return new WaitForSeconds(0.1f);
            camera.DOColor(Color.blue, 5);
        }
    
        //近切面
        camera.DONearClipPlane(2,2);
        //远切面
       // camera.DOFarClipPlane(2,2);
    

    camera.DOFieldOfView(1,5);

    • 改变相机正交视域的大小
      * Projection 投射,放映
      * 默认的是Perspective透视的

       *   Orthographic正交
      
       *   camera.DOOrthoSize(1,20);
      

    关于unity服务器蹦调loading打不开
    https://blog.csdn.net/qq_42351033/article/details/85998157?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

    13-相机分屏效果实现

    渐变的改变相机的像素区域
    new Rect(x轴 y轴 w宽 h高)

    camera.DOPixelRect(new Rect(360,0,500,500),2);

    方式二

    使用百分比
    多相机实现分屏效果的方式
    新建相机Main Camera
    xy的位置坐标修改一下
    camera.DORect(new Rect(0, 0, 500, 500),3);

    14-相机晃动效果实现

    /**14-相机晃动效果实现
    * 传递参数: duration持续时间
    * strendth强度
    * vibrato震动次数
    * 可忽略参数
    * randomness随机参数
    * fade是否淡入
    *
    */
    camera.DOShakePosition(2,10,10);

    15-Text拓展方法介绍

    /**15-Text拓展方法介绍
    * 需要在unity中创建一个text
    */
    Text text = GetComponent<Text>();
    text.DOColor(Color.red,2);
    //实现文字一个字一个字的往外蹦 10秒内打完 速度先快后慢后快
    text.DOText("hahahahhahahaahah",10).SetEase(Ease.Linear);//设置为匀速

    以上皆是DoTween对Unity封装的一些方法,下面记录些关于它自身的一些方法使用

    16-队列—添加动画及添加延时

    队列:根据队列一个一个的执行对话
    //生成一个对象
    //方法一
    Sequence quence = DOTween.Sequence();
    //缓存其他对象的方法,做一些便利的操作 可用性较高
    quence.Append(transform.DOMove(-Vector3.one,2));//把一项加入
    quence.AppendInterval(1);//添加延时 //先执行第一个,然后依次执行 //方法二quence.Append(transform.DOMove(new Vector3(1, 0, 1), 2));//把一项加入`

    17-队列—插入动画用法

           在帧函数中,按顺序执行
             帧被多次执行,则覆盖之前的帧
             
              添加到空白动画    比如第8s.... 
        
        `Sequence quence = DOTween.Sequence();`
       `quence.Append(transform.DOMove(Vector3.one, 2));//把一项加入 0-2s`
     `quence.AppendInterval(1);//添加延时1s        2-3s`
        `quence.Append(transform.DOMove(new Vector3(1, 0, 1), 2));//把一项加入  3-5s`
       ` quence.Insert(2, transform.DOMove(-Vector3.one, 1));//在0s插入动画`
    

    18-队列—加入方法的用法

           quence.Insert(3, transform.DOScale(Vector3.one*2, 2));
            quence.Join(transform.DOScale(Vector3.one,4));
    

    脚本挂载在游戏物体上,测试的时候忽略了。。。。我给挂载在摄像机上了emmmm

    19-队列—预添加方法的用法

    预添加 会直接添加动画到Append的前面,也就是最开始的时候
    quence.Prepend(transform.DOScale(Vector3.one * 0.5f, 1));
    这里需要特别说一下预添加的执行顺序问题
    它这里也采取了队列的性质,不过,预添加与原本的的队列相比是一个反向队列

    quence.PrependInterval(1);//添加延时1s 
            quence.Prepend(transform.DOMove(-Vector3.one*2, 2));
    

    预添加时间间隔
    quence.PrependInterval(1);

    20-队列—回调函数的用法

    quence.InsertCallback(5,InsertCallBack);时间,方法名
    quence.AppendCallback(AppendCallback);在队列中需要回调的地方加入

     /// <summary>
        /// 方法一   等待时间的回调函数
        /// </summary>
        private void InsertCallBack() {
            Debug.Log("回调函数");
        }
        /// <summary>
        ///  方法二 队列中的回调函数
        /// </summary>
        private void AppendCallback(){
            Debug.Log("队列中回调函数");
        }
    

    21-设置参数—参数设置方法及循环的设置

    SetLoops
    参数 循环次数 -1是无限循环 正数,就对应相应的循环次数
    循环方式 LoopType.Yoyo 只来回播放、 (一来一回,一个周期)
    LoopType.Restart 运动到后面闪回来,继续跑
    LoopType.Incremental 一直朝一个方向走 中间会等一会(一个单位一个周期)
    ```
    transform.DOMove(Vector3.one, 2).SetLoops(3, LoopType.Yoyo);
    transform.DOMove(Vector3.one, 2).SetLoops(3, LoopType.Restart);
    transform.DOMove(Vector3.one,2).SetLoops(3,LoopType.Incremental);

    >设置自动杀死动画
    不然,会缓存到DoTween内部数据中
     transform.DOMove(Vector3.one, 2).SetLoops(3, LoopType.Incremental).SetAutoKill(true);
           
    ###22-设置参数—From补间动画 
             *设置反向动画  。From()  从目标点运动回去
             *
             *From(true)  成为一个增量
             *从目标点Vector3.one作为一个向量(包含方向,大小)
             *即当前坐标 + 传入值 = 目标值
             *
             *falese,传入的就是目标值,即传入值 = 目标值
             */
            //        transform.DOMove(Vector3.one, 2).SetLoops(3, LoopType.Incremental).From();
            transform.DOMove(Vector3.one, 2).From(true);
    
    ###设置参数—设置延时及以速度为基准的动画 
    
    延迟了3s才执行
             *transform.DOMove(Vector3.one,2).SetDelay(3);
             *
             *目标点  速度
             *transform.DOMove(Vector3.one,3).SetSpeedBased();
             *
             *参数 true 以速度为基础
             *transform.DOMove(Vector3.one,3).SetSpeedBased(true);
             *
             *false则不是
    
    ###设置参数—设置ID及设置动画为增量运动 
     /**24-设置参数—设置ID及设置动画为增量运动 
             *
             */
            //设置动画ID   参数 int string object(不建议使用,设计装箱拆箱)
            transform.DOMove(Vector3.one, 2).SetId("Id");
            //可以调用静态方法    调用缓存的动画   减少性能
            //DOTween.Play("Id");
    
            //增量运动   当前坐标 + 传入值 = 目标值
            transform.DOMove(Vector3.one, 3).SetRelative(true);
    
            //是否可回收
            transform.DOMove(Vector3.one,3).SetRecyclable(true);
    
    ###设置动画的帧函数
    transform.DOMove(Vector3.one, 2).SetUpdate(UpdateType.Normal, true);
    第一个参数 UpdateType :选择使用的帧函数
    UpdateType.Normal:更新每一帧中更新要求。 
    UpdateType.Late:在LateUpdate调用期间更新每一帧。 
    UpdateType.Fixed:使用FixedUpdate调用进行更新。 
    UpdateType.Manual:通过手动DOTween.ManualUpdate调用进行更新。
    第二个参数:为TRUE,则补间将忽略Unity的Time.timeScale
    
    ###Ease 运动曲线的设置
    1)以Ease枚举作为参数
    例如:
    transform.DOMove(Vector3.one, 2).SetEase(Ease.Flash, 3, 0f);
    第二个参数 Amplitude(振幅):实际就是移动次数,起始点移动到目标算移动一次,再移动回来移动两次
    第三个参数 period 值的范围是 - 1~1      
    值 > 0时,为活动范围的衰减值,活动范围会由大变小
    值 = 0时,就是均匀的在起始坐标和目标坐标之间运动
    值 < 0时,会施加一个向目标坐标的一个力,活动范围一点点增大,最后逼近目标点
    这两个参数只对Flash, InFlash, OutFlash, InOutFlash这四种曲线有用,其他的曲线起作用的就只有Ease枚举参数
    运动曲线—Flash曲线的用法讲解 
    
    2)使用AnimationCurve当作参数 运动曲线—AnimationCurve设置曲线 
    例如:
    transform.DOMove(Vector3.one * 2, 1).SetEase(curve);
    AnimationCurve 横轴是时间,不过不是具体的时间,而是时间比例
    AnimationCurve 纵轴是倍数
    假设纵轴的值为v,传入DOMove的第一个参数endValue是e,起始点坐标是s
    此物体最后动画结束时的实际坐标即为 v* (e -s)+ s
    
    3)以回调函数为参数
    例如:
    `transform.DOMove(Vector3.one * 2, 1).SetEase(MyEaseFun);`
    
    //返回值是运动距离的百分比 值应为0~1之间,最后的值需为1,不然停留的位置不会是目标位置
    

    private float MyEaseFun(float time, float duration, float overshootOrAmplitude, float period)
    {
    return time / duration;
    }

    
    (4) 回调函数
    1)动画完成回调
    `transform.DOMove(Vector3.one, 2).OnComplete(() => { });`
    >注意首字母大写  调用lamda表达式
    2)动画被杀死时回调
    transform.DOMove(Vector3.one, 2).OnKill(() => { });
    
    3)动画播放时回调,暂停后重新播放也会调用
    transform.DOMove(Vector3.one, 3).OnPlay(() => { });
    
    4)动画暂停时回调
    transform.DOMove(Vector3.one, 2).OnPause(() => { });
    
    5)动画回退时回调
    以下情况会被调用
    使用DORestart重新播放时
    使用Rewind倒播动画完成时
    使用DOFlip翻转动画完成时
    使用DOPlayBackwards反向播放动画完成时
    transform.DOMove(Vector3.one, 2).OnRewind(() => { });
    
    6)只在第一次播放动画时调用,在play之前调用
    transform.DOMove(Vector3.one, 2).OnStart(() => { });
    
    7)完成单个循环周期时触发
    transform.DOMove(Vector3.one, 2).OnStepComplete(() => { });
    8)帧回调
    transform.DOMove(Vector3.one, 2).OnUpdate(() => { });
    
    9)在路径动画时,改变目标点时的回调,参数为当前目标点的下标
    transform.DOMove(Vector3.one, 2).OnWaypointChange((value) => { });
    
    >  DoRewing直接闪到起点重新播放
            DOSmoothRewing平滑倒退
            DOFlip反转 起始点变成目标点
         Goto 很少有人用,直接推翻逻辑
              DOGoto(1,true)跳转到时间点 
    
    ###动画控制方法
    1)播放
    transform.DOPlay();
    
    2)暂停
    transform.DOPause();
    
    3)重播
    transform.DORestart();
    
    4)倒播,此方法会直接退回起始点
    transform.DORewind();
    
    5)平滑倒播,此方法会按照之前的运动方式从当前位置退回起始点
    transform.DOSmoothRewind();
    
    6)杀死动画
    transform.DOKill();
    
    7)翻转补间的方向
    transform.DOFlip();
    
    8)跳转时间点
    第一个参数跳转的时间点,第二个参数是跳转后是否播放动画
    transform.DOGoto(1.5f, true);
    
    9)反向播放动画
    反向播放动画,在动画播放到一半时执行,会退回起始点,在一开始执行看不到效果是因为,物体本身就在起始点
    transform.DOPlayBackwards();
    
    10)正向播放动画
    正向播放动画
    transform.DOPlayForward();
    
    11)TogglePause
    当暂停时,执行就继续播放,播放时,执行就暂停
    transform.DOTogglePause();
    
    >DOTogglePause()适用于for循环
    包含了
    1)播放
    transform.DOPlay();
    
    2)暂停
    transform.DOPause();
    两种方法
    但并非明确指定,需要理逻辑
    
    ### 获取数据方法
    一、类方法
    1)返回所有暂停的动画,没有则返回null
    DOTween.PausedTweens();
    
    2)返回所有真正播放的动画,没有则返回null
    DOTween.PlayingTweens();
    
    3)获取给定ID的数组
    例如:
    DOTween.TweensById("id", true);
    返回满足条件的动画数组
    第一个参数是动画的ID
    第二个参数是是否只收集正在播放的动画
    
    4)返回给定对象的数组
    例如:
    DOTween.TweensByTarget(transform, true);
    返回满足条件的动画数组
    第一个参数是播放动画的对象
    例如:transform.DOMove(Vector3.one, 2); 第一个参数就传入transform
    material.DOColor(Color.White, 2); 第一个参数就传入材质对象material
    第二个参数是是否只收集正在播放的动画
    
    5)收集传入的对象是否有动画在活动
    例如:
    DOTween.IsTweening(transform);
    第一个参数为检测的对象
    第二个参数为是否检测动画在播放状态
    为true时,给定对象在播放状态时 返回true
    为false时,只检测给定对象是否有动画(在pause状态时也算)有则返回true
    
    6)正在播放的动画的总数,目前处于延迟播放状态的动画也算
    DOTween.TotalPlayingTweens();
    
    ###二、实例方法
    _tweener = transform.DOMove(Vector3.one, 2)
    
    1)表示动画执行时间的属性,可读可写
    _tweener.fullPosition = 1;
    
    2)表示动画执行完的次数
    _tweener.CompletedLoops()
    
    3)获取动画的延迟时间
    _tweener.Delay();
    
    4)获取动画的持续时间
    参数为true 表示计算循环的时间,无限循环为Infinity
    _tweener.Duration(false)
    
    5)动画已播放的时间
    参数为true 表示计算循环的时间
    _tweener.Elapsed()
    
    6)返回动画进度的百分比
    起始点为0 目标点为1 当yoyo循环模式下,值会从0变到1再从1变到0
    _tweener.ElapsedDirectionalPercentage()
    
    7)返回动画区间已用的百分比
    单次循环的数值为0到1
    参数为 是否包含循环 为true时 返回值是循环总区间的已用百分比 若为无限循环 返回值为0
    _tweener.ElapsedPercentage(true)
    
    8)动画是否在活动
    _tweener.IsActive();
    
    9)是否是反向动画
    _tweener.IsBackwards();
    
    10)动画是否完成
    _tweener.IsComplete();
    
    11)是否以初始化
    _tweener.IsInitialized();
    
    12)是否正在播放
    _tweener.IsPlaying();
    
    13)返回循环次数, 无限循环为Infinity
    _tweener.Loops();
    
    (7) 携程方法
    private IEnumerator Wait()
    {
    _tweener = transform.DOMove(Vector3.one, 2);
    
    1)等待动画执行完
    yield return _tweener.WaitForCompletion();
    
    2)等待指定的循环次数
    参数为执行次数,等待传入的循环次数后,继续执行
    若是传入的次数大于动画的循环次数 则在动画结束时继续执行
    yield return _tweener.WaitForElapsedLoops(2);
    
    3)等待动画被杀死
    yield return _tweener.WaitForKill();
    
    4)等待动画执行指定时间
    参数为时间,动画执行传入的时间之后或动画执行完毕,继续执行
    yield return _tweener.WaitForPosition(0.5f);
    
    5)等待动画回退
    以下情况会继续执行函数
    使用DORestart重新播放时
    使用Rewind倒播动画完成时
    使用DOFlip翻转动画完成时
    使用DOPlayBackwards反向播放动画完成时
    yield return _tweener.WaitForRewind();
    
    6)等待Start执行后继续执行
    yield return _tweener.WaitForStart();
    }
    
    ###
    /**路径动画—位置参数 
             * DOPath局部   DoLocalPath
             * 实现可视化操作
             * 公有字段,保存点
             * public Transform[] PointList;
             * 
             * 简便获取数组的参数
             * 1.位置  
             * 2.持续时间 
             * 3.运动曲线 
             *      PathType.Linear直线运动  
             *      PathType.CatmullRom 曲线运动
             *      
             * 4.LookAt朝向PathMode.Full3D
             * 参数
             * Ignord=0 会忽略lookAt
             * Full3D=1 常规的3D效果 相当于没有限制的lookAt
             * TopDown2D=2 朝向只能上下的改变
             * Sidescroller2D=3  朝向只能左右的改变
             * 
             * 5.分辨率 50
             * 0-100 消耗性能逐渐高
             * 
             * 6.路径颜色Color.blue
             * 默认白色
             * 
     * SetOptions画的圈是否是闭合的  
             * true完整的回路
             * SetOptions(true,AxisConstraint.Z).
             * AxisConstraint轴向枚举 锁定轴 会变成单方面运动
             * --AxisConstraint.None取消锁定
             * 
             * 锁定旋转
             * AxisConstraint.Y
             * 跟上面一样,只是参数的传递位置不一样
             * 
             * 
             * SetLookAt(0)看向路径的前方
             * 0-1之间
             * SetOptions(true)开始时确定方向后就不会变化了
             * 是否是闭合运动对它有一定的影响
             * false,运动最后,物体的朝向移动是路径的运动方向的前方
             * 
             */
            //Vector3[] positons = PointList.Select(u=>u.position).ToArray();
            //Vector3[] positons = new Vector3[] { new Vector3(0,0,0), new Vector3(2, 0, 0), new Vector3(0, 0, -2), new Vector3(2, 0, -2) };
            //ositons[2] = new Vector3();
    
            var positons = PointList.Select(u => u.position).ToArray();
            transform.DOPath(positons, 2, PathType.CatmullRom,PathMode.Full3D,50,Color.red)
                .SetOptions(true,AxisConstraint.None,AxisConstraint.Y).SetLookAt(0);
    
    
    
    DOTween常用方法详解
    http://www.manongjc.com/detail/10-femzgrokaxuqdnx.html
    

    相关文章

      网友评论

        本文标题:Dotween

        本文链接:https://www.haomeiwen.com/subject/xzjpdktx.html