当前位置: 首页 > news >正文

【Unity学习笔记】DOTween(1)基础介绍

在这里插入图片描述

本文中大部分内容学习来自DOTween官方文档

文章目录

  • 什么是DOTween?
    • DO
    • Set
    • On
    • Tweener
    • Sequence
    • Tween
    • Nested tween
  • 初始化
  • 使用方式


什么是DOTween?

DOTween是一个动画插件,Tween是补间的意思。这个插件以下简称DOT,DOT很方便使用,只需要记住四个类,三个方法:

四个类

  • Tweener
  • Sequence
  • Tween
  • Nested Tween

三个方法

  • DO
  • Set
  • On

DO

DOT中的方法名是很统一的,因此我们从前缀就可以大概知道这个方法是干什么的,怎么用的。

  • DO代表了实现动画的方法,它是调用tween补间动画的快捷方法的前缀,我们可以直接从想要应用动画的对象的后面(比如物体transform,或者材质texture,文字text,颜色color等等)点出想要使用补间动画的DO方法:
transform.DOMoveX(100, 1);// 只需在物体的transform后面使用DOMoveX方法,就直接实现了物体在x轴上的移动
transform.DORestart();
DOTween.Play();

Set

  • Set为前缀的方法用于改变一个tween的设置,通常Set方法可以为Tween以及其派生类进行设置,Tween后面可以无限追加set。
var tweenerA = buttonA.DOMove(new Vector3(700, 200, 0), 5)
.SetLoops(3,LoopType.Yoyo).SetSpeedBased();
myTween.SetLoops(4, LoopType.Yoyo).SetSpeedBased();
// 展示一下无限set
myTween.SetSpeedBased().SetSpeedBased().SetSpeedBased().SetSpeedBased();

On

  • On为前缀的方法代表了可被调用的补间动画的回调,在补件动画的对应时刻会触发这些回调并调用其内部的函数委托。

官方示例:

// 委托回调也可以无限调用
myTween.OnStart(myStartFunction).OnComplete(myCompleteFunction);

调度单个匿名函数

tweener.OnStart(()=> { Debug.Log("动画开始"); });
// 在Tweener开始时调用委托

调度DOTween提供的官方委托类型:TweenCallback

TweenCallback tweenCallback = new TweenCallback(() => { Debug.Log("动画开始"); });
tweenCallback += () => { Debug.Log("我是TweenCallback委托"); };
tweener.OnStart(tweenCallback);
// tweener动画开始时调度委托
// 输出:动画开始
// 我是TweenCallback委托

Action一样,TweenCallback是可接受泛型参数的无返回值委托,


Tweener

  • Tweener 补间,用于控制补间插值和动画的类,大部分时候我们需要操纵的就是Tweener类:
Tweener tweener;
private void Start()
{tweener = transform.DOMove(new Vector3(500, 500, 0), 5);var twe = transform.DOMove(new Vector3(500, 500, 0), 5);Debug.Log(tweener.GetType());Debug.Log(twe.GetType());
}

通过检查代码以及获取类型后发现,DO方法返回的类型是TweenerCore类型,它继承于Tweener,因此根据里氏替换原则,Tweener可转换为TweenerCore。


Sequence

  • Sequence 序列,一种特殊的补间,它不是控制某个值,而是控制其他补间并将它们作为一个序列进行动画处理。
private void Start()
{tweener = transform.DOMove(new Vector3(500, 500, 0), 5);var tweenerA = buttonA.DOMove(new Vector3(700, 200, 0), 5);var seq = DOTween.Sequence();seq.Append(tweener);seq.Append(tweenerA);
}

类似于委托,Sequence可以顺序地执行补间动画,当然也可以在某个时间节点来设定定时执行。

var s = DOTween.Sequence();
var Cube1RunTime = 1.0f;
var Cube2RunTime = 1.0f;
s.Append(this.m_Trans.DOLocalMoveX(2.0f, Cube1RunTime));
s.Append(this.m_Trans.DOLocalMoveX(-3.42f, Cube1RunTime));
//在队列动画开始后的Cube1RunTime秒后播放
s.Insert(Cube1RunTime, this.m_Other.DOLocalMoveY(2.5f, Cube2RunTime));

具体的用法也将会在未来介绍。


Tween

  • Tween,Tweener和Sequence的统称,从代码上看,它是Tweener和Sequence的基类,也是DOTween这个插件最基础的类

Nested tween

  • Nested Tween嵌套补间,Sequence中包含的补间。代码中看不到,应该是Sequence内部的Tween的别名。

初始化

在使用DOTween之前,需要进行初始化,最简单的初始化方式是在导入后进行,如下图所示:
在这里插入图片描述
当然也可以用代码进行默认的初始化,而官方推荐如果想要自己设置初始化,可以使用下列代码

