Unity插件---Dotween

1.什么是DOTween

DoTween 是由 Demigiant 开发的,被广泛应用于 Unity 游戏开发中。它是一个流行的动画插件,被许多开发者用于创建流畅、高效的动画效果,提升游戏体验。

2.DOTween的初始配置

①set up

首先找到DOTween Unity Panel 的面板 点击下面的SetUp DOTween… 按钮来定于全局的配置

在这里插入图片描述

②命名空间

首先引用命名空间才能使用相应的语法

using DG.Tweening; //命名空间

3. 代码解析

①物体

首先是基于物体的代码介绍以及是具体的使用方法。

///首先说明一下这些方法都是扩展方法下面 的具体扩展的哪一个方法就直接省略了。
// 移动到目标位置
public static TweenerCore<Vector3, Vector3, VectorOptions> DOMove(this Transform target, Vector3 endValue, float duration, bool snapping = false);
target:要移动的对象的 Transform 组件。
endValue:移动的目标位置。
duration:移动的持续时间。
snapping(可选):是否将位置的值进行取整,默认值为 false//再摸一个方向上的位置移动    
DOMoveX(float endValue,float duration, bool snapping = false);
DOMoveY();
DOMoveZ();
target:要移动的对象的 Transform 组件。
endValue:X 轴方向上移动的目标位置。
duration:移动的持续时间。
snapping(可选):是否将位置的值进行取整,默认值为 false// 物体的旋转
public static Tweener DORotate(this Transform target, Vector3 endValue, float duration, RotateMode mode = RotateMode.Fast);
target:要旋转的对象的 Transform 组件。
endValue:旋转的目标角度,使用 Euler 角(欧拉角)表示为 Vector3。
duration:旋转的持续时间。
mode(可选):旋转模式,默认为 RotateMode.Fast,可选的模式有 RotateMode.Fast 和 RotateMode.FastBeyond360
// 补充 RotateMode
RotateMode.Fast:快速旋转模式,对象将会直接根据目标旋转到指定角度,不考虑最短路径。RotateMode.FastBeyond360:快速旋转模式,对象将会在超过360度后继续旋转,不考虑最短路径。RotateMode.WorldAxisAdd:世界轴添加旋转模式,对象将会在世界坐标系下按照指定角度进行旋转。RotateMode.LocalAxisAdd:本地轴添加旋转模式,对象将会在自身局部坐标系下按照指定角度进行旋转。RotateMode.LocalAxisMinimum:本地轴最小旋转模式,对象将会绕着最短路径旋转到指定角度,保持局部坐标系和旋转方向一致//物体的缩放
public static Tweener DOScale(this Transform target, Vector3 endValue, float duration);
target:要缩放的对象的 Transform 组件。
endValue:缩放的目标缩放值,使用 Vector3 表示。
duration:缩放的持续时间。transform.DOScale(new Vector3(2, 2, 2), 1f);// 冲击效果
public static Tweener DOPunchPosition(this Transform target, Vector3 punch, float duration, int vibrato = 10, float elasticity = 1f, bool snapping = false);
target:要应用该效果的对象的 Transform 组件。
punch:冲击的力度和方向。
duration:动画的持续时间。
vibrato(可选):冲击效果的震动次数,默认值为 10。
elasticity(可选):冲击效果的弹性,默认值为 1f,高于1f会引起超过原始位置的冲击。
snapping(可选):是否将位置的值进行取整,默认值为 false//运动的混合(可以多个连接在一起)
public static Tweener DOBlendableMoveBy(this Transform target, Vector3 byValue, float duration);
target:要移动的对象的 Transform 组件。
byValue:相对于当前位置的位移向量。
duration:移动的持续时间。

②材质

