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);
Unity---DOTween插件学习(3)---获取数据、协程、路径动画的更多相关文章
- 关于panic ,主协程的recover 是无法获取 子协程的panic 的
一.子协程的panic,只能在子协程中处理 下面的代码,main 函数 无法获取panic package main import ( "fmt" "time" ...
- unity Dotween插件的简单介绍及示例代码
unity里面做插值动画的插件有许多,比较常见的有itween.hotween.dotween.根据大家的反馈和实际体验来说,dotween插件在灵活性.稳定性.易用性上都十分突出.这里简单介绍下它的 ...
- Unity学习疑问记录之协程
http://blog.csdn.net/huang9012/article/details/38492937 总结:1.协程相当于多线程但不是,(尽管它们看上去是这样的),它们运行在同一线程中,跟普 ...
- Unity 3D中不得不说的yield协程与消息传递
1. 协程 在Unity 3D中,我们刚开始写脚本的时候肯定会遇到类似下面这样的需求:每隔3秒发射一个烟花.怪物死亡后20秒再复活之类的.刚开始的时候喜欢把这些东西都塞到Update里面去,就像下面这 ...
- Boost.Coroutine2:学习使用Coroutine(协程)
function(函数)routine(例程)coroutine (协程) 函数,例程以及协程都是指一系列的操作的集合. 函数(有返回值)以及例程(没有返回值)也被称作subroutine(子例程), ...
- 4月28日 python学习总结 线程与协程
一. 异步与回调机制 问题: 1.任务的返回值不能得到及时的处理,必须等到所有任务都运行完毕才能统一进行处理 2.解析的过程是串行执行的,如果解析一次需要花费2s,解析9次则需要花费18s 解决一: ...
- U3D学习08-异步、协程
1.调用 invoke不能传参, 2.协程(不是线程,拥有自己独立的执行序列) Coroutine(尽可能减少计算,提高运行效率) 需要迭代器IEnumerate,迭代器中有返回方法yield 协程的 ...
- lua学习笔记13:协程具体解释和举例
一.coroutine.create创建协程 參数是协程的主函数,返回一个thread对象 co = coroutine.create(function() print("coroutine ...
- unity如何停止不用字符串方式开启协程的方法
通常我们知道开启协程用StartCoroutine("Method"); 停止协程用StopCoroutine("Method"); 如果我们想要终止所有的协程 ...
随机推荐
- Java微信开发_Exception_03_errcode:48001 errmsg:api unauthorized hint
创建菜单时出现这个异常, 异常信息:errcode:48001 errmsg:api unauthorized hint 解读:调用的接口没有权限. 回去公众号后台一看,发现真的没有自定义菜单的权限, ...
- codeforces 622B B. The Time
B. The Time time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...
- NYOJ-求逆序数 ----------------待解决,WA
描述 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数. 现在,给你一个N个元素的序列,请你判断出它的逆序数 ...
- 洛谷 P4547 & bzoj 5006 随机二分图 —— 状压DP+期望
题目:https://www.luogu.org/problemnew/show/P4547 https://www.lydsy.com/JudgeOnline/problem.php?id=5006 ...
- 查看linux上所有用户
1.查看所有用户名 cat /etc/passwd |cut -f 1 -d #是1不是L的小写 2.显示用户信息 whoami 查看当前登录用户名. id username 查看用户的uid,gid ...
- 第二次C语言实验报告
#一.设计题目,设计思路,实现方法 ##设计题目 15-10 找最长的字符串,14-5 指定位置输出字符串,13-6 数组循环右移,12-5 查找指定字符,11-5 打印杨辉三角. ##设计思路 15 ...
- 关于surf显示立体图,可视化分析数据
如果想判断一个点(x,y)对应的ZV值是否在平面上方.平面上.平面下方,只要将(x,y)带入方程,得到z. 如果ZV大于>Z,则在平面上方:如果ZV<Z,则在方面下方:若ZV=Z,则在平面 ...
- XML解析代码课堂讲解实例
//获取所有的子元素,不包括回车 package com.dom4jDemo; import java.io.File; import java.util.List; import org.dom4j ...
- Robot Framework 接口自动化介绍
接口测试的重要性大家应该都清楚,就不多说了,本文中主要介绍接口测试如何在robot framework自动化测试框架中进行. 一.环境依赖 1.安装robot framework环境,本文中不做讲解 ...
- java之字符
参考http://how2j.cn/k/number-string/number-string-character/323.html 保存一个字符的时候使用char package character ...