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

Unity中DOTween实战

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

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)

相关推荐

5分钟搭建公网https网页文件服务器,免费权威TLS证书

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习前言本文主要讲解如何快速搭建一个https网页文件服务器,并免费申请权威机构颁发的tls证...

nginx负载均衡配置(nginx负载均衡配置两个程序副本)

Nginx是什么没有听过Nginx?那么一定听过它的“同行”Apache吧!Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(UniformResources...

19《Nginx 入门教程》Nginx综合实践

今天我们将基于Nginx完成两个比较有用的场景,但是用到的Nginx的配置非常简单。内部Yum源搭建内部Pip源搭建1.实验环境ceph1centos7.6内网ip:172.16....

Nginx性能调优与优化指南(nginx优化配置大全)

Nginx性能调优需要结合服务器硬件资源、业务场景和负载特征进行针对性优化。以下是一些关键优化方向和具体配置示例:一、Nginx配置优化1.进程与连接数优化nginxworker_process...

C++后端开发必须彻底搞懂Nginx,从原理到实战(高级篇)

本文为Nginx实操高级篇。通过配置Nginx配置文件,实现正向代理、反向代理、负载均衡、Nginx缓存、动静分离和高可用Nginx6种功能,并对Nginx的原理作进一步的解析。当需...

【Nginx】史上最全的Nginx配置详解

Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里,http块又包括http全局块和server块。Nginx是非常重要的负载均衡中间件,被广泛应用于大型...

【Nginx】Nginx 4种常见配置实例(nginx基本配置与参数说明)

本文主要介绍nginx4种常见的配置实例。Nginx实现反向代理;Nginx实现负载均衡;Nginx实现动静分离;Nginx实现高可用集群;Nginx4种常见配置实例如下:一、Nginx反向代理配...

使用nginx+allure管理自动化测试报告

allure在自动化测试中经常用来生成漂亮的报告,但是网上及官网上给出的例子都仅仅是针对单个测试用例文件的形式介绍的,实际使用中,自动化测试往往需要包含不止一个产品或项目,本文介绍如何使用nginx+...

nginx配置文件详解(nginx配置文件详解高清版)

Nginx是一个强大的免费开源的HTTP服务器和反向代理服务器。在Web开发项目中,nginx常用作为静态文件服务器处理静态文件,并负责将动态请求转发至应用服务器(如Django,Flask,et...

SpringCloud Eureka-服务注册与发现

1.Eureka介绍1.1学习Eureka前的说明目前主流的服务注册&发现的组件是Nacos,但是Eureka作为老牌经典的服务注册&发现技术还是有必要学习一下,原因:(1)一些早期的分布式微服...

微服务 Spring Cloud 实战 Eureka+Gateway+Feign+Hystrix

前言我所在项目组刚接到一个微服务改造需求,技术选型为SpringCloud,具体需求是把部分项目使用SpringCloud技术进行重构。本篇文章中介绍了Eureka、Gateway、Fe...

深度剖析 Spring Cloud Eureka 底层实现原理

你作为一名互联网大厂后端技术开发人员,在构建分布式系统时,是不是常常为服务的注册与发现而头疼?你是否好奇,像SpringCloudEureka这样被广泛使用的组件,它的底层实现原理到底是怎样的...

热爱生活,喜欢折腾。(很热爱生活)

原文是stackoverflow的一则高票回答,原文链接可能之前也有人翻译过,但是刚好自己也有疑惑,所以搬运一下,个人水平有限所以可能翻译存在误差,欢迎指正(如侵删)。尽管classmethod和st...

GDB调试的高级技巧(详细描述gdb调试程序的全过程)

GDB是我们平时调试c/c++程序的利器,查起复杂的bug问题,比打印大法要好得多,但是也不得不说,gdb在默认情况下用起来并不是很好用,最近学习到几个高级点的技巧,分享下:一美化打印先上个例子...

Arduino 实例(二十三)Arduino 给Python 编译器发送信息

1首先Python需要安装Pyserial库,在命令提示符中输入pipintallpyserial若是遇到提示‘pip‘不是内部或外部命令,也不是可运行的程序或批处理文件,则需要设置环境变...