• Unity---DOTween插件学习(3)---获取数据、协程、路径动画


    本文及系列参考于Andy老师的DOTween系列
    欢迎大家关注Andy老师

    10、获取数据

    类方法

    返回所有暂停的动画,没有则返回null

    var list = DOTween.PausedTweens();
    

    返回所有真正播放的动画,没有则返回null

    var list = DOTween.PlayingTweens();
    

    获取给定ID的数组

    var list = DOTween.TweensById("id", true);
    //第一个参数是动画的ID
    //第二个参数是是否只收集正在播放的动画
    
    

    返回给定对象上播放或缓存的动画数组

    var list = DOTween.TweensByTarget(transform, true);
    //第一个参数是播放动画的对象
    //例如:transform.DOMove(Vector3.one, 2); 第一个参数就传入transform
    //material.DOColor(Color.White, 2); 第一个参数就传入材质对象material
    //第二个参数是是否只收集正在播放的动画
    
    

    检测传入的对象是否有动画在活动

    bool isTween = DOTween.IsTweening(transform);
    //第一个参数为检测的对象
    //第二个参数为是否检测动画在播放状态
    //为true时,给定对象在播放状态时 返回true
    //为false时,只检测给定对象是否有动画(在pause状态时也算)有则返回true
    
    

    正在播放的动画的总数,目前处于延迟播放状态的动画也算

    int allPlaying = DOTween.TotalPlayingTweens();
    

    **实例方法** Tweener _tweener = transform.DOMove(Vector3.one, 2);

    表示动画已经执行时间的属性,可读可写

    _tweener.fullPosition = 1;
    

    表示动画已经执行的次数

    _tweener.CompletedLoops();
    

    获取动画的延迟时间

    _tweener.Delay();
    

    获取动画的持续时间

    //参数为true 表示计算循环的时间,无限循环为Infinity
    _tweener.Duration(false);
    
    

    动画已播放的时间

    //参数为true 表示计算循环的时间
    _tweener.Elapsed();
    
    

    返回动画进度的百分比

    //起始点为0 目标点为1 当yoyo循环模式下,值会从0变到1再从1变到0
    _tweener.ElapsedDirectionalPercentage();
    
    

    返回动画区间已用的百分比

    //单次循环的数值为0到1
    //参数为 是否包含循环 为true时 返回值是循环总区间的已用百分比 若为无限循环 返回值为0
    _tweener.ElapsedPercentage(true);
    
    

    动画是否在活动

    _tweener.IsActive();
    

    是否是反向动画

    _tweener.IsBackwards();
    

    动画是否完成

    _tweener.IsComplete();
    

    是否以初始化

    _tweener.IsInitialized();
    

    是否正在播放

    _tweener.IsPlaying();
    

    返回循环次数,无限循环为Infinity

    _tweener.Loops();
    

    11、携程

    private Tweener _tweener;
    private void Start()
    {
        _tweener = transform.DOMove(Vector3.one, 2);
        StartCoroutine(Wait());
    }
    
    private IEnumerator Wait()
    {
    	yield return ;
    }
    
    

    等待动画执行完

    yield return _tweener.WaitForCompletion();
    

    等待指定的循环次数

    //参数为执行次数,等待传入的循环次数后,继续执行
    //若是传入的次数大于动画的循环次数 则在动画结束时继续执行
    yield return _tweener.WaitForElapsedLoops(2);
    
    

    等待动画被杀死

    yield return _tweener.WaitForKill();
    

    等待动画执行指定时间

    //参数为时间,动画执行传入的时间之后或动画执行完毕,继续执行
    yield return _tweener.WaitForPosition(0.5f);
    
    

    等待动画回退

    //以下情况会继续执行函数
    //使用DORestart重新播放时
    //使用Rewind倒播动画完成时
    //使用DOFlip翻转动画完成时
    //使用DOPlayBackwards反向播放动画完成时
    yield return _tweener.WaitForRewind();
    

    等待Start执行后继续执行

    yield return _tweener.WaitForStart();
    

    12、路径动画

    DOPath的一个使用小案例
    在面板中创建如图的Cube,并如图摆放

    给最上面那个Cube挂载脚本,把下面所有Cube赋值给脚本属性。

    public class CubeText : MonoBehaviour
    {
        public Transform[] pointList;
        
        private void Start()
        {
            var position = pointList.Select(u => u.position).ToArray();
    
            transform.DOPath(position, 5, PathType.Linear).SetOptions(true).SetLookAt(new Vector3(0, 0, 0);
        }
    }
    

    路径动画中DOPath的六个参数

    //参数1 waypoints: 是提供路径上点的坐标,需要按顺序添加进数组
    //参数2 duration:路径动画的整体持续时间
    //参数3 pathType:路径类型(就是点于点之间路径连线的生成方式)
          //Linear:直线
          //CatmullRom:曲线
    //参数4 pathModel: 路径模式(用于确定正确的LookAt方向)
          //Ignore:忽略此参数和设置的LookAt参数
          //Full3D:在3d场景下,代表物体可以看向任何方向
          //TopDown2D:代表物体只能上下旋转,看向物体
          //Sidescroller2D:代表物体只能左右旋转看向物体
    //参数5 resolution:路径分辨率(默认10),代表路径点之间的曲线由多少个点构成,也就是点越多,曲线就越圆,此参数在直线路径类型下无效
    //参数6 gizmoColor:在Scene视图中,生成的路径曲线的颜色
    

    SetOptions(closePath, lockPosition, lockRotation)

    //参数1 closePath:是否是封闭路径,设为true的话,会形成闭环,最后运动回起点
    //参数2 lockPosition:锁定位置,参数为轴向,例如,填入AxisConstraint.X的话,横向的位移将被锁定,物体只能在其他方向上移动
    //参数3 lockRotation:锁定旋转,参数为轴向,和锁定位置同理,锁定的轴向不能旋转
    

    SetLookAt()

    //参数1 closePath:是否是封闭路径,设为true的话,会形成闭环,最后运动回起点
    //参数2 lockPosition:锁定位置,参数为轴向,例如,填入AxisConstraint.X的话,横向的位移将被锁定,物体只能在其他方向上移动
    //参数3 lockRotation:锁定旋转,参数为轴向,和锁定位置同理,锁定的轴向不能旋转
    //参数4 lookAhead参数:取值范围0-1
    


    0:看向路径的前方
    0.99:看向路径的后方
    (1)closePath为false (运动最后,物体的朝向移动是路径的运动方向的前方)
    lookAhead = 0:目标会沿着路径看向前方
    lookAhead != 0:目标会按照参数,决定开始运动时的朝向,但是运动期间会匀速转动朝向,最后朝向会转回路径前方的朝向

    (2)closePath为true(开始时确定方向后就不会变化了)
    lookAhead = 0:目标会沿着路径看向前方
    lookAhead >0 && lookAhead <1:一直保持开始时的方向(即如上图所示)
    lookAhead = 1:这个时候,SetLookAt没有效果,即物体不会改变朝向

    这里所说的朝向是相对于运动路径的朝向

    路过的大神给出的学术性的解释:
    lookAhead 参数的意思就是 看前看的偏移量

    假设整个路径normalize. 即开始点为0,结束点为1. 走到路程的一半即为0.5.

    所以如果lookAhead = 0.5 时, 假设当前Transform行走进程到 0.1的位置,则会 LookAt 行走进程 0.6的位置.

    如果closePath=true, 则 lookAtPercent = Mathf.Repeat(movePercent + lookAhead, 1);
    否则closePath=false, 则 lookAtPercent = Mathf.Clamp01(movePercent + lookAhead);

  • 相关阅读:
    复变函数
    abc136
    点集
    一些数学题
    牛客多校第六场
    牛客多校第五场G
    复数
    generator 1
    digits 2
    Winner
  • 原文地址:https://www.cnblogs.com/Fflyqaq/p/10867329.html
Copyright © 2020-2023  润新知