// 改变颜色的方法
public static Tweener DOColor(this Material target, Color endValue, string property, float duration);
target:要修改颜色属性的材质。
endValue:颜色变化的目标颜色。
property:要修改的颜色属性的名称。或者 propertyID
duration:颜色变化的持续时间。
// 改变透明度
public static TweenerCore<Color, Color, ColorOptions> DOFade(this Material target,float endValue,int propertyID,float duration)
endValue: 一个浮点数,表示透明度的目标值。动画将从对象的当前透明度逐渐过渡到这个目标值。
propertyID : 要修改的颜色属性的名称。或者 propertyID
duration: 一个浮点数,表示动画的持续时间(以秒为单位)。它定义了对象从当前透明度到目标透明度的平滑过渡所需的时间。// 改变偏移值
public static TweenerCore<Vector2, Vector2, VectorOptions> DOOffset(this Material target,Vector2 endValue,float duration)
endValue:一个 Vector2 类型的参数,表示目标偏移值。动画会从当前的偏移值平滑地过渡到这个目标偏移值。
duration:一个浮点数类型的参数,表示动画的持续时间(以秒为单位)。它定义了对象从当前偏移值到目标偏移值的平滑过渡所需的时间。
// DOVector方法用于在一定的持续时间内从当前值平滑地过渡到目标值
public static TweenerCore<Vector4, Vector4, VectorOptions> DOVector(this Material target,Vector4 endValue,int propertyID,float duration)
target:一个Material类型的参数,表示目标材质。
endValue:一个Vector4类型的参数,表示目标属性值。动画将从当前属性值逐渐过渡到这个目标值。
propertyID:一个整数类型的参数,表示目标属性的标识符。您可以使用Shader.PropertyToID方法将属性名称转换为propertyID。使用propertyID而不是直接使用属性名称可以提高性能。
duration:一个浮点数类型的参数,表示动画的持续时间(以秒为单位)。  
_material.DOBlendableColor(Color.green, propertyID, 2f);

③运动序列

// 运动序列是一个空的序列 可以存储许多的DOTween动画 并进行管理
//使用前首先要声明一个 DOTween的序列Sequence sequence = DOTween.Sequence(); Append 谁先加进去谁先执行 // 将动画 一次加入到序列中并且依次执行 先添加先执行
public static Sequence Append(this Sequence s, Tween t)
动画Tween:可以是使用DOTween提供的Tween方法创建的动画,比如transform.DOMoveY(3, 2f)。
Tweener:表示一个已经创建好的Tween动画,可以是其他地方创建的Tween对象,比如DOTween.To(() => myVariable, x => myVariable = x, targetValue, duration)。
回调方法:可以是一个委托方法,用于在动画结束时执行的回调函数,比如sequence.AppendCallback(() => Debug.Log("Animation finished"));
// 用于并行播放动画 参数同上
public static Sequence Join(this Sequence s, Tween t)
Sequence sequence = DOTween.Sequence();Tween tween1 = transform.DOMoveX(5, 2f);
Tween tween2 = transform.DOScale(Vector3.one * 2, 1f);
Tween tween3 = transform.DORotate(Vector3.up * 90, 1.5f);sequence.Join(tween1);
sequence.Join(tween2);
sequence.Join(tween3);
// 插入一个动画
public static Sequence Insert(this Sequence s, Tween t)
//当插入到 补间和你原来所处时间的补间动画 控制的是同一个属性如position ,或者Scale,Rotate等 就会发生覆盖,但是如果控制的不是相同用的属性则发生的是附加,和join的效果差不多。//插入一个延迟
sequence.AppendInterval(1f)Prepend 谁先进去谁后执行 但是这个Prepend的执行还是在Append之前的
// 预添加
public static Sequence Prepend(this Sequence s, Tween t)// 回调函数
// 在某个地方添加一个回调,当值执行到这个的时候会进行回调
sequence.AppendCallback(() => Debug.Log("Animation finished"));
// 在某个地方插入一个回调,当值执行到这个的时候会进行回调
sequence.InsertCallback(() => Debug.Log("Animation finished"));
// 在某个地方预添加一个回调,当值执行到这个的时候会进行回调
sequence.PrependCallback(() => Debug.Log("Animation finished"));

④循环

// Dotween是链式代码 可以一直点出来一些设置
public static T SetLoops<T>(this T t, int loops, LoopType loopType) where T : Tween
loops :循环次数 -1 代表无限
LoopType:循环的方式
+ Restart:每次循环重新启动动画,即每次循环从起始点重新开始。
+ Yoyo:循环播放动画,反复往返运动,即在正向播放完后反向播放,循环如此进行。
+ Incremental:循环播放动画时每次增量加上前一次循环的值。比如初始动画播放从12,第一次循环增加2,第二次循环增加4,以此类推。
如 : transform.DOMove(Vector3.one, 1f).SetLoops(1,LoopType.Restart);
// 第二种方法实现循环
public static T SetAs<T>(this T t, TweenParams tweenParams) where T : TweenTweenParams pTweenParams = new TweenParams();pTweenParams.SetLoops(-1);transform.DOMove(Vector3.one, 1).SetAs(pTweenParams);

⑤常用set的函数

