最近项目中需要加入一些模型移动的小动画,学习过程中发现了iTween这个类库。它主要的功能就是处理模型从起始点到结束点之间运动的轨迹。(移动,旋转,音频,路径,摄像机等)它是一个开源的项目并且完全免费,它们的官网在这里 http://itween.pixelplacement.com/index.php 打开网之后点击右上角Get iTween图标即可,或者在AssetStores商店中直接下载。 我把iTween的源码仔细读了一遍,我感觉与其说它是处理动画的类,不如说它是处理数学的类。本文的最后,我会像大家总结,请仔细阅读。
移动模型时候用到的几个核心方法如下:
iTween.MoveTo(): 让模型移动到一个位置,它的底层函数是通过动态的修改模型每一帧的transform.position完成的,所以它会百分之百到达目标点,不会出现误差。
iTween.MoveFrom():它和上面的一样,iTween.MoveTo()是将模型移动到目标位置,而iTween.MoveFrom()是将模型从目标位置移动到原始位置。
iTween.MoveAdd() 和iTween.MoveBy()底层实现一样,大家可以去看源码。处理移动时采用的是transform.Translate也就是API的平移,这样在处理移动的时候可能会出现一些误差,但是效果好点。
iTween.MoveUpdate():和iTween.MoveTo()差不多,只是它需要放在循环或者Update()中。
有了核心的移动方法后,我们就来了解iTween强大的核心参数,与事件。移动方法的参数都差不多,所以这里我就以MoveTo来做例子。直接上代码。
Move.cs绑定在需要移动的游戏对象身上。
02 | using System.Collections; |
04 | public class Move : MonoBehaviour |
11 | Hashtable args = new Hashtable(); |
15 | args.Add( "easeType" , iTween.EaseType.easeInOutExpo); |
18 | args.Add( "speed" ,10f); |
22 | args.Add( "NamedValueColor" , "_SpecColor" ); |
24 | args.Add( "delay" , 0.1f); |
26 | args.Add( "looktarget" ,Vector3.zero); |
31 | args.Add( "loopType" , "pingPong" ); |
35 | args.Add( "onstart" , "AnimationStart" ); |
36 | args.Add( "onstartparams" , 5.0f); |
39 | args.Add( "onstarttarget" , gameObject); |
42 | args.Add( "oncomplete" , "AnimationEnd" ); |
43 | args.Add( "oncompleteparams" , "end" ); |
44 | args.Add( "oncompletetarget" , gameObject); |
47 | args.Add( "onupdate" , "AnimationUpdate" ); |
48 | args.Add( "onupdatetarget" , gameObject); |
49 | args.Add( "onupdateparams" , true ); |
61 | iTween.MoveTo(gameObject,args); |
65 | void AnimationUpdate( bool f) |
67 | Debug.Log( "update :" + f); |
70 | void AnimationStart( float f) |
72 | Debug.Log( "start :" + f); |
75 | void AnimationEnd( string f) |
77 | Debug.Log( "end : " + f); |
在看看iTween中的寻路算法,其实非常非常的简单,我们几乎不用做任何事情。如下图所示,我们能清楚的看到编辑了一个简单的寻路,我们通过iTween 来实现小人跑步到终点。
Path.cs 绑在主角身上即可。
02 | using System.Collections; |
04 | public class Path : MonoBehaviour { |
07 | public Transform [] paths; |
11 | Hashtable args = new Hashtable(); |
13 | args.Add( "path" ,paths); |
15 | args.Add( "easeType" , iTween.EaseType.linear); |
17 | args.Add( "speed" ,10f); |
19 | args.Add( "movetopath" , true ); |
22 | args.Add( "orienttopath" , true ); |
25 | iTween.MoveTo(gameObject,args); |
31 | iTween.DrawLine(paths,Color.yellow); |
33 | iTween.DrawPath(paths,Color.red); |
运行后即可看到主角自动寻路的效果。
如果你仔细阅读到这里你可能会想到,iTween做的东西有点像 Mathf.Lerp() Vector3
.Lerp() lookAt()等等这类的方法。假设不使用iTween这个类就用源生的API其实也可以实现上述的所有效果。只有iTween帮我们封装的更好一些,平滑过渡的效果更好一些,而且还能增加一些特效。只是这些特效与动画全都是iTween通过数学的方法计算出来。因为底层它们使用的也是简单的 移动旋转API中的方法。我觉得寻路的话可以使用Unity自带的方法(因为是官方提供的),处理一些简单的动画使用iTween还是挺不错的,因为更加形象。
代码下载地址:http://vdisk.weibo.com/s/omt5Q