// EXAMPLE A: initialize with the preferences set in DOTween's Utility Panel
// 默认使用推荐配置初始化
DOTween.Init();
// EXAMPLE B: initialize with custom settings, and set capacities immediately
// 自定义设定初始化
DOTween.Init(true, true, LogBehaviour.Verbose).SetCapacity(200, 10);// recycleAllByDefault: true自动回收,如果Tween被OnKill时不是销毁而会被回收到池中,不允许GC对他们销毁,而有可能被再次调用重生
// useSafeMode: true安全模式,补间有可能变慢,但换来的是更安全的操作
// LogBehaviour: 日志行为,根据选择模式设置日志
public static IDOTweenInit Init(bool? recycleAllByDefault = null, bool? useSafeMode = null, LogBehaviour? logBehaviour = null);

使用方式

使用Tween时有两种调用方法,一种是我们介绍过的DO前缀方法,这类方法是对完整方法的快捷调用,可以直接设定在调用的对象后,也不需要指定调用委托:

transform.DOMove(new Vector3(2,3,4), 1);
rigidbody.DOMove(new Vector3(2,3,4), 1);
material.DOColor(Color.green, 1);

使用DO方法,除了从初始值补间到设定值之外,如果我们加上From()方法,就可以从设定值补间到初始值:

transform.DOMove(new Vector3(2,3,4), 1).From();
rigidbody.DOMove(new Vector3(2,3,4), 1).From();
material.DOColor(Color.green, 1).From();

除了快捷方法之外,还有一种完整方法的使用:

// 使用静态方法定义一个Tween
// 四个参数分别是getter,setter,to,duration
// getter,setter是泛型委托,它们并不支持所有的泛型,定义里只定义了一部分的类型
// getter委托用于接受初始值的类型
// setter委托用于接受初始值并作为入参
// to参数代表了最终值
// duration参数代表了从初始值补间到最终值的时间
// Tween a Vector3 called myVector to 3,4,8 in 1 second
DOTween.To(()=> myVector, x=> myVector = x, new Vector3(3,4,8), 1);
// Tween a float called myFloat to 52 in 1 second
DOTween.To(()=> myFloat, x=> myFloat = x, 52, 1);

DOTween.TO()方法并不直接应用补间,而是对接受类型的数据进行从初始值到最终值的,随时间变化的补间赋值。例如:

Vector3 transform= Vector3.zero;
DOTween.To(()=> transform, x=> transform= x, new Vector3(3,4,8), 1);

那么在一秒内,transform会从(0,0,0)变化到(3,4,8),但是因为没有set物体的transform,因此物体本身是不动的。


以上就是DOTween的一些基础用法,许多方法相信大家看到函数名就知道是什么意思了,DOTween提供了许多补间方法,高级点的用法就很牛了,甚至还能对接AVpro:
摘自Unity DOTween.To
在这里插入图片描述

相关文章:

【Unity学习笔记】DOTween(1)基础介绍

本文中大部分内容学习来自DOTween官方文档 文章目录 什么是DOTween?DOSetOnTweenerSequenceTweenNested tween 初始化使用方式 什么是DOTween? DOTween是一个动画插件,Tween是补间的意思。这个插件以下简称DOT,DOT很方便使用&…...

springboot项目,使用JNA框架调用C++库无法捕获异常的解决思路

写在前面:这个东西真的坑,工作上遇到的和JNA项目的入门案例差别就像是二重积分与小学数学之间的差距,折磨! 使用 JNA(Java Native Access)框架调用 C 库时,如果出现问题导致进程直接结束而无法捕…...

【项目 计网7】4.20 多进程实现并发服务器 4.22 多线程实现并发服务器

文章目录 4.20 多进程实现并发服务器server_process.cclient.c4.22 多线程实现并发服务器客户端代码:服务端代码: 4.20 多进程实现并发服务器 要实现TCP通信服务器处理并发的任务,使用多线程或者多进程来解决。 思路: 1、一个父进…...

论文阅读_扩散模型_LDM

英文名称: High-Resolution Image Synthesis with Latent Diffusion Models 中文名称: 使用潜空间扩散模型合成高分辨率图像 地址: https://ieeexplore.ieee.org/document/9878449/ 代码: https://github.com/CompVis/latent-diffusion 作者:Robin Rombach 日期: 20…...

LeetCode——回溯篇(二)

刷题顺序及思路来源于代码随想录,网站地址:https://programmercarl.com 目录 131. 分割回文串 93. 复原 IP 地址 78. 子集 90. 子集 II 491. 递增子序列 131. 分割回文串 给你一个字符串 s,请你将 s 分割成一些子串,使每个…...

RabbitMQ工作模式-发布订阅模式

Publish/Subscribe(发布订阅模式) 官方文档: https://www.rabbitmq.com/tutorials/tutorial-three-python.html 使用fanout类型类型的交换器,routingKey忽略。每个消费者定义生成一个队列关绑定到同一个Exchange,每个…...

