百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Unity中DOTween实战

bigegpt 2024-08-10 12:15 8 浏览

Unity中DOTween实战

一、简介

DOTween是Unity的一个快速、高效、完全类型安全的面向对象动画引擎,针对C#用户进行了优化,免费开源,具有大量高级功能DOTween是Unity的一个快速、高效、完全类型安全的面向对象动画引擎,针对C#用户进行了优化,免费开源,具有大量高级功能。方面下载地址为http://dotween.demigiant.com/download.php。

作者公众号

我在下面举的例子都是在项目开发中使用的部分功能代码,我以例子的方式给大家讲解,这样印象更深刻且更容易学习。


二、首先,看下面初始化的方法

static DOTween.Init(bool recycleAllByDefault

= false, bool useSafeMode = true, LogBehaviour logBehaviour = LogBehaviour.ErrorsOnly)

,这是一个可选的方法;当需要大量建立Tweener和Sequence对象时,为了性能考虑可能通过以下方法预先申请内存

DOTween.Init(true, true, LogBehaviour.Verbose).SetCapacity(200, 10);

“SetCapacity”方法允许设置最大Tweeners/Sequences初始容量,例子中预先为Tweener预先申请了2000个Tweener对象的内存和10个Sequence对象的内存。


using DG.Tweening;

在调用DOTween的方法以前在脚本的前面要加上命名空间


三、简单小例子 DOMove的使用

函数原型为
DOMove(Vector3 to, float duration, bool snapping)

将目标的位置移动到给定值,参数“to”是移动到的位置,参数“duration”为移动的时间,参数“snapping”如果为TRUE,则tween将平滑地将所有值捕捉为整数,默认为false。

public float Speed = 2f;

Vector3 end = new Vector3(1.5f, 1.5f, 1.5f);

this.transform.DOMove(end, Speed).SetLoops(10000, LoopType.Yoyo).SetEase(Ease.Linear);

1) 首先取得当前脚本所在的transform,这样我们才能使用DOTween的方法;

2) 下来我们使用DOMove方法将当前游戏对象从当前位置移动到变量“end”指定的位置,并且时间为2秒;

3) SetLoops(10000, LoopType.Yoyo)从当前位置移动到指定位置的动画 - 像悠悠球(LoopType.Yoyo)一样来回移动10000次;

4) SetEase(Ease.Linear) 从当前位置移动到指定位置的样式为线性的,也就是速度不变,也可以是其它的样式,读者可以自己尝试。


三、Sequence动画序列

Sequence动画序列可以包含任意多个Tweener或其它多个Sequence动画序列。


1)先新建一个动画序列

Sequence sq = DOTween.Sequence();


2)向序列中添加旋转动画

下面“SpheneTr”是一个GameObject的Transform的组件


下面代码新建一个“SpheneTwRotate”对象的旋转tweener,

注:旋转方法为DORotate,原型为
DORotate(Vector3?to,?float?duration,?RotateMode?mode) 将目标旋转到给定值。


如下,在2秒的时间内旋转到值“ Vector3(150, 0, 0)”

Tweener SpheneTwRotate = SpheneTr.DORotate(new Vector3(150, 0, 0), 2, RotateMode.LocalAxisAdd);

在序列sq中上面建立的Tweener

sq.Append(SpheneTwRotate);


3)向序列中添加移动动画

新建一个“m_SpheneTr”对象的移动tweener,将SpheneTr在2秒内移动到指定位置

Tweener SpheneTwMove= m_SpheneTr.DOMove(new Vector3(5, 5, 5), 2)

sq.Append(SpheneTwMove);


4)播放这个序列动画,并且是无限循环的(下面参数是-1)

sq.Play().SetLoops(-1);


整体效果是小球先旋转2秒,再移动一2秒,并且这个动画是无限循环的。


如第三步中sq.Append(SpheneTwMove)修改为sq.Join(SpheneTwMove);则整体效果是小球一边旋转一边移动,即移动和旋转是同时进行的,并且这个动画是无限循环的。


四、插入动画事件的回调

以官方的例子作为讲解

