出处:http://blog.csdn.net/u010019717

author:孙广东      时间:2015.3.17   23:00

DFTween 是一个在 Unity 游戏引擎中高速和easy使用的animation动画库。

它支持不论什么对象的tweening补间的属性, 并能够轻松地进行工作与您自己自己定义数据类型。API 非常简单可是功能非常强大,使其易于创建复杂的tweens补间和sequences序列。它已被优化从优秀性能。同一时候具有低内存和低CPU 要求。

·高速

查阅在线演示。直接比較与其它unity补间tweens图书馆的性能,看看为什么DFTween补间动画库是unity中最快的。

·优化

DFTween 不会分配不论什么每帧存储器,具有极低的资源使用情况,甚至在低功率的移动设备上不是processor-intensive处理器密集型。 看看下面的比較:DFTween:unity最好的补间tween动画系统

·表现力

DFTween 同意极具表现力的fluent syntax (method chaining)什么是流利语法Fluent Syntax ,这样,您能够创建复杂的tweens补间和sequences序列与最少的代码易于阅读和维护。假设更好地适合于您的个人喜好,你也能够选择使用多个标准的面向对象的编码风格。

·灵活

提供最灵活的tween补间动画系统,DFTween能够使用不论什么数据类型或属性。tween补间有内置的提供全部常见的unity的数据类型(如 Vector3、 Vector2、Color等)。和 DFTween 可通过同意您定义自己定义赋值和属性分配回调来处理您的自己定义数据类型。

·链式

多步动画非常easy就能够创建 — — 您能够直接链接在一起,补间或使用groups组和timelines时间表能够准确地控制tween补间执行时和顺序。groups组和timelines时间表除了能够包括除了正常的tween补间动画还能够包括其它groups组和timelines时间表。同意您创建补间层次结构。以适应不论什么情况。

翻译自官方:http://daikonforge.com/dftween/documentation/

高速入门

1.创建tweens补间

•使用Helper方法

•直接Instantiation实例化

•UsingReflection to Tween Named Properties

•内置ObjectPooling对象池

2. Combining Tweens结合补间

•ChainingTweens Directly直接链接补间

•Concurrent-ModeTween Groups并发模式补间组

•Sequential-ModeTween Groups序贯模式补间组

•Timelines时间线

创建tweens补间:

DFTween 库提供了多种创建tweens补间动画。范围能够从使用Helper方法的方便性和易用性对创建tweens补间手动为更精细的控制。

使用Helper方法:

我们先这里開始用最简单的 — — 使用Helper方法。DFTween 已经定义了几种扩展方法为您提供便利,涵盖了最常见的动画方案。Extensionmethods扩展方法是会出现”added on” 现有类型的方法。DFTween 定义的Component, Transform, Material, TextMesh, GUIText, and Sprite类的几种这样的方法。在此演示样例中,我们将使用扩展方法的Transforms变换补间对当前组件的位置:

this.transform
.TweenPosition()
.SetEndValue( new Vector3( 100, 100, 0 ) )
.SetDuration( 1 )
.Play();

上面的演示样例中将在一秒钟内变换位置,从 0,0) 到 (100,100,0) 进行动画处理。

注:非执行状态DFTween 库总是返回tweens补间,它開始playing播放之前。给你机会全然自己定义tween’s补间的行为。

这意味着必须手动调用 Play 方法才干启动动画。

注:当使用的helper方法,tween补间的StartValue 和 EndValue 属性将设置默认情况下,为该对象的当前值(比如,使用 TweenPosition helper方法时,对象的当前位置position将被用作默认 StartValue)。在此页上的样例假设省略 SetStartValue() 或 SetEndValue()。然后你能够假定这些值使用默认值。

直接实例化

如上文所述,DFTween 提供了最常见的情形 — — 动画color颜色、opacity不透明度、position位置、rotation旋转或scale大小,不论什么游戏对象的helper方法。

这些方法将创建tween补间动画,并将实用的默认值分配给tween补间动画的各种属性和回调。

为了不涵盖通过上述联系。或当你须要很多其它地控制结果的情况下。您还须要显式创建新tween补间的选项。在下面演示样例中。我们将手动创建float tween补间能够用来对camera的fieldOfView属性进行动画处理:

var tween =
new Tween<float>()
.SetStartValue( 60 )
.SetEndValue( 90 )
.SetDuration( 0.5f )
.OnExecute( ( value ) =>
{
Camera.main.fieldOfView = value;
} );
tween.Play();

