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

目录

  • 10、获取数据
  • 11、携程
  • 12、路径动画

本文及系列参考于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);

原文地址:https://www.cnblogs.com/Fflyqaq/p/10867329.html

时间: 2024-10-17 03:18:16

Unity---DOTween插件学习(3)---获取数据、协程、路径动画的相关文章

Unity 3D中不得不说的yield协程与消息传递

1. 协程 在Unity 3D中,我们刚开始写脚本的时候肯定会遇到类似下面这样的需求:每隔3秒发射一个烟花.怪物死亡后20秒再复活之类的.刚开始的时候喜欢把这些东西都塞到Update里面去,就像下面这样写. 1 float nowTime = 3.0f; 2 bool isDead = true; 3 float deadTime = 20.0f; 4 5 void startFireworks() 6 { 7 // 放烟花 8 } 9 10 void revival() 11 { 12 //

【Unity 3D】学习笔记四十四:路径渲染

路径渲染 路径渲染属于特效渲染组件,用于跟随运动中的游戏对象.首先在hierarchy视图中,创建一个球体.然后在菜单导航栏中选择component--effects--trial renderer即可将路径渲染组件添加至该球体对象中. cast shadows:显示阴影效果. receive shadows:接受阴影效果. materials:材质. size:渲染的材质数量,可添加或删除. element 0:渲染材质文件. use light probes:是否使用光线探头. light

unity Dotween插件的简单介绍及示例代码

unity里面做插值动画的插件有许多,比较常见的有itween.hotween.dotween.根据大家的反馈和实际体验来说,dotween插件在灵活性.稳定性.易用性上都十分突出.这里简单介绍下它的用法,并在后文做了一些效果示例,还是不错的. 所谓"插值动画",顾名思义就是在两个值中插入其他的值来实现动画.原理非常简单,比如想让某个物体从A地到达B地,我们只知道A和B的坐标,插值动画就可以根据"缓动函数"确定A.B间的其他值,来实现物体从A到B的"运动过

Python学习经验之谈:关于协程的理解和其相关面试问题

都知道Python非常适合初学者学习来入门编程,昨天有伙伴留言说面试了Python岗位,问及了一个关于协程的问题,想了想还是跟大家出一篇协程相关的文章和在Python面试中可能会问及的相关面试问题.都是根据我自己的Python学习经验来写的,有这方面需求的伙伴可以认真阅读,也欢迎补充不足之处! 一.什么是协程 协程:实现协作式多任务,可以在程序执行内部中断,转而执行其他协程. 比如我们编写子程序(或者说函数),通常是利用“调用”来实现从 A 跳去 B,B 跳去 C,如果想回来调用方,必须等被调用

4月28日 python学习总结 线程与协程

一. 异步与回调机制 问题: 1.任务的返回值不能得到及时的处理,必须等到所有任务都运行完毕才能统一进行处理 2.解析的过程是串行执行的,如果解析一次需要花费2s,解析9次则需要花费18s 解决一: (线程实现异步,回调解析结果) from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor from threading import current_thread import requests import os i

unity如何停止不用字符串方式开启协程的方法

通常我们知道开启协程用StartCoroutine("Method"); 停止协程用StopCoroutine("Method"); 如果我们想要终止所有的协程,可以通过StopAllCoroutines();方法来实现. 注意:这只会终止在调用该方法的对象中(应该是指调用这个方法的类)开始的协程,对于其他的MonoBehavior类中运行的协程不起作用. 但是如何单独停止用StartCoroutine(Method());开启的协程呢,资料上说:如果想要终止某一个

lua学习笔记13:协程具体解释和举例

一.coroutine.create创建协程 參数是协程的主函数,返回一个thread对象 co = coroutine.create(function() print("coroutine execute!") end) 二.协程状态 协程有三种状态:挂起(suspended).执行(running)和死亡(dead) coroutine.status(co)返回协程当前的状态 协程创建完之后处于挂起状态 print(coroutine.status(co)) 输出: suspend

golang 学习 (八)协程

一: 进程.线程 和 协程 之间概念的区别:        对于 进程.线程,都是有内核进行调度,有 CPU 时间片的概念,进行 抢占式调度(有多种调度算法)    (补充: 抢占式调度与非抢占(轮询任务调度)区别在于抢占式调度可以因为优先级高的任务抢占cpu,而轮询的不能) 对于 协程(用户级线程),这是对内核透明的,也就是系统并不知道有协程的存在,是完全由用户自己的程序进行调度的,因为是由用户程序自己控制,那么就很难像抢占式调度那样做到强制的 CPU 控制权切换到其他进程/线程,通常只能进行

Unity游戏开发学习之路——数据持久化

数据持久化 谈到数据持久化,在Unity的游戏开发中十分重要的,不管是是在本地和服务器端,数据持久化都是我们学习的难点,数据持久化的技术有很多种,这里只选取几种,目前也是我所学到的,在接下来的时间里会陆续整理到这里. Part1:PlayerPrefs类 这是unity圣典中给出的, PlayerPrefs 游戏存档 Description 描述 在游戏会话中储存和访问游戏存档.这个是持久化数据储存,比如保存游戏记录. Editor/Standalone 编辑器 / 桌面平台 Mac OS 在M