//当动画执行完成之后自动的销毁。SetAutoKill()
transform.DOMove(Vector3.one, 1).SetAs(pTweenParams).SetAutoKill();
// 反向移动From() :就是从一个endvalue 向startvalue移动
// 默认值为false ,当为True的时候 此时就会加上当下的坐标在进行动画transform.DOMove(Vector3.one, 1).SetAs(pTweenParams).From(false);// 设置延迟SetDelay( float DelayTime);
transform.DOMove(Vector3.one, 1).From(true).SetDelay(2f);//设置速度 默认情况下 这个1表示的时间  SetSpeedBased(true) 此时这个1就变成了速度,false的时候 1代表的还是时间 
transform.DOMove(Vector3.one, 1).From(true).SetSpeedBased(true);// 设置ID Tween的标识符可以是任意类型的对象,用于在后续操作中对Tween进行引用或检索TweenParams myParams = new TweenParams();// 设置标识符myParams.SetId("MyTween");// 使用TweenParams中的参数创建Tween对象transform.DOMoveX(10f, 1f).SetAs(myParams);Tweener myTween = DOTween.GetTween("MyTween");// 设置相对移动 表示的是相对与该物体的位置在向某个方向移动某一个距离。
transform.DOMove(Vector3.one, 1).SetRelative();
// 设置更新 SetUpdate()方法用于设置Tween的更新类型。Tween的更新类型确定了Tween的更新操作是基于时间的(TimeBased)还是基于帧数的(FrameBased)UpdateType.Normal:基于帧数的更新类型,按照Unity的帧数进行更新(默认)。当为True的时候不受TimeScale的影响
UpdateType.Fixed:基于固定时间间隔的更新类型,按照Unity的FixedUpdate进行更新。
UpdateType.Manual:手动更新类型,需要手动调用Tween的ManualUpdate()方法来更新。void Start()// 创建Tween对象并设置持续时间为1秒钟Tweener tween = transform.DOMoveX(10f, 1f);// 将Tween的更新类型设置为帧数更新(FrameBased)tween.SetUpdate(UpdateType.Normal, true);// 设置Tween启动时回调函数tween.OnStart(() => Debug.Log("Tween started!"));// 启动Tweentween.Play();void Update()if (Input.GetKeyDown(KeyCode.Space))// 暂停Tween的更新操作DOTween.PauseAll();// 在暂停时输出日志Debug.Log("Tween paused!");else if (Input.GetKeyDown(KeyCode.R))// 恢复Tween的更新操作DOTween.PlayAll();// 在恢复时输出日志Debug.Log("Tween resumed!");//设置曲线 
public static T SetEase<T>(this T t, Ease ease) where T : Tween
public static T SetEase<T>(this T t, AnimationCurve animCurve) where T : Tween
public static T SetEase<T>(this T t, EaseFunction customEase) where T : Tween
customEase :自定义方法
AnimationCurve :动画曲线   
ease: 曲线的类型
transform.DOMove(new Vector3(2, 2, 2), 2f).SetEase(Ease.Linear);
Linear:线性缓动,无衰减或加速。
InSine:正弦缓动,起始缓慢,逐渐加速。
OutSine:正弦缓动,起始快速,逐渐减速。
InOutSine:正弦缓动,起始和结束时缓慢,中间时加速。
InQuad:二次方缓动,起始缓慢,逐渐加速。
OutQuad:二次方缓动,起始快速,逐渐减速。
InOutQuad:二次方缓动,起始和结束时缓慢,中间时加速。
InCubic:三次方缓动,起始缓慢,逐渐加速。
OutCubic:三次方缓动,起始快速,逐渐减速。
InOutCubic:三次方缓动,起始和结束时缓慢,中间时加速。
InQuart:四次方缓动,起始缓慢,逐渐加速。
OutQuart:四次方缓动,起始快速,逐渐减速。
InOutQuart:四次方缓动,起始和结束时缓慢,中间时加速。
InQuint:五次方缓动,起始缓慢,逐渐加速。
OutQuint:五次方缓动,起始快速,逐渐减速。
InOutQuint:五次方缓动,起始和结束时缓慢,中间时加速。
InExpo:指数缓动,起始缓慢,逐渐加速。
OutExpo:指数缓动,起始快速,逐渐减速。
InOutExpo:指数缓动,起始和结束时缓慢,中间时加速。
InCirc:圆形缓动,起始缓慢,逐渐加速。
OutCirc:圆形缓动,起始快速,逐渐减速。
InOutCirc:圆形缓动,起始和结束时缓慢,中间时加速。
InBack:回弹缓动,起始缓慢,逐渐加速。
OutBack:回弹缓动,起始快速,逐渐减速。
InOutBack:回弹缓动,起始和结束时缓慢,中间时加速。
InElastic:弹簧缓动,起始缓慢,逐渐加速。
OutElastic:弹簧缓动,起始快速,逐渐减速。
InOutElastic:弹簧缓动,起始和结束时缓慢,中间时加速。
InBounce:反弹缓动,起始缓慢,逐渐加速。
OutBounce:反弹缓动,起始快速,逐渐减速。
InOutBounce:反弹缓动,起始和结束时缓慢,中间时加速
// 回调函数 
//使用OnComplete通常需要为该事件指定一个函数或方法作为参数。当操作完成时,该函数将被调用,完成后续的逻辑
OnComplete
tween.OnComplete(() => { Debug.Log("Tween completed!"); });   // 使用Lambda表达式定义回调函数//当Tween被中止时,你可以通过OnKill()方法指定一个回调函数,在回调函数中执行相应的操作。tween = transform.DOMoveX(10f, 1f);// 设置Tween被中止时的回调函数tween.OnKill(OnTweenKill);// 启动Tweentween.Play();// 中止Tween时的回调函数void OnTweenKill()// 在Tween被中止时执行自定义操作Debug.Log("Tween killed!");// 示例中的中止Tween的操作void StopTween()// 在适当的时机中止Tweentween.Kill();
// 反复的完成
OnstepComplete// Onstart 开始播放的时候只能执行一次
Onstart// 当暂停的时候 然后在开始
Onplay / Onpause// OnRewind
动画重新播放的时候开始执行