请注意在本例中我们须要显式定义的方式来分配目标属性的当前值。OnExecute 方法同意我们定义一个回调方法。用于执行这项任务(匿名方法定义在此演示样例中使用lambda 语法。

tween补间动画引擎每帧都会调用OnExecute回调。在这样的情况下它是须要。由于尽管我们已经创建了一个tween补间动画从 60 到 90 的浮点值超过半秒。对每一个帧我们仍然须要指定怎样处理得到的值。如上文所述的helper方法同意您省略这一步。由于他们提供正确的默认回调为公用属性。比如 Transform.position、 Material.color 等。

此体系结构提供了最大的灵活性而不会牺牲性能或类型安全。

使用反射来命名属性的补间(反射的效率是问题啊)

上面的样例中能够编写更简单地使用TweenReflectionExtensions 的helper方法。TweenReflectionExtensions 类定义同意您轻松地tween补间命名不论什么对象的不论什么的属性扩展方法。

补间的camera 的fieldOfView属性,我们也能够编写下面:

var tween = Camera.main
.TweenProperty<float>( "fieldOfView" )
.SetStartValue( 60 )
.SetEndValue( 90 )
.SetDuration( 0.5f );
tween.Play();

终于的结果是相同的功能,但代码相比較短由于在补间能够内部使用反射来设置fieldOfView属性,而不是要求您提供所需的代码会向 OnExecute 回调中。

在这样的情况下,会向 OnExecute 回调内部分配。请注意您必须在TweenProperty<type>( propertyName )泛型方法调用中指定正确的数据类型的字段或属性。TweenProperty扩展方法适用于不论什么public字段或属性。

内置对象池

为了提供最佳的可能的内存配置,全部tween补间动画类支持object pooling对象池。为短命补间动画 (如“fire andforget”补间),此功能同意您请求一个补间从"对象池"而不是每次创建一个新的实例。当补间是完成时。它能够被释放回对象池中准备进一步又一次使用,例如以下面演示样例所看到的:

transform.TweenPosition()
.SetStartValue( Vector3.zero )
.SetEndValue( new Vector3( 100, 100, 0 ) )
.SetDuration( 0.25f )
.SetAutoCleanup( true )
.Play();

此代码使用TweenTransformExtensions.TweenPosition()扩展方法从对象池获取Tween<Vector3>实例,另外将它配置为使用AutoCleanup为“fire andforget”风格动画。当 AutoCleanup 设置为 true。补间动画在执行完成时将自己主动释放本身放回对象池。通过调用release ()方法,也可手动返回不论什么补间到对象池。

结合补间

DFTween 还提供了多种方法结合动画补间关于multi-step多步或多个属性。能够直接chain链接补间在一起,把他们结合起来在groups组中,或使用timeline时间线的最高控制权。Tween groups and timelines补间组和时间表作为其它补间动画的容器(包括其它Tween groups and timelines)。使您能够作为一个单一的动画,补间一整套对待的能力start, stop, pause, and resume单个方法调用对整个group起作用。

直接链接补间

有时你须要的一切就是能在还有一个补间后直接play下一个。Tween<T>.Chain()仅仅是这样的情况提供了方法:

transform
.TweenPosition()
.SetEndValue( new Vector3( 25, 25, 0 ) )
.SetDuration( 0.5f )
.Chain(
transform.TweenScale()
.SetEndValue( new Vector3( 2, 2, 2 ) )
.SetDuration( 0.33f )
)
.Play();

上面的演示样例中创建的补间移动的对象从其当前位置移动到(25,25,0)超过 0.5 秒。然后进行动画处理的对象从当前scale扩展到(2,2,2)。

Tween<T>.Chain()方法能够为您提供当第一个补间动画执行完成马上将调用第二个 TweenBase 对象的 play () 方法。你能够使用此方法链随意数量的补间在一起。

使用补间动画组

TweenGroup类提供随意数量的补间结合在一起的能力,并给你playing他们的选项,在同一时间或一个接一个。

并发模式补间组

能够方便向group补间结合在一起以便你能够将他们视作一个单一的补间,在 TweenGroup 上调用play ()将导致该组全部的补间。在同一时间play。当你须要同一时候对多个对象的属性进行动画处理这是特别实用的:

var tweenOpacity = this
.TweenAlpha()
.SetStartValue( 0f )
.SetEndValue( 1f )
.SetDuration( 0.5f ); var tweenScale = this
.TweenScale()
.SetStartValue( Vector3.zero )
.SetEndValue( Vector3.one )
.SetDuration( 0.5f ); var tweenGroup = new TweenGroup()
.SetMode( TweenGroupMode.Concurrent )
.AppendTween( tweenOpacity )
.AppendTween( tweenScale );
tweenGroup.Play();

上面的演示样例将创建两个补间,总是一起played。然后。它创建一个新的TweenGroup 对象并将Mode属性设置为TweenGroupMode.Concurrent。并使用 .AppendTween()方法将单个补间加入到的组。当调用 .Play()方法,该对象将在同一时间fade淡入和scale从 0。0)到 (1,1,1)。

