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

Unity DoTween使用文档

DoTween 使用文档

DoTween 是 Unity 中非常流行的动画补间插件。它通过链式调用方式,让开发者可以快速创建平滑、自然的动画效果。本文将介绍 DoTween 的基础用法、缓动曲线原理(包含常见缓动曲线的数学公式与参数说明)、案例演示以及一些常见坑点的解决方案,帮助你在项目中高效实现动画效果。

目录

  1. DoTween 简介
  2. 安装与配置
  3. 基本用法
  4. 缓动曲线详解
    • Linear 线性
    • EaseInQuad / EaseOutQuad / EaseInOutQuad
    • EaseInCubic / EaseOutCubic / EaseInOutCubic
    • 其他常见缓动曲线
  5. 案例演示
  6. 常见坑点及解决方案
  7. 总结

DoTween 简介

DoTween 是一个轻量级、易用且高效的动画补间库。它支持对物体的位置、旋转、缩放以及颜色、透明度等属性进行动画补间,能够大大简化动画代码,并让动画效果更加流畅自然。


安装与配置

  1. 下载插件: 可通过 Unity Asset Store 下载 DoTween 免费版或 Pro 版。
  2. 导入项目: 将下载的 .unitypackage 导入 Unity 项目。
  3. 初始化: 在项目启动时调用 DOTween.Init(); 初始化 DoTween(通常在启动脚本中调用)。
using DG.Tweening;
using UnityEngine;public class DoTweenInit : MonoBehaviour
{void Start(){DOTween.Init();}
}

基本用法

DoTween 采用链式调用风格,使用非常直观。例如,下例将让一个物体在 2 秒内移动到目标位置,并使用缓动曲线控制运动效果:

using DG.Tweening;
using UnityEngine;public class MoveExample : MonoBehaviour
{void Start(){transform.DOMove(new Vector3(5, 0, 0), 2f).SetEase(Ease.OutBack)  .OnComplete(() => Debug.Log("移动完成!"));}
}

缓动曲线详解

DoTween 内置了大量缓动曲线,能让动画效果更有层次感。常用的缓动曲线主要分为以下几类。

Linear 线性

  • 公式: f(t) = t
  • 说明: 匀速运动,没有加速或减速效果,适合需要恒定速度的动画。

EaseInQuad / EaseOutQuad / EaseInOutQuad

EaseInQuad
  • 公式: f(t) = t²
  • 说明: 开始时较慢,逐渐加速,适用于需要平滑启动的动画。
EaseOutQuad
  • 公式: f(t) = -t * (t - 2)
  • 说明: 起始较快,末尾逐渐减速,适合自然结束的动画效果。
EaseInOutQuad
  • 公式: 前半段加速,后半段减速,整体平滑过渡。

EaseInCubic / EaseOutCubic / EaseInOutCubic

EaseInCubic
  • 公式: f(t) = t³
  • 说明: 比 Quad 更缓慢启动,启动阶段更柔和。
EaseOutCubic
  • 公式: f(t) = (t - 1)³ + 1
  • 说明: 开始较快,后期快速减速,适合结束时需要平滑衔接的动画。
EaseInOutCubic
  • 公式: 前后阶段平滑,中间加速,适合整体缓动效果的动画。

其他常见缓动曲线

  • Sine 系列: 使用正弦函数实现平滑过渡。
  • Expo 系列: 使用指数函数,变化较快。
  • Back 系列: 超出目标值后回弹,适用于弹性动画。

案例演示

1. 组合动画 —— 平移、缩放和旋转

using DG.Tweening;
using UnityEngine;public class TransformTweenExample : MonoBehaviour
{void Start(){Sequence seq = DOTween.Sequence();seq.Append(transform.DOMove(new Vector3(3, 2, 0), 1.5f).SetEase(Ease.OutQuad));seq.Join(transform.DOScale(1.5f, 1.5f).SetEase(Ease.InOutSine));seq.Join(transform.DORotate(new Vector3(0, 90, 0), 1.5f).SetEase(Ease.OutCubic));seq.OnComplete(() => Debug.Log("组合动画完成!"));}
}

2. UI 数字滚动动画

using DG.Tweening;
using UnityEngine;
using UnityEngine.UI;public class NumberTweenExample : MonoBehaviour
{public Text numberText;void Start(){DOTween.To(() => 0, x => {numberText.text = Mathf.FloorToInt(x).ToString();}, 1000, 2f).SetEase(Ease.OutExpo).OnComplete(() => Debug.Log("数字动画完成!"));}
}