JDK源码解析-Object

1. Object类 所有类的基类——java.lang.Object Object 类是所有类的基类,当一个类没有直接继承某个类时,默认继承Object类Object 类属于 java.lang 包,此包下的所有类在使用时无需手动导入,系统会在程序编译期间自动导入。 思…...

pinia——添加插件——基础积累

问题:是否给pinia添加过插件?具体添加的方式是什么? 在pinia中,我们可以为仓库添加插件,通过添加插件能够扩展以下的内容: 为 store 添加新的属性 定义 store 时增加新的选项 为 store 增加新的方法 包装现…...

软件国产化之殇

今天又看到这么一个帖子讨论一款国产化软件,属实给我震撼到了。 对于国产化产品,一直主打的都是”自研“,难道是我对”自研“这个词的理解有误? 做一个产品,别人开源了,你拿过来使用,你可以说…...

SQLyog问题处理集合

sqlyog 问题处理 1. 错误号码:1049错误: 数据库命令参数参考:数据库命令地址 检查数据库是否存在检查创建的数据库名称 与 要进行连接的数据库名称是否一致; 2. 错误号码:1819错误: MySQL授予远程连接权限时出现: …...

JavaSE【继承和多态】(1)(重点:初始化、pretected封装、组合)

一、继承 继承 (inheritance) 机制 :是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特 性 的基础上进行扩展,增加新功能 ,这样产生新的类,称 派生类 。 继承呈现了面向对象程序设计的层次结…...

无涯教程-Android Studio函数

第1步-系统要求 您将很高兴知道您可以在以下两种操作系统之一上开始Android应用程序的开发- MicrosoftWindows10/8/7/Vista/2003(32或64位)MacOSX10.8.5或更高版本,最高10.9(小牛) GNOME或KDE桌面 第二点是,开发Android应用程序所需的所有工具都是开源的,可以从Web上下载。以…...

CentOS8安装mysql8.0.24

一、下载mysql安装包并解压 执行以下命令: # 创建mysql安装目录 mkdir /usr/local/mysql # 进入mysql安装目录 cd /usr/local/mysql/ # 下载mysql-8.0.24 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.24-linux-glibc2.12-x86_64.tar.xz # 解压…...

Quasi-eccentricity Error Modeling and Compensation in Vision Metrology

论文:Quasi-eccentricity Error Modeling and Compensation in Vision Metrology 中文:视觉计量中准偏心误差建模与补偿 论文地址:Sci-Hub | Quasi-eccentricity error modeling and compensation in vision metrology. Measurement Scienc…...

ai智能电话机器人是人类的助手和朋友

一直以来,人工智能都是人们关注的热门话题。在以前,说到人工智能,第一想到的是“机器人”,随着人工智能的普及,AI已经渗透到我们生活的每一个角落。现在,说起人工智能,可能会想到“无人驾驶、无…...

应用TortoiseSVN的SubWCRev管理VisualStudio C#项目编译版本号

首先要安装 TortoiseSVN, 并确保TortoiseSVN的bin目录被加入到系统环境变量Path中。 1、拷贝Porperties目录下的文件AssemblyInfo.cs生成副本AssemblyInfo.template, 作为版本管理的模板文件。 2、修改模板文件中的想要管理的版本号信息 // [assembly: AssemblyVersion(&quo…...

【八股】2023秋招八股复习笔记5(计算机网络-CN)

文章目录 八股目录目录1、应用层 & HTTP一些http题HTTPS 加密原理(问过)HTTP/1.1 新特性HTTP/2.0 与 RPC(问过)GET 和 POST 比较 2、传输层 & TCPTCP三次握手 & 四次挥手(问过)为什么每次TCP 连…...

【C++】SLT——Vector详解

本片要分享的是关于STL中Vector的内容,Vector的内容于string非常相似,只要会使用string那么学习Vector时会非常流畅。 目录 1.vector介绍 2.vector的简单实用 2.1.简单的无参构造 ​编辑2.2.简单带参构造 2.3.迭代器区间初始化 2.4.vector的遍历 …...

企业网络安全:威胁情报解决方案

什么是威胁情报 威胁情报是网络安全的关键组成部分,可为潜在的恶意来源提供有价值的见解,这些知识可帮助组织主动识别和防止网络攻击,通过利用 STIX/TAXII 等威胁源,组织可以检测其网络中的潜在攻击,从而促进快速检测…...

为什么2G、3G、4G成功了,5G却?

你可能已经多年来一直听到关于闪电般的5G的炒作。虽然新的无线网络在美国仍然没有普及,但5G正在波士顿和西雅图到达拉斯和堪萨斯城等城市慢慢出现。随着连接速度的加快,用户的安全性和隐私保护将增加,因为无线行业试图改善3G和4G的防御。但是…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

pam_env.so模块配置解析

在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...