顺序模式补间组

您还能够使用 TweenGroup 类使组补间一起播放,必须 “in order”("按顺序")played:

var tweenPosition = this
.TweenPosition()
.SetStartValue( Vector3.zero )
.SetEndValue( new Vector3( 25, 25, 0 ) )
.SetDuration( 0.5f ); var fadeIn = this
.TweenAlpha()
.SetStartValue( 0f )
.SetEndValue( 1f )
.SetDuration( 0.5f ); var fadeOut = this
.TweenAlpha()
.SetStartValue( 1f )
.SetEndValue( 0f )
.SetDuration( 0.5f ); var tweenGroup = new TweenGroup()
.SetMode( TweenGroupMode.Sequential )
.AppendTween( fadeIn )
.AppendTween( tweenPosition )
.AppendDelay( 3f )
.AppendTween( fadeOut ); tweenGroup.Play();

将一个 TweenGroup 实例的Mode属性设置为TweenGroupMode.Sequential指定补间应在order中的顺序,而不是全部在同一时间。当上面的演示样例中, tweenGroup.Play被该对象调用时fade in淡入。将移动到 (25,25,0)、暂停三秒。然后fade out淡出。请注意在使用 TweenGroupMode.Sequential 时。你能够使用.AppendDelay()方法,以在序列中的不论什么点加入延迟。

时间线

TweenTimeline类同意您精确地指定补间開始playing的时候。

提供了您能够同一时候拥有多个补间依照concurrent-mode tween groups启动的福利,以及提供在让它们在不同的时间相同顺序模式补间组启动的福利。。

这样的灵活性使时间线轻松地创建复杂的multi-step的强大工具。

var timeline = new TweenTimeline();

timeline.Add( 0f, this.TweenAlpha().SetEndValue( 1 ) );
timeline.Add( 0f, this.TweenScale().SetStartValue( Vector3.zero ).SetEndValue( Vector3.one ) );
timeline.Add( 1.5f, this.TweenPosition().SetStartValue( startPosition ).SetEndValue( endPosition ) );
timeline.Add( 3f, this.TweenAlpha().SetEndValue( 0 ) );
timeline.Add( 3f, this.TweenScale().SetEndValue( Vector3.zero ) );
timeline.Play();

在此演示样例中,该对象fades in淡入,同一时候scales从0 to 1时间线 (请注意,在同一时间開始的两个补间)。一个半秒钟后,对象的位置将动画从開始位置到结束位置。在三秒标记,该对象将fade out淡出。同一时候scale从1 to 0 (在同一时间再次,淡入淡出和规模补间開始)。

注:传递给TweenTimeline.Add() 方法的開始时间指定等待时间线開始后的秒数。比如,假设您调用的timeline.Add( 1.5f, tween ) 你说你想在补间開始 1.5 秒后时间轴。调用 play() 方法。

文章中提到了:流利语法fluent syntax、扩展方法Extension methods、匿名方法anonymous method、拉姆达表达式lambda syntax、对象池object pooling

