官方文档链接: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类的一些静态方法或者变量来修改全局设置:

  1. static LogBehaviour DOTween.logBehaviour
  2. static bool DOTween.showUnityEditorReport
  3. static float DOTween.timeScale
  4. static bool DOTween.useSafeMode
  5. static DOTween.SetTweensCapacity(int maxTweeners, int maxSequences)
  6. static bool DOTween.defaultAutoKill
  7. static AutoPlay DOTween.defaultAutoPlay
  8. static float DOTween.defaultEaseOvershootOrAmplitude
  9. static float DOTween.defaultEasePeriod
  10. static Ease DOTween.defaultEaseType
  11. static LoopType DOTween.defaultLoopType
  12. static bool DOTween.defaultRecyclable
  13. static bool DOTween.defaultTimeScaleIndependent
  14. 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.

  1. static DOTween.To(getter, setter, to, float duration)
  2. 以DOTween.To(() => myVector, x => myVector = x, new Vector3(3, 4, 8), 1);为例,就是对myVector进行插值,目标值为Vector3(3, 4, 8)

2.

  1. transform.DOMove(new Vector3(2,3,4), 1);
  2. rigidbody.DOMove(new Vector3(2,3,4), 1);
  3. 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.

  1. static DOTween.Punch(getter, setter, Vector3 direction, float duration, int vibrato, float elasticity)
  2. static DOTween.Shake(getter, setter, float duration, float/Vector3 strength, int vibrato, float randomness, bool ignoreZAxis)
  3. static DOTween.ToAlpha(getter, setter, float to, float duration)
  4. static DOTween.ToArray(getter, setter, float to, float duration)
  5. static DOTween.ToAxis(getter, setter, float to, float duration, AxisConstraint axis)
  6. static DOTween.To(setter, float startValue, float endValue, float duration)

创建Sequence:

Sequence可以包含Sequence,当执行一个Sequence时会顺序执行Tweener,可以使用Insert方法实现同时执行。

Sequence的方法:

  1. static DOTween.Sequence()
  2. Append(Tween tween)
  3. AppendCallback(TweenCallback callback)
  4. AppendInterval(float interval)
  5. Insert(float atPosition, Tween tween)
  6. InsertCallback(float atPosition, TweenCallback callback)
  7. Join(Tween tween)
  8. Prepend(Tween tween)
  9. PrependCallback(TweenCallback callback)
  10. PrependInterval(float interval)

例子:

  1. // Grab a free Sequence to use
  2. Sequence mySequence = DOTween.Sequence();
  3. // Add a movement tween at the beginning
  4. mySequence.Append(transform.DOMoveX(1, 1));
  5. // Add a rotation tween as soon as the previous one is finished
  6. mySequence.Append(transform.DORotate(new Vector3(0, 180, 0), 1));
  7. // Delay the whole Sequence by 1 second
  8. mySequence.PrependInterval(1);
  9. // Insert a scale tween for the whole duration of the Sequence
  10. mySequence.Insert(0, transform.DOScale(new Vector3(3, 3, 3), mySequence.Duration()));

等同于:

  1. Sequence mySequence = DOTween.Sequence();
  2. mySequence.Append(transform.DOMoveX(45, 1))
  3. .Append(transform.DORotate(new Vector3(0, 180, 0), 1))
  4. .PrependInterval(1)
  5. .Insert(0, transform.DOScale(new Vector3(3, 3, 3), mySequence.Duration()));

上面我们提到了全局设置,这里我们再说一说针对Tweener和Sequence的局部设置

  1. float timeScale
  2. SetAs(Tween tween \ TweenParams tweenParams)
  3. SetAutoKill(bool autoKillOnCompletion = true)
  4. SetEase(Ease easeType \ AnimationCurve animCurve \ EaseFunction customEase)
  5. SetId(object id)
  6. SetLoops(int loops, LoopType loopType = LoopType.Restart)
  7. SetRecyclable(bool recyclable)
  8. SetUpdate(UpdateType updateType, bool isIndependentUpdate = false)
  9. 注意的一点是SetUpdate方法可以让目标忽略timeScale