本文是博主的总结,还会有后续的更新。想要查看官方文档的话可以访问https://dotween.demigiant.com/ Dotween官网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/116864.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BananaPi BPI-6202工业控制板全志科技A40i、24V DC输入、RS485接口

Banana Pi BPI-6202“嵌入式单板计算机”采用工业级全志A40i四核Cortex-A7处理器&#xff0c;工业温度范围和长生命周期&#xff0c;2GB DDR3&#xff0c;8GB eMMC闪存&#xff0c;M.2 SATA插槽等。 这是自 Banana Pi去年推出Banana Pi BPI-M2 Ultra SBC 和BPI-M2 Berry以来&am…

Skip Connection——提高深度神经网络性能的利器

可以参考一下这篇知乎所讲 https://zhuanlan.zhihu.com/p/457590578 长跳跃连接用于将信息从编码器传播到解码器&#xff0c;以恢复在下采样期间丢失的信息

对于uts namespace共享的测试

前言 单单以下列命令运行虽然是root&#xff0c;还不行&#xff0c;我们需要加--privileged&#xff0c;不然会报 hostname: you must be root to change the host name docker run -it --utshost ubuntu:latest /bin/bash 如果加上--privileged后 docker run -it --priv…

视频动态壁纸 Dynamic Wallpaper for Mac中文

Dynamic Wallpaper是一款Mac平台上的动态壁纸应用程序&#xff0c;它可以根据时间等因素动态切换壁纸&#xff0c;提供更加生动和多样化的桌面体验。 Dynamic Wallpaper包含了多个动态壁纸&#xff0c;用户可以根据自己的喜好选择和切换。这些动态壁纸可以根据时间等因素进行自…

【LeetCode-中等题】200. 岛屿数量

文章目录 题目方法一&#xff1a;深度优先搜索 dfs方法二&#xff1a;广度优先搜索 bfs方法三&#xff1a;&#xff08;重点掌握&#xff09;并查集 题目 方法一&#xff1a;深度优先搜索 dfs 思路&#xff1a;让一个扫描指针扫描每一个格子&#xff0c;然后每扫到一个为1的格…

3D路径,控件

主要分3大块&#xff1a; 1控制面板 vc:VisuStruct3DControl; // 用于绑定3d轨迹控件的按钮2轨迹图&#xff1a;【整体图】 SM3_CNC_Visu.SMC_PathCopierCompleteQueue; //坐标流轨迹图 SM3_CNC_Visu.SMC_PathCopierFile; //文本轨迹图 SMC_PositionTracker (FB) /…

NetSuite海鲜书 - 知识会汇编 用户篇 2023

NetSuite2021年初夏&#xff0c;NetSuite知识会成立。它由本人&#xff0c;上海德之匠信息技术有限公司的毛岩喆&#xff08;江湖人称Rick&#xff09;发起建立。建立的初衷秉承Rick个人博客“学问思辨&#xff0c;企业信息化路上的行者”的理念&#xff0c;期望能够在NetSuite…

c++(8.29)auto关键字,lambda表达式,数据类型转换,标准模板库,list,文件操作+Xmind