高速上手Unity中最好的补间动画插件DFTween的更多相关文章

  1. Android中四种补间动画的使用示例(附代码下载)

    场景 Android中四种补间动画. 透明度渐变动画 旋转动画 缩放动画 平移动画 注: 博客: https://blog.csdn.net/badao_liumang_qizhi关注公众号 霸道的程 ...

  2. Android--Tween补间动画

    前言 Android除了支持逐帧动画之外,也提供了对补间动画的支持,补间动画就是指开发人员只需要指定动画的开始.动画结束的"关键帧",而动画变化的"中间帧"由系 ...

  3. 【Android - 进阶】之Animation补间动画

    补间动画也叫View动画,它只能针对View进行动画操作,且补间动画操作的只是View中可见的部分,即只操作界面,对于可点击区域等都不会进行操作. 在Android中,补间动画的顶级类是Animati ...

  4. Android(java)学习笔记199:Android中补间动画(Tween Animation)

    本文主要简单介绍补间动画使用代码实现, 关于使用xml实现补间动画,可以参看:自定义控件三部曲之动画篇(一)——alpha.scale.translate.rotate.set的xml属性及用法 1. ...

  5. Android(java)学习笔记142:Android中补间动画(Tween Animation)

    本文主要简单介绍补间动画使用代码实现, 关于使用xml实现补间动画, 可以参看:自定义控件三部曲之动画篇(一)——alpha.scale.translate.rotate.set的xml属性及用法 1 ...

  6. Android中的帧动画与补间动画的使用

    前言 在日常开发中,我们有时候须要一些好看的动画效果,这时能够充分利用Android提供的这几种动画来实现. Android提供了3种类型的动画: 补间动画:补间动画能够应用于View,让你能够定义一 ...

  7. 21_Android中常见对话框,光传感器,通过重力感应器编写出指南针应用,帧动画,通过Jav代码的方式编写补间动画,通过XML的方式编写补间动画

     1 关于常见的对话框,主要有: 常见的对话框,单选对话框,多选对话框,进度条对话框(转圈类型的),带进度条的对话框. 案例结构: 完成如下结构的案例,将所有的案例都测试一下: 2 编写MainA ...

  8. Android笔记(六十四) android中的动画——补间动画(tweened animation)

    补间动画就是只需要定义动画开始和结束的位置,动画中间的变化由系统去补齐. 补间动画由一下四种方式: 1.AplhaAnimation——透明度动画效果 2.ScaleAnimation ——缩放动画效 ...

  9. Android动画效果之Tween Animation(补间动画)

    前言: 最近公司项目下个版本迭代里面设计了很多动画效果,在以往的项目中开发中也会经常用到动画,所以在公司下个版本迭代开始之前,抽空总结一下Android动画.今天主要总结Tween Animation ...

随机推荐

  1. 实现如下语法的功能:var a = (5).plus(3).minus(6); //2

    从汤姆大叔的博客里看到了6个基础题目:本篇是第5题 - 实现如下语法的功能:var a = (5).plus(3).minus(6); //2 解题关键: 1.理解使用(5)和5的区别 2.构造函数原 ...

  2. 使用webView的时候,出现Error loading page Domain:WebKitErrorDomain Error Code:101 Description: The URL can't be shown

    onShouldStartLoadWithRequest = (e) => {// Implement any custom loading logic here, don't forget t ...

  3. CF978E Bus Video System【数学/前缀和/思维】

    [链接]: CF [分析]: 设上车前人数 x ,中途最大人数为 x+max ,最小人数为 x+min (max≥0,min≤0) 可得不等式组 x+max≤w, x+min≥0 整数解个数为 max ...

  4. HDU 1847 【巴什博弈】

    Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...

  5. 51 nod 1419 最小公倍数挑战【数论/互质+思维】

    1419 最小公倍数挑战 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 几天以前,我学习了最小公倍数.玩得挺久了 ...

  6. 洛谷—— P1022 计算器的改良

    P1022 计算器的改良 题目背景 NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能.实验室将这个任务交给了 ...

  7. c# 中文字符(全角、半角)通用处理

    声明:本文仅提供一种编程思路,所提供代码仅供参考,如需使用,请自行完善. 我们在做程序的的时候经常要处理用户输入,作为我们的主要语言中文,经常会出现全角.半角的问题,这会在查询时给我们带来很多麻烦.本 ...

  8. hdu1004(c++)

    字符串统计问题,统计每个字符串的次数,输出出现次数最多的字符串 #include<iostream>#include<string>#include<algorithm& ...

  9. tomcat下载安装以及在eclipse中的配置

    eclipse的下载地址是http://www.eclipse.org/downloads/. tomcat的下载地址为http://tomcat.apache.org/ 这两个工具的安装都非常eas ...

  10. apache 的rewrite函数配置伪静态

    配置伪静态目的:对于访问比较长的uri,利于网站搜索工具更容易记住,换句话利于SEO 在配置文件中添加或找到 <IfModule mod_rewrite.c> </IfModule& ...