回调方法:

  1. OnComplete(TweenCallback callback)
  2. OnKill(TweenCallback callback)
  3. OnPlay(TweenCallback callback)
  4. OnPause(TweenCallback callback)
  5. OnRewind(TweenCallback callback)
  6. OnStart(TweenCallback callback)
  7. OnStepComplete(TweenCallback callback)
  8. OnUpdate(TweenCallback callback)
  9. 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中

  1. // Store settings for an infinite looping tween with elastic ease
  2. TweenParams tParms = new TweenParams().SetLoops(-1).SetEase(Ease.OutElastic);
  3. // Apply them to a couple of tweens
  4. transformA.DOMoveX(15, 1).SetAs(tParms);
  5. transformB.DOMoveY(10, 1).SetAs(tParms);

操作Tweener(有三种方法):

1.DOTween静态方法

  1. // Pauses all tweens
  2. DOTween.PauseAll();
  3. // Pauses all tweens that have "badoom" as an id
  4. DOTween.Pause("badoom");
  5. // Pauses all tweens that have someTransform as a target
  6. DOTween.Pause(someTransform);

2.Tweener方法

  1. myTween.Pause();

3.部件.+以DO开头的方法

  1. transform.DOPause();

以上的是Pause方法,以下的是其余的操作方法。上面三种方式中,DOTween和Tweener都有以下的操作方法,而部件的话,要在前面加上"DO"。

  1. CompleteAll/Complete()
  2. FlipAll/Flip()
  3. GotoAll/Goto(float to, bool andPlay = false)
  4. KillAll/Kill(bool complete = true)
  5. PauseAll/Pause()
  6. PlayAll/Play()
  7. PlayBackwardsAll/PlayBackwards()
  8. PlayForwardAll/PlayForward()
  9. RestartAll/Restart(bool includeDelay = true)
  10. RewindAll/Rewind(bool includeDelay = true)
  11. TogglePauseAll/TogglePause()

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

实例:

1.

  1. using UnityEngine;
  2. using System.Collections;
  3. using DG.Tweening;
  4. public class Test : MonoBehaviour {
  5. public RectTransform rt;
  6. private bool isIn = false;
  7. // Use this for initialization
  8. void Start ()
  9. {
  10. //修改的是世界坐标
  11. //Tweener t = rt.DOMove(Vector3.zero, 0.3f);
  12. //修改的是局部坐标
  13. Tweener t = rt.DOLocalMove(Vector3.zero, 0.3f);
  14. //默认动画播放完成会自动销毁
  15. t.SetAutoKill(false);
  16. t.Pause();
  17. }
  18. public void OnClick ()
  19. {
  20. if (!isIn)
  21. {
  22. //将开始该物体的所有Tweener
  23. rt.DOPlayForward();
  24. }
  25. else
  26. {
  27. rt.DOPlayBackwards();
  28. }
  29. isIn = !isIn;
  30. }
  31. }

2.

  1. using UnityEngine;
  2. using System.Collections;
  3. using DG.Tweening;
  4. using UnityEngine.UI;
  5. public class Test2 : MonoBehaviour {
  6. public Transform t;
  7. public Text text;
  8. // Use this for initialization
  9. void Start ()
  10. {
  11. //Vector3.zero是绝对位置,表示从Vector3.zero移动到当前位置
  12. //t.DOMove(Vector3.zero, 2).From();
  13. //默认为false
  14. //Vector3.forward是相对位置,表示从Vector3.forward加当前位置移动到当前位置
  15. t.DOMove(Vector3.forward, 2).From(true);
  16. //逐字显示
  17. text.DOText("宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥宏哥", 3);
  18. }
  19. }

 
 

