[Unity插件]DOTween基础
官方文档链接:http://dotween.demigiant.com/documentation.PHP#globalSettings
普通版下载地址:http://dotween.demigiant.com/download.php
pro版下载地址:http://pan.baidu.com/s/1dEzTQkL
(pro版提供DOTween Animation和DOTween Path这两个组件,支持可视化编辑)
移动类型:http://robertpenner.com/easing/easing_demo.html
DOTween真的比iTween好很多:
1.编写方面更加人性化
2.效率高很多,其中有一点是因为iTween使用的是unity内置的SendMessage
DOTween一般的样子是这样滴:
using DG.Tweening;
transform.DOMoveX(45, 1).SetDelay(2).SetEase(Ease.OutQuad).OnComplete(MyCallback);
好了,正式开始!
一些名词:
Tweener:补间动画
Sequence:相当于一个Tweener的链表,可以通过执行一个Sequence来执行一串Tweener
Tween:Tweener + Sequence
Nested tween:Sequence中的一个Tweener称为一个Nested tween
主要的方法(就是最常用的):
1.以DO开头的方法:就是补间动画的方法。例如:transform.DOMoveX(100,1)
2.以Set开头的方法:设置补间动画的一些属性。例如:myTween.SetLoops(4, LoopType.Yoyo)
3.以On开头的方法:补间动画的回调方法。例如:myTween.OnStart(myStartFunction)
DOTween初始化与全局设置:
当你第一次创建一个Tween时,DOTween就会自动初始化(只初始化一次),使用缺省值。
当然,也可以使用DOTween.Init方法进行自定义,但要在第一次创建一个Tween前。所有创建的Tween都会受DOTween.Init方法的影响。
但之后,你也可以通过DOTween类的一些静态方法或者变量来修改全局设置:
- static LogBehaviour DOTween.logBehaviour
- static bool DOTween.showUnityEditorReport
- static float DOTween.timeScale
- static bool DOTween.useSafeMode
- static DOTween.SetTweensCapacity(int maxTweeners, int maxSequences)
- static bool DOTween.defaultAutoKill
- static AutoPlay DOTween.defaultAutoPlay
- static float DOTween.defaultEaseOvershootOrAmplitude
- static float DOTween.defaultEasePeriod
- static Ease DOTween.defaultEaseType
- static LoopType DOTween.defaultLoopType
- static bool DOTween.defaultRecyclable
- static bool DOTween.defaultTimeScaleIndependent
- static UpdateType DOTween.defaultUpdateType
static DOTween.Init(bool recycleAllByDefault = false, bool useSafeMode = true, LogBehaviour logBehaviour = LogBehaviour.ErrorsOnly)
recycleAllByDefault :如果为true,则当Tween完成时就会被回收,放到一个池中;否则就会被destroy
useSafeMode :效率会稍微降低,但更安全
logBehaviour :默认值为只打印错误信息
创建Tweener(有三种方法):
1.
- static DOTween.To(getter, setter, to, float duration)
- 以DOTween.To(() => myVector, x => myVector = x, new Vector3(3, 4, 8), 1);为例,就是对myVector进行插值,目标值为Vector3(3, 4, 8)
2.
- transform.DOMove(new Vector3(2,3,4), 1);
- rigidbody.DOMove(new Vector3(2,3,4), 1);
- material.DOColor(Color.green, 1);
对于unity内置的一些组件,都可以通过".+DO开头的方法"的方式创建补间动画
以transform.DOMove(new Vector3(2,3,4), 1)为例,new Vector3(2,3,4)是最终值,意思是用一秒的时间运动到Vector3(2,3,4)
而transform.DOMove(new Vector3(2, 3, 4), 1).From(),就是从Vector3(2,3,4)运动到当前位置
3.
- static DOTween.Punch(getter, setter, Vector3 direction, float duration, int vibrato, float elasticity)
- static DOTween.Shake(getter, setter, float duration, float/Vector3 strength, int vibrato, float randomness, bool ignoreZAxis)
- static DOTween.ToAlpha(getter, setter, float to, float duration)
- static DOTween.ToArray(getter, setter, float to, float duration)
- static DOTween.ToAxis(getter, setter, float to, float duration, AxisConstraint axis)
- static DOTween.To(setter, float startValue, float endValue, float duration)
创建Sequence:
Sequence可以包含Sequence,当执行一个Sequence时会顺序执行Tweener,可以使用Insert方法实现同时执行。
Sequence的方法:
- static DOTween.Sequence()
- Append(Tween tween)
- AppendCallback(TweenCallback callback)
- AppendInterval(float interval)
- Insert(float atPosition, Tween tween)
- InsertCallback(float atPosition, TweenCallback callback)
- Join(Tween tween)
- Prepend(Tween tween)
- PrependCallback(TweenCallback callback)
- PrependInterval(float interval)
例子:
- // Grab a free Sequence to use
- Sequence mySequence = DOTween.Sequence();
- // Add a movement tween at the beginning
- mySequence.Append(transform.DOMoveX(1, 1));
- // Add a rotation tween as soon as the previous one is finished
- mySequence.Append(transform.DORotate(new Vector3(0, 180, 0), 1));
- // Delay the whole Sequence by 1 second
- mySequence.PrependInterval(1);
- // Insert a scale tween for the whole duration of the Sequence
- mySequence.Insert(0, transform.DOScale(new Vector3(3, 3, 3), mySequence.Duration()));
等同于:
- Sequence mySequence = DOTween.Sequence();
- mySequence.Append(transform.DOMoveX(45, 1))
- .Append(transform.DORotate(new Vector3(0, 180, 0), 1))
- .PrependInterval(1)
- .Insert(0, transform.DOScale(new Vector3(3, 3, 3), mySequence.Duration()));
上面我们提到了全局设置,这里我们再说一说针对Tweener和Sequence的局部设置
- float timeScale
- SetAs(Tween tween \ TweenParams tweenParams)
- SetAutoKill(bool autoKillOnCompletion = true)
- SetEase(Ease easeType \ AnimationCurve animCurve \ EaseFunction customEase)
- SetId(object id)
- SetLoops(int loops, LoopType loopType = LoopType.Restart)
- SetRecyclable(bool recyclable)
- SetUpdate(UpdateType updateType, bool isIndependentUpdate = false)
- 注意的一点是SetUpdate方法可以让目标忽略timeScale
回调方法:
- OnComplete(TweenCallback callback)
- OnKill(TweenCallback callback)
- OnPlay(TweenCallback callback)
- OnPause(TweenCallback callback)
- OnRewind(TweenCallback callback)
- OnStart(TweenCallback callback)
- OnStepComplete(TweenCallback callback)
- OnUpdate(TweenCallback callback)
- OnWaypointChange(TweenCallback<int> callback)
还有一些针对部分Tweener的特殊的局部设置:
注意SetOptions方法必须紧跟Tweener,就好像这样:
DOTween.To(()=> myVector, x=> myVector = x, new Vector3(2,2,2), 1).SetOptions(AxisConstraint.Y, true);
TweenParams:
就是可以将一些参数应用到多个Tweener中
- // Store settings for an infinite looping tween with elastic ease
- TweenParams tParms = new TweenParams().SetLoops(-1).SetEase(Ease.OutElastic);
- // Apply them to a couple of tweens
- transformA.DOMoveX(15, 1).SetAs(tParms);
- transformB.DOMoveY(10, 1).SetAs(tParms);
操作Tweener(有三种方法):
1.DOTween静态方法
- // Pauses all tweens
- DOTween.PauseAll();
- // Pauses all tweens that have "badoom" as an id
- DOTween.Pause("badoom");
- // Pauses all tweens that have someTransform as a target
- DOTween.Pause(someTransform);
2.Tweener方法
- myTween.Pause();
3.部件.+以DO开头的方法
- transform.DOPause();
以上的是Pause方法,以下的是其余的操作方法。上面三种方式中,DOTween和Tweener都有以下的操作方法,而部件的话,要在前面加上"DO"。
- CompleteAll/Complete()
- FlipAll/Flip()
- GotoAll/Goto(float to, bool andPlay = false)
- KillAll/Kill(bool complete = true)
- PauseAll/Pause()
- PlayAll/Play()
- PlayBackwardsAll/PlayBackwards()
- PlayForwardAll/PlayForward()
- RestartAll/Restart(bool includeDelay = true)
- RewindAll/Rewind(bool includeDelay = true)
- TogglePauseAll/TogglePause()
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
实例:
1.
- using UnityEngine;
- using System.Collections;
- using DG.Tweening;
- public class Test : MonoBehaviour {
- public RectTransform rt;
- private bool isIn = false;
- // Use this for initialization
- void Start ()
- {
- //修改的是世界坐标
- //Tweener t = rt.DOMove(Vector3.zero, 0.3f);
- //修改的是局部坐标
- Tweener t = rt.DOLocalMove(Vector3.zero, 0.3f);
- //默认动画播放完成会自动销毁
- t.SetAutoKill(false);
- t.Pause();
- }
- public void OnClick ()
- {
- if (!isIn)
- {
- //将开始该物体的所有Tweener
- rt.DOPlayForward();
- }
- else
- {
- rt.DOPlayBackwards();
- }
- isIn = !isIn;
- }
- }
2.
- using UnityEngine;
- using System.Collections;
- using DG.Tweening;
- using UnityEngine.UI;
- public class Test2 : MonoBehaviour {
- public Transform t;
- public Text text;
- // Use this for initialization
- void Start ()
- {
- //Vector3.zero是绝对位置,表示从Vector3.zero移动到当前位置
- //t.DOMove(Vector3.zero, 2).From();
- //默认为false
- //Vector3.forward是相对位置,表示从Vector3.forward加当前位置移动到当前位置
- t.DOMove(Vector3.forward, 2).From(true);
- //逐字显示
- text.DOText("宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥", 3);
- }
- }
[Unity插件]DOTween基础的更多相关文章
- unity缓动插件DOTween Pro v0.9.680
DoTween Pro是一款unity插件,是unity中最好用的tween插件,比起Dotween的免费版要多很多功能,实现脚本和视觉脚本的新功能,支持包括移动,淡出,颜色,旋转,缩放,打孔,摇动, ...
- 【学习中】Unity插件之NGUI 完整视频教程
课程 章节 内容 签到 Unity插件之NGUI 完整视频教程 第一章 NGUI基础控件和基础功能学习 1.NGUI介绍和插件的导入 6月29日 2.创建UIRoot 6月29日 3.学习Label控 ...
- Unity插件之Unity调用C#编译的DLL
Unity插件分为两种:托管插件(Managed Plugins)和本地插件(Native Plugins).本文先来说说Unity中的托管插件,本地插件的文章留到下一篇文章再说. 有时候我们会有这样 ...
- Unity插件之NGUI学习(8)—— Table和NGUI尺寸转换为世界坐标系尺寸
依据 Unity插件之NGUI学习(2),创建一个UI Root,在UI Root下创建一个Texture作为背景图,并设置图片,在Wiget下调整大小:然后在UI Root下再创建一个Panel. ...
- 【Unity插件】LitJson杂谈
距离上一次更新博客已有一段时间了,一实习就懒了,嘿嘿.这次谈一下在实习里新碰到的一个Unity插件--LitJson(也可以去官网下载最新版). 开场白 LitJson是一个开源项目,比较小巧轻便,安 ...
- 导入Unity插件时出现Failed to import package with error: Couldn't decompress package
导入Unity插件时出现Failed to import package with error: Couldn't decompress package 一开始以为压缩包本身有问题,坏了 后来发现在父 ...
- MyBatis原理第四篇——statementHandler对象(sqlSession内部核心实现,插件的基础)
首先约定文中将的四大对象是指:executor, statementHandler,parameterHandler,resultHandler对象.(为了方便下面的文章说道四大对象就专指它们) 讲到 ...
- Unity插件-NGUI使用教程
Unity插件-NGUI使用教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 NGUI 一款强大的次 ...
- Unity插件-ShareSDK使用指南
Unity插件ShareSDK使用教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Summariz ...
随机推荐
- 201772020113李清华《面向对象程序设计(java)》第八周学习总结
实验六 接口的定义与使用 实验时间 2018-10-18 1.实验目的与要求 (1) 掌握接口定义方法: (2) 掌握实现接口类的定义要求: (3) 掌握实现了接口类的使用要求: (4) 掌握程序回调 ...
- vuejs如何在服务器部署
title: vuejs如何在服务器部署 date: 2017-10-31 20:41:03 tags: [vue] --- 上传到网站服务器 Vue 是一个 javascript 的前端框架,它是运 ...
- OS模块的介绍
os,语义为操作系统,模块提供了访问多个操作系统服务的功能,可以处理文件和目录这些我们日常手动需要做的操作.os和它的子模块os.path还包括一些用于检查.构造.删除目录和文件的函数,以及一些处理路 ...
- typedef typename
所以根据上述两条分析, typedef typename RefBase::weakref_type weakref_type; 语句的真是面目是: typedef创建了存在类型的别名,而typen ...
- opencv setTo()
转载至 作者:跬步达千里 opencv的setTo函数是将图像设置为某个值; 例如: 1.有一个Mat src,想将他的值全部设置成0,则可以src.setTo(0) 2.setTo还有更为高级的用法 ...
- 云笔记项目-笔记列表弹出"分享移动删除"子菜单
业务需求: 笔记列表里还有一个按钮可以弹出子菜单,要求做到以下几点: (1)点击选中的笔记行的弹出按钮后,弹出子菜单,再次点击,子菜单收回. (2)选中其他笔记后,子菜单消失.效果如下图所示: 业务分 ...
- java文件转发
实际开发情景中,有时会遇到文件需要从一台服务器发到另一台服务器的情况,比如外网发到内网,服务器之间文件同步的情况. 就可以用文件转发. 转发端代码: /** * * @param fileName 保 ...
- Java的三种代理模式(Spring动态代理对象)
Java的三种代理模式 1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩 ...
- Java18-java语法基础——集合框架
Java18-java语法基础——集合框架 一.什么是集合框架 1.集合框架:是为表示和操作集合而规定的一种统一的.标准的体系结构. 2.任何集合框架都包含三大块内容:对外的接口.接口的实现和对集合运 ...
- 微擎开发------day02
基本要素: 微擎系统数据库操作使用PDO兼容方式,参数绑定进行查询操作 (1) 数据表加上表前缀 $sql = "select * from ".tablename('users ...