快速上手Unity中最好的补间动画插件DFTween

??

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

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

DFTween 是一个在 Unity 游戏引擎中快速和容易使用的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 可通过允许您定义自定义赋值和属性分配回调来处理您的自定义数据类型。

·链式

多步动画很容易就可以创建 — — 您可以直接链接在一起,补间或使用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

时间: 2024-10-16 03:38:42

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

高速上手Unity中最好的补间动画插件DFTween

?? 出处:http://blog.csdn.net/u010019717 author:孙广东      时间:2015.3.17   23:00 DFTween 是一个在 Unity 游戏引擎中高速和easy使用的animation动画库. 它支持不论什么对象的tweening补间的属性, 并能够轻松地进行工作与您自己自己定义数据类型.API 非常简单可是功能非常强大,使其易于创建复杂的tweens补间和sequences序列.它已被优化从优秀性能.同一时候具有低内存和低CPU 要求. ·高

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

补间动画也叫View动画,它只能针对View进行动画操作,且补间动画操作的只是View中可见的部分,即只操作界面,对于可点击区域等都不会进行操作. 在Android中,补间动画的顶级类是Animation.补间动画包括对View的透明度.缩放.平移.旋转进行动画操作,对应的JAVA类分别是AlphaAnimation.ScaleAnimation.TranslateAnimation.RotateAnimation. Android还提供了一个动画集合AnimationSet,可以将多个动画单体

Android中的补间动画(tween)的简单使用

相对帧动画,补间动画(tween)可以这么理解:我们不必像帧动画一样指定动画的每一帧,只需定义一个动画的开始和结束关键帧,而中间变化的帧由系统帮我们计算. tween动画可以分为下面几种: AlphaAnimation(透明渐变动画): 示例:res/anim/alpha.xml <?xml version="1.0" encoding="utf-8"?> <alpha xmlns:android="http://schemas.andr

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

补间动画就是只需要定义动画开始和结束的位置,动画中间的变化由系统去补齐. 补间动画由一下四种方式: 1.AplhaAnimation——透明度动画效果 2.ScaleAnimation ——缩放动画效果 3.TranslateAnimation——位移动画效果 4.RotateAnimation——旋转动画效果 1.AplhaAnimation AplhaAnimation的参数: fromAlpha:动画开始时的透明度,0.0表示完全透明 toAlpha:动画结束时的透明度,1.0表示完全不透

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

?? 1 关于常见的对话框,主要有: 常见的对话框,单选对话框,多选对话框,进度条对话框(转圈类型的),带进度条的对话框. 案例结构: 完成如下结构的案例,将所有的案例都测试一下: 2 编写MainActivity,代码如下: package com.itheima.dialog; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import andro

在Animate中创建补间动画的步骤

1.创建起始一帧的图层 2.右键选择创建补间动画 3.在同一图层的时间轴上,在所需位置安F6创建关键帧 4.在新的帧挪动图像至所需位置 5.调节路径 完成

Android开发之Tween(补间动画)完全解析(一)

欢迎转载,转载请注明出处:http://blog.csdn.net/dmk877/article/details/51912104 相信不管做了多长时间开发的人都用过Tween动画,从刚开始工作到现在我也是用了N次Tween动画,但是每一次使用总感觉掌握的不够全面,所以花了点时间详细的总结了下Tween动画,其实在android中熟练掌握动画,能够帮助我们实现一些非常酷炫的效果从而使我们的app在交互或者用户体验上有一个更好的体验,鉴于此详细的学习动画还是很有必要的,相信通过本篇的学习大家会对T

Android开发实战之补间动画和属性动画

说起动画,其实一点也不陌生,在使用一款app的时候为了优化用户体验,多多少少的,都会加入动画. 安卓中的动画,分为两大类:补间动画和属性动画.本篇博文会详细介绍总结这两大动画,希望本篇博文对你的学习和生活有所帮助. **补间动画** 补间动画分为四类:平移动画,旋转动画,缩放动画和渐变动画.这几类动画用法都差不多,只是对象参数不同这里我统一展示出来.以下是效果图: 实现代码很简单: btn1.setOnClickListener(new View.OnClickListener() { @Ove

Android开发之Tween(补间动画)完全解析(下)

欢迎转载,转载请注明出处:http://blog.csdn.net/dmk877/article/details/51980734 在上一篇文章中,我们详细讨论了Tween动画的xml的实现以及interpolator的使用,相信通过上篇文章大家对Tween动画的xml属性的配置会有一个详细的理解,当然这篇文章也是承接上篇文章,所以强烈建议先阅读上篇文章:Android开发之Tween(补间动画)完全解析(上),这篇文章将从代码的角度实现上篇文章的效果.如有疑问请留言,如有谬误欢迎批评指正. T