常见坑点及解决方案

1. 动画冲突或重复播放

  • 使用 SetId() 为动画设置唯一标识。
  • 使用 DOTween.Kill(id) 清除旧动画。

2. 场景切换后动画失效

  • 使用 SetAutoKill(false) 防止动画自动销毁。

3. 时间缩放问题

  • 使用 SetUpdate(true) 使动画不受 Time.timeScale 影响。

4. 内存泄漏与性能问题

  • 使用 SetRecyclable(true) 使动画在播放完后回收重用。

总结

DoTween 通过简单直观的链式调用,极大地简化了动画制作过程。无论是对 Transform、UI、材质等属性的动画控制,还是复杂的序列动画,DoTween 都能快速满足需求。在开发过程中,合理使用动画标识、管理生命周期以及设置更新模式,可以有效避免常见坑点,保证动画的稳定运行。

相关文章:

Unity DoTween使用文档

DoTween 使用文档 DoTween 是 Unity 中非常流行的动画补间插件。它通过链式调用方式,让开发者可以快速创建平滑、自然的动画效果。本文将介绍 DoTween 的基础用法、缓动曲线原理(包含常见缓动曲线的数学公式与参数说明)、案例演示以及一些常…...

【办公类-99-01】20250201学具PDF打印会缩小一圈——解决办法:换一个PDF阅读器

背景需求: 2024年1月13日,快要放寒假了,组长拿着我们班的打印好的一叠教案来调整。 “前面周计划下面的家园共育有调整,你自己看批注。” “还有你这个教案部分的模版有问题,太小(窄)了。考虑…...

组合总和II(力扣40)

这道题的难点就在于题目所给的集合中有重复的数字,我们需要进行去重操作。首先明确去重指的是去重哪一部分。注意并不是对递归的集合去重,而是对当前集合的遍历进行去重。这么说可能有点抽象,举个例子:假设集合为1,1,2,3,4&#x…...

基于HTML生成网页有什么优势

在互联网时代,网页是人们获取信息、交流互动的重要窗口,而基于HTML生成网页,是搭建网络大厦的关键。HTML语法简洁直观,标签和属性语义明确,新手也能迅速上手,创建包含基础元素的网页,极大降低了…...

php 接入扣子的 token获取