[Unity插件]DOTween基础的更多相关文章

  1. unity缓动插件DOTween Pro v0.9.680

    DoTween Pro是一款unity插件,是unity中最好用的tween插件,比起Dotween的免费版要多很多功能,实现脚本和视觉脚本的新功能,支持包括移动,淡出,颜色,旋转,缩放,打孔,摇动, ...

  2. 【学习中】Unity插件之NGUI 完整视频教程

    课程 章节 内容 签到 Unity插件之NGUI 完整视频教程 第一章 NGUI基础控件和基础功能学习 1.NGUI介绍和插件的导入 6月29日 2.创建UIRoot 6月29日 3.学习Label控 ...

  3. Unity插件之Unity调用C#编译的DLL

    Unity插件分为两种:托管插件(Managed Plugins)和本地插件(Native Plugins).本文先来说说Unity中的托管插件,本地插件的文章留到下一篇文章再说. 有时候我们会有这样 ...

  4. Unity插件之NGUI学习(8)—— Table和NGUI尺寸转换为世界坐标系尺寸

    依据 Unity插件之NGUI学习(2),创建一个UI Root,在UI Root下创建一个Texture作为背景图,并设置图片,在Wiget下调整大小:然后在UI Root下再创建一个Panel. ...

  5. 【Unity插件】LitJson杂谈

    距离上一次更新博客已有一段时间了,一实习就懒了,嘿嘿.这次谈一下在实习里新碰到的一个Unity插件--LitJson(也可以去官网下载最新版). 开场白 LitJson是一个开源项目,比较小巧轻便,安 ...

  6. 导入Unity插件时出现Failed to import package with error: Couldn't decompress package

    导入Unity插件时出现Failed to import package with error: Couldn't decompress package 一开始以为压缩包本身有问题,坏了 后来发现在父 ...

  7. MyBatis原理第四篇——statementHandler对象(sqlSession内部核心实现,插件的基础)

    首先约定文中将的四大对象是指:executor, statementHandler,parameterHandler,resultHandler对象.(为了方便下面的文章说道四大对象就专指它们) 讲到 ...

  8. Unity插件-NGUI使用教程

    Unity插件-NGUI使用教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 NGUI 一款强大的次 ...

  9. Unity插件-ShareSDK使用指南

    Unity插件ShareSDK使用教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Summariz ...

随机推荐

  1. Http的那些事: Content-Type

    Content-Type 无疑是http中一个非常重要的属性了, request 中可以存在, 也可以不存在( request的Content-Type 默认是 */*, 实际上呢, 如果不存在Con ...

  2. 发送Http

    /** * 向指定 URL 发送POST方法的请求 * * @param url * 发送请求的 URL * @param param * 请求参数,请求参数应该是 name1=value1& ...

  3. __get__ __set__ __delete__描述符

    描述符就是一个新式类,这个类至少要实现__get__ __set__ __delete__方法中的一种class Foo: def __get__(self, instance, owner): pr ...

  4. 【FZSZ2017暑假提高组Day1】确定小组

    [问题描述] 有n个人坐成一排,这n个人都在某一个小组中,同一个小组的所有人所坐的位置一定是连续的. 有一个记者在现场进行采访,他每次采访都会询问一个人其所在的小组有多少人,被询问的每个人都给出了正确 ...

  5. 使用jQuery+huandlebars防止编码注入攻击

    兼容ie8(很实用,复制过来,仅供技术参考,更详细内容请看源地址:http://www.cnblogs.com/iyangyuan/archive/2013/12/12/3471227.html) & ...

  6. Java学习08 (第一遍) - SpringMVC

    写一下午的好多居然丢失...自动保存也只是保存丢失后的 那就不多写了,简单写: Spring:(自己画的) 官网的: 写一个Spring的例子: Eclipse http://repo.spring. ...

  7. win server 2012 服务器不能ping通

    以windows server 2012作为服务器,服务器能够ping通局域网中的客户端A,但A不能ping通服务器. 解决办法: 确定服务器中系统->远程设置->远程桌面选项下为允许选项 ...

  8. Python开发【第八篇】:socket网络编程

    服务端: import socket server = socket.socket() #绑定要监听的端口 server.bind(('localhost',6969)) #监听 server.lis ...

  9. TZOJ 5101 A Game(区间DP)

    描述 Consider the following two-player game played with a sequence of N positive integers (2 <= N & ...

  10. 742. Closest Leaf in a Binary Tree查找最近的叶子节点

    [抄题]: Given a binary tree where every node has a unique value, and a target key k, find the value of ...