作业&#xff1a; 封装一个学生的类&#xff0c;定义一个学生这样类的vector容器, 里面存放学生对象&#xff08;至少3个&#xff09; 再把该容器中的对象&#xff0c;保存到文件中。 再把这些学生从文件中读取出来&#xff0c;放入另一个容器中并且遍历输出该容器里的学生。…

Apifox(1)比postman更优秀的接口自动化测试平台

Apifox介绍 Apifox 是 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台&#xff0c;定位 Postman Swagger Mock JMeter。通过一套系统、一份数据&#xff0c;解决多个系统之间的数据同步问题。只要定义好 API 文档&#xff0c;API 调试、API 数据 Mock、API 自…

睿趣科技:开抖音小店挣钱吗到底

在当今数字化时代&#xff0c;社交媒体平台成为了创业者们寻找商机和赚钱的新途径。而抖音作为一款风靡全球的短视频分享平台&#xff0c;自然也成为了许多人开设小店、进行创业的选择之一。那么&#xff0c;开抖音小店能否真正实现盈利&#xff0c;成为了一个备受关注的话题。…

Windows开发调试纯Linux代码(WSL+Qt+MobaXterm)环境搭建(超详细教程)

为何要调试Linux代码 1 学习Linux环境开发 想必很多同学都想学习Linux环境下的开发&#xff0c;一个是很多纯服务端程序不需要Windows这样的窗口界面。另一个纯服务端开发Linux的命令行以及脚本优势也比较明显。相反&#xff0c;Windows在纯服务端编程方面并没有Linux有优势。…

java内存模型讨论及案例分析

常用内存选项 -Xmx&#xff1a; 最大堆大小 -Xms&#xff1a;最小堆大小 -Xss &#xff1a;线程堆栈大小&#xff0c;默认1M 生产环境最好保持 Xms Xmx java内存研究 内存布局 可见&#xff1a; 堆大小 新生代 老年代&#xff0c;新生代EFrom SurvivorTo Survivor。新…

Maven入门教程(三):Maven语法

视频教程&#xff1a;Maven保姆级教程 Maven入门教程(一)&#xff1a;安装Maven环境 Maven入门教程(二)&#xff1a;idea/Eclipse使用Maven Maven入门教程(三)&#xff1a;Maven语法 Maven入门教程(四)&#xff1a;Nexus私服 Maven入门教程(五)&#xff1a;自定义脚手架 6.Mav…

【vue】this.$nextTick解决this.$refs undefined的问题

说明 1、发邮件页面分成两个部分&#xff1a;模态框页面&#xff08;头部和底部&#xff09;和form页面&#xff08;操作按钮&#xff09; 2、点击回复按钮&#xff0c;要将发件人信息带到模态框页面&#xff0c;给定默认值且禁止收件人下拉选择&#xff08;多个邮箱&#xff…

数据库(MySQL)的存储过程

一、存储过程介绍 存储过程是事先经过编译并存储在数据库中的一段SQL 语句的集合&#xff0c;调用存储过程可以简化应用开发人员的很多工作&#xff0c;减少数据在数据库和应用服务器之间的传输&#xff0c;对于提高数据处理的效率是有好处的。 存储过程思想上很简单&#xff0…

基于白鲸算法优化的BP神经网络(预测应用) - 附代码

基于白鲸算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于白鲸算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.白鲸优化BP神经网络2.1 BP神经网络参数设置2.2 白鲸算法应用 4.测试结果&#xff1a;5.Matlab代码 摘要…

探索在云原生环境中构建的大数据驱动的智能应用程序的成功案例,并分析它们的关键要素。

文章目录 1. Netflix - 个性化推荐引擎2. Uber - 实时数据分析和决策支持3. Airbnb - 价格预测和优化5. Google - 自然语言处理和搜索优化 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专…

Leetcode110. 平衡二叉树

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 题解&#xff…

工控上位机程序为什么只能用C语言?

工控上位机程序并不只能用C#开发&#xff0c;实际上在工业自动化领域中&#xff0c;常见的上位机开发语言包括但不限于以下几种&#xff1a;C#: C#是一种常用的编程语言&#xff0c;在工控领域中被广泛使用。它具有良好的面向对象特性和丰富的类库支持&#xff0c;可以实现高性…

MySQL - 函数

1 什么是函数&#xff1f; 要想实现上面的这些效果&#xff0c;就得借助于MySQL当中的内置函数。 函数&#xff1a;是指一段可以直接被另一段程序调用的程序或代码。 MySQL当中内置了很多的函数&#xff0c;根据其操作的数据类型&#xff0c;分为以下四类&#xff1a; 字符串…