本身逻辑只是个api,但是官方不提供php的sdk 扎心了老铁,这下php 狗都不用了,主要麻烦的是如何获取access_token,代码如下 protected function get_jwt(): string{$header [alg > RS256,typ > JWT,kid > $this->kid];…...

Redis02 - 持久化

Redis持久化 文章目录 Redis持久化一:持久化简介1:Redis为什么要进行持久化2:Redis持久化的方式 二:RDB持久化介绍1:手动触发RDB2:自动触发RDB3:redis.conf中进行RDB的配置4:RDB优缺…...

【力扣】240.搜索二维矩阵 II

题目 我的代码 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {for(int i0;i<matrix.size();i){for(int j0;j<matrix[0].size();j){if(targetmatrix[i][j]){return true;}else if(target<matrix[i][j]){brea…...

RabbitMQ 从入门到精通:从工作模式到集群部署实战(二)

接上篇&#xff1a;《RabbitMQ 从入门到精通&#xff1a;从工作模式到集群部署实战&#xff08;一&#xff09;》 链接 文章目录 4.安装RabbitMQ Messaging Topology Operator 裸金属环境部署RabbitMQ部署单实例部署集群 4.安装RabbitMQ Messaging Topology Operator 使用 cer…...

编程AI深度实战:大模型哪个好? Mistral vs Qwen vs Deepseek vs Llama

随着开源 LLM 的发展&#xff0c;越来越多的模型变得专业化&#xff0c;“代码”LLM 变得非常流行。这些 LLM 旨在比其 “常识” 对应物更小&#xff0c;但旨在超越更大的通用模型的编码性能。 这些模型以极低的成本提供大型模型的功能&#xff0c;进一步使本地 LLM 空间民主化…...

11.kafka开启jmx

方式一: 1.进入/opt/kafka_2.13-3.3.2/bin目录 命令: cd /opt/kafka_2.13-3.3.2/bin [root@rhel77 ~]# cd /opt/kafka_2.13-3.3.2/bin [root@rhel77 bin]# pwd /opt/kafka_2.13-3.3.2/bin [root@rhel77 bin]# 2.备份kafka-run-class.sh 命令: cp kafka-run-class.sh …...

基于钉钉API的连接器实现:企业数据集成与自动化管理

文章目录 概要背景与需求钉钉API概述连接器实现小结 概要 在当今数字化时代&#xff0c;企业面临着海量数据的管理与整合挑战。钉钉作为国内广泛使用的办公协作平台&#xff0c;提供了丰富的API接口&#xff0c;支持企业进行数据集成与自动化管理。本文将介绍如何通过钉钉API实…...

JAVA 二维列表的基础操作与异常

在Java中创建二维 ArrayList&#xff08;即嵌套列表&#xff09;的方法有多种&#xff0c;下面我将详细介绍常用的几种方式&#xff0c;并分析它们的区别和适用场景。 1. 使用嵌套 ArrayList 创建二维列表 方法一&#xff1a;直接嵌套 ArrayList 这是最常用的方法&#xff0c…...

将仓库A分支同步到仓库B分支,并且同步commit提交

一、 问题 有一仓库A 和 一仓库B&#xff0c; 需要将仓库A分支a1所有提交同步推送到仓库B分支b1上 二、 解决 2.1、 首先需要仓库A、仓库B的权限&#xff0c; 2.2、将仓库A clone到本地&#xff0c; 进入A目录&#xff0c;并且切换到a1分支 cd A ## A 为A仓库clone到本地代…...

使用java代码操作rabbitMQ收发消息

SpringAMQP 将来我们开发业务功能的时候&#xff0c;肯定不会在控制台收发消息&#xff0c;而是应该基于编程的方式。由于RabbitMQ采用了AMQP协议&#xff0c;因此它具备跨语言的特性。任何语言只要遵循AMQP协议收发消息&#xff0c;都可以与RabbitMQ交互。并且RabbitMQ官方也…...

mysql8安装时提示-缺少Microsoft Visual C++ 2019 x64 redistributable

MySQL8.0安装包mysql-8.0.1-winx64进行安装&#xff0c;提示&#xff1a;This application requires Visual Studio 2019 x64Redistributable, Please install the Redistributable then runthis installer again。出现这个错误是因为我们电脑缺少Microsoft Visual C 这个程序&…...

WindowsServer搭建内网Gitea【中文更方便使用】

特点&#xff1a; 轻量级&#xff1a;占用系统资源少&#xff0c;对服务器硬件要求较低&#xff0c;适合小型企业或团队使用。部署和维护相对简单&#xff0c;即使没有专业的运维人员也能轻松搭建。 功能齐全&#xff1a;具备基本的代码托管功能&#xff0c;如仓库管理、分支管…...

leetcode 907. 子数组的最小值之和

题目如下 数据范围 观察数据范围理论上平方复杂度的算法计算次数逼近1e9还不至于超时&#xff0c;但是由于有mod 1e9导致超时。所以本题不能靠暴力枚举来解决。 所以我们可以思考如何在枚举上面减少计算次数&#xff1a;第一种枚举法&#xff1a;最外层i控制子数组的左边界&…...

WordPress自定义.js文件排序实现方法

在WordPress中&#xff0c;要将插件引用的.js文件放到所有.js文件之后加载&#xff0c;可以通过以下方法实现&#xff1a; 方法一&#xff1a;调整wp_enqueue_script的加载顺序 在插件的主文件中&#xff0c;使用wp_enqueue_script函数加载.js文件时&#xff0c;将$in_footer…...

摄像头模块烟火检测

工作原理 基于图像处理技术&#xff1a;分析视频图像中像素的颜色、纹理、形状等特征。火焰通常具有独特的颜色特征&#xff0c;如红色、橙色等&#xff0c;且边缘呈现不规则形状&#xff0c;还会有闪烁、跳动等动态特征&#xff1b;烟雾则表现为模糊、无固定形状&#xff0c;…...

【拼十字——树状数组】

题目 暴力代码 30% #include <bits/stdc.h> using namespace std; using ll long long; const int N 1e5 10; const int mod 1e9 7; int n; int l[N], w[N], c[N]; int main() {cin >> n;ll ans 0;for (int i 1; i < n; i){cin >> l[i] >> …...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...