首页 > Unity3D频道 > 【 iTween研究院之Unity插件】 > iTween研究院之学习笔记Move移动篇(一)
2013
01-23

iTween研究院之学习笔记Move移动篇(一)

         最近项目中需要加入一些模型移动的小动画,学习过程中发现了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绑定在需要移动的游戏对象身上。

 

在看看iTween中的寻路算法,其实非常非常的简单,我们几乎不用做任何事情。如下图所示,我们能清楚的看到编辑了一个简单的寻路,我们通过iTween 来实现小人跑步到终点。

 

iTween研究院之学习笔记Move移动篇(一) - 雨松MOMO程序研究院 - 1

 

 

Path.cs  绑在主角身上即可。

 

运行后即可看到主角自动寻路的效果。

如果你仔细阅读到这里你可能会想到,iTween做的东西有点像 Mathf.Lerp() Vector3.Lerp() lookAt()等等这类的方法。假设不使用iTween这个类就用源生的API其实也可以实现上述的所有效果。只有iTween帮我们封装的更好一些,平滑过渡的效果更好一些,而且还能增加一些特效。只是这些特效与动画全都是iTween通过数学的方法计算出来。因为底层它们使用的也是简单的 移动旋转API中的方法。我觉得寻路的话可以使用Unity自带的方法(因为是官方提供的),处理一些简单的动画使用iTween还是挺不错的,因为更加形象。

代码下载地址:http://vdisk.weibo.com/s/omt5Q

这几天我还会把剩下的一些iTween的学习心得写在博客中,希望大家踊跃留言互相学习,互相进步。嘻嘻。

雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!

--

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。

  1. 大神,你好!我今天才开始用这个iTween路径动画,我想问一下,有没有什么方法让路径时时更新的!
    我描述一下我现在要做的功能吧,就是我有一辆车沿着地图上的路移动,我就用的iTween的路径动画,描出了很多路径点,现在因为要在手机上拖动地图,但是路径并没有被拖走,我的车子还是沿着最开始的路径在动,所以我想请教这个如何能拖动地图的同时更新我原来路径的位置,让小车跟着新的路径动!!!

  2. 当移动到某一个点时,怎么设置暂停移动,,,,然后等某个事件完成,又开始移动。MOMO哥还是不懂这个怎么解决。

  3. 以前一直觉得itween这个东西比较耗性能,所以即便做路径动画也还是在maya里面做好路径动画再导到u3d里的。现在看了momo大神的文章以后发现itween的底层还是transform.Translate所以其实对性能的影响应该也不会很大吧?

  4. momo出现个问题,itween最大支持10个点,我修改源代码让他支持100个点,然后我加了30个点,来问题了,以前物体运动方向还会沿着路径,现在物体拐弯就跟漂移是的,就是说,还没到拐弯的地方,物体前方已经指向大约之后两个点的位置了,怎么会这样呢?而且,我在拼两段路径的时候,在结合的地方,物体会有个突然的转向,然后再延路径2移动。还有,speed不怎么管用,他与两点之间的距离应没关系吧?

  5. 最近在用itween进行路径编辑,想问一下,这样编辑的路径像拐弯处都是圆滑的,如果我就想直来直去的拐弯,这个可以实现吗?或者应该怎么做?

  6. Pingback: Automated Income App

  7. 请问MOMO,怎么突然改变对象的速度呢?放update()里面好象不行吧?还有就是怎么让对象停止,而后过段时间继续寻路?iTween.stopbyname()里面的参数名字是什么呢?望解答,谢谢!

  8. Assets/Lightbeam/Scripts/Editor/LightbeamEditor.cs(264,31): error CS0117: Path' does not contain a definition for GetDirectoryName’ 是怎么回事啊?

  9. 其实可以直接这样用(下面是我的写的代码): iTween.MoveTo(cameraFront, iTween.Hash(“path”, Tran_pathPoint, “easetype”, “linear”, “speed”, 3, “movetopath”, false, “orienttopath”, true, “looktarget”, pathpoints[points – 1], “looktime”, 0.1f, “delay”, 0.5f, “lookahead”, 0.01f, “islocal”, false, “oncomplete”, “Walked”, “oncompletetarget”, gameObject));不过我用这个的时候出现一个问题,它不是直线的运动,会有所偏移,但我想要他按照完全路线走。