// Callback 没有参数,下面代码调用游戏对象的transform,将对象延X轴在1秒内移动4个单位,并在动画结束时调用无参数的函数MyCallback

transform.DOMoveX(4, 1).OnComplete(MyCallback);


// Callback 带参数

transform.DOMoveX(4, 1).OnComplete(()=>MyCallback(someParam, someOtherParam));

五、其它使用情况

1)声音源 AudioSource

DOFade(float to, float duration)

Tweens an AudioSource's volume to the given value..

DOPitch(float?to,?float?duration)

Tweens an AudioSource's pitch to the given value..


2)有关摄像机的动画 - Camera

DOAspect(float?to,?float?duration)

DOColor(Color?to,?float?duration)

DOFarClipPlane(float?to,?float?duration)

DOFieldOfView(float?to,?float?duration)

DONearClipPlane(float?to,?float?duration)

DOOrthoSize(float?to,?float?duration)

DOPixelRect(Rect?to,?float?duration)

DORect(Rect?to,?float?duration)

DOShakePosition(float?duration,?float/Vector3?strength,?int?vibrato,?float?randomness,?bool?fadeOut,?ShakeRandomnessMode?randomnessMode)

DOShakeRotation(float?duration,?float/Vector3?strength,?int?vibrato,?float?randomness,?bool?fadeOut,?ShakeRandomnessMode?randomnessMode)


3)有机灯光的动画 - Light

DOColor(Color to, float duration)

DOIntensity(float to, float duration)

DOShadowStrength(float to, float duration)

Blendable tweens

DOBlendableColor(Color to, float duration)


4) LineRenderer

DOColor(Color2 startValue, Color2 endValue, float duration)


5) 材质方面的动画 - Material

DOColor(Color to, float duration)

DOColor(Color to, string property, float duration)

DOColor(Color to, int propertyID, float duration)

DOFade(float to, float duration)

DOFade(float to, string property, float duration)

DOFade(float to, int propertyID, float duration)

DOFloat(float to, string property, float duration)

DOFloat(float to, int propertyID, float duration)

DOGradientColor(Gradient to, float duration)

DOGradientColor(Gradient to, string property, float duration)

DOGradientColor(Gradient to, int propertyID, float duration)

DOOffset(Vector2 to, float duration)

DOOffset(Vector2 to, string property, float duration)

DOOffset(Vector2 to, int propertyID, float duration)

DOTiling(Vector2 to, float duration)

DOTiling(Vector2 to, string property, float duration)

DOTiling(Vector2 to, int propertyID, float duration)

DOVector(Vector4 to, string property, float duration)

DOVector(Vector4 to, int propertyID, float duration)

Blendable tweens

DOBlendableColor(Color to, float duration)

DOBlendableColor(Color to, string property, float duration)

DOBlendableColor(Color to, int propertyID, float duration)


6) 刚体 - Rigidbody

Move

DOMove(Vector3 to, float duration, bool snapping)

DOMoveX/DOMoveY/DOMoveZ(float to, float duration, bool snapping)

DOJump(Vector3 endValue, float jumpPower, int numJumps, float duration, bool snapping)

Rotate

DORotate(Vector3 to, float duration, RotateMode mode)

DOLookAt(Vector3 towards, float duration, AxisConstraint axisConstraint = AxisConstraint.None, Vector3 up = Vector3.up)

Path – no FROM

DOPath(Vector3[] waypoints, float duration, PathType pathType = Linear, PathMode pathMode = Full3D, int resolution = 10, Color gizmoColor = null)

DOLocalPath(Vector3[] waypoints, float duration, PathType pathType = Linear, PathMode pathMode = Full3D, int resolution = 10, Color gizmoColor = null)

PRO ONLY ? Spiral – no FROM

DOSpiral(float duration, Vector3 axis = null, SpiralMode mode = SpiralMode.Expand, float speed = 1, float frequency = 10, float depth = 0, bool snapping = false)

相关推荐

C#.NET Autofac 详解(c# autoit)

简介Autofac是一个成熟的、功能丰富的.NET依赖注入(DI)容器。相比于内置容器,它额外提供:模块化注册、装饰器(Decorator)、拦截器(Interceptor)、强o的属性/方法注...

webapi 全流程(webapi怎么部署)

C#中的WebAPIMinimalApi没有控制器,普通api有控制器,MinimalApi是直达型,精简了很多中间代码,广泛适用于微服务架构MinimalApi一切都在组控制台应用程序类【Progr...

.NET外挂系列:3. 了解 harmony 中灵活的纯手工注入方式

一:背景1.讲故事上一篇我们讲到了注解特性,harmony在内部提供了20个HarmonyPatch重载方法尽可能的让大家满足业务开发,那时候我也说了,特性虽然简单粗暴,但只能解决95%...

C# 使用SemanticKernel调用本地大模型deepseek

一、先使用ollama部署好deepseek大模型。具体部署请看前面的头条使用ollama进行本地化部署deepseek大模型二、创建一个空的控制台dotnetnewconsole//添加依赖...

C#.NET 中间件详解(.net core中间件use和run)

简介中间件(Middleware)是ASP.NETCore的核心组件,用于处理HTTP请求和响应的管道机制。它是基于管道模型的轻量级、模块化设计,允许开发者在请求处理过程中插入自定义逻辑。...

IoC 自动注入:让依赖注册不再重复劳动

在ASP.NETCore中,IoC(控制反转)功能通过依赖注入(DI)实现。ASP.NETCore有一个内置的依赖注入容器,可以自动完成依赖注入。我们可以结合反射、特性或程序集扫描来实现自动...

C#.NET 依赖注入详解(c#依赖注入的三种方式)

简介在C#.NET中,依赖注入(DependencyInjection,简称DI)是一种设计模式,用于实现控制反转(InversionofControl,IoC),以降低代码耦合、提高可...

C#从零开始实现一个特性的自动注入功能

在现代软件开发中,依赖注入(DependencyInjection,DI)是实现松耦合、模块化和可测试代码的一个重要实践。C#提供了优秀的DI容器,如ASP.NETCore中自带的Micr...

C#.NET 仓储模式详解(c#仓库货物管理系统)

简介仓储模式(RepositoryPattern)是一种数据访问抽象模式,它在领域模型和数据访问层之间创建了一个隔离层,使得领域模型无需直接与数据访问逻辑交互。仓储模式的核心思想是将数据访问逻辑封装...

C#.NET 泛型详解(c# 泛型 滥用)

简介泛型(Generics)是指在类型或方法定义时使用类型参数,以实现类型安全、可重用和高性能的数据结构与算法为什么需要泛型类型安全防止“装箱/拆箱”带来的性能损耗,并在编译时检测类型错误。可重用同一...

数据分析-相关性分析(相关性 分析)

相关性分析是一种统计方法,用于衡量两个或多个变量之间的关系强度和方向。它通过计算相关系数来量化变量间的线性关系,从而帮助理解变量之间的相互影响。相关性分析常用于数据探索和假设检验,是数据分析和统计建模...

geom_smooth()函数-R语言ggplot2快速入门18

在每节,先运行以下这几行程序。library(ggplot2)library(ggpubr)library(ggtext)#用于个性化图表library(dplyr)#用于数据处理p...

规范申报易错要素解析(规范申报易错要素解析)

为什么要规范申报?规范申报是以满足海关监管、征税、统计等工作为目的,纳税义务人及其代理人依法向海关如实申报的行为,也是海关审接单环节依法监管的重要工作。企业申报的内容须符合《中华人民共和国海关进出口货...

「Eurora」海关编码归类 全球海关编码查询 关务服务

  海关编码是什么?  海关编码即HS编码,为编码协调制度的简称。  其全称为《商品名称及编码协调制度的国际公约》(InternationalConventionforHarmonizedCo...

9月1日起,河南省税务部门对豆制品加工业试行新政7类豆制品均适用投入产出法

全媒体记者杨晓川报道9月2日,记者从税务部门获悉,为减轻纳税人税收负担,完善农产品增值税进项税额抵扣机制,根据相关规定,结合我省实际情况,经广泛调查研究和征求意见,从9月1日起,我省税务部门对豆制品...