itween 动画

iTween这个类库的主要功能就是处理模型从起始点到结束点之间运动的轨迹。(移动,旋转,音频,路径,摄像机等)它是一个开源的项目并且完全免费,它们的官网在这里 http://itween.pixelplacement.com/index.php 打开网之后点击右上角Get iTween图标即可,或者在AssetStores商店中直接下载。


移动模型时候用到的几个核心方法如下:


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绑定在需要移动的游戏对象身上。


  1. using UnityEngine;
  2. using System.Collections;

  3. public class Move : MonoBehaviour
  4. {

  5. void Start()
  6. {

  7. //键值对儿的形式保存iTween所用到的参数
  8. Hashtable args = new Hashtable();

  9. //这里是设置类型,iTween的类型又很多种,在源码中的枚举EaseType中
  10. //例如移动的特效,先震动在移动、先后退在移动、先加速在变速、等等
  11. args.Add("easeType", iTween.EaseType.easeInOutExpo);

  12. //移动的速度,
  13. args.Add("speed",10f);
  14. //移动的整体时间。如果与speed共存那么优先speed
  15. args.Add("time",1f);
  16. //这个是处理颜色的。可以看源码的那个枚举。
  17. args.Add("NamedValueColor","_SpecColor");
  18. //延迟执行时间
  19. args.Add("delay", 0.1f);
  20. //移动的过程中面朝一个点
  21. args.Add("looktarget",Vector3.zero);

  22. //三个循环类型 none loop pingPong (一般 循环 来回)
  23. //args.Add("loopType", "none");
  24. //args.Add("loopType", "loop");
  25. args.Add("loopType", "pingPong");

  26. //处理移动过程中的事件。
  27. //开始发生移动时调用AnimationStart方法,5.0表示它的参数
  28. args.Add("onstart", "AnimationStart");
  29. args.Add("onstartparams", 5.0f);
  30. //设置接受方法的对象,默认是自身接受,这里也可以改成别的对象接受,
  31. //那么就得在接收对象的脚本中实现AnimationStart方法。
  32. args.Add("onstarttarget", gameObject);

  33. //移动结束时调用,参数和上面类似
  34. args.Add("oncomplete", "AnimationEnd");
  35. args.Add("oncompleteparams", "end");
  36. args.Add("oncompletetarget", gameObject);

  37. //移动中调用,参数和上面类似
  38. args.Add("onupdate", "AnimationUpdate");
  39. args.Add("onupdatetarget", gameObject);
  40. args.Add("onupdateparams", true);

  41. // x y z 标示移动的位置。

  42. args.Add("x",5);
  43. args.Add("y",5);
  44. args.Add("z",1);

  45. //当然也可以写Vector3
  46. //args.Add("position",Vectoe3.zero);

  47. //最终让改对象开始移动
  48. iTween.MoveTo(gameObject,args);
  49. }

  50.     //对象移动中调用
  51. void AnimationUpdate(bool f)
  52. {
  53. Debug.Log("update :" + f);
  54. }
  55. //对象开始移动时调用
  56. void AnimationStart(float f)
  57. {
  58. Debug.Log("start :" + f);
  59. }
  60. //对象移动时调用
  61. void AnimationEnd(string f)
  62. {
  63. Debug.Log("end : " + f);
  64. }

  65. }
复制代码


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


%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7-2013-01-23-%E4%B8%8B%E5%8D%8812.53.53.png

2013-5-20 10:18:25 上传
下载附件 (28.52 KB)


iTween动画库:关于Move移动篇



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


  1. using UnityEngine;

  2. using System.Collections;

  3. public class Path : MonoBehaviour {

  4. //路径寻路中的所有点

  5. public Transform [] paths;

  6. void Start ()

  7. {

  8. Hashtable args = new Hashtable();

  9. //设置路径的点

  10. args.Add("path",paths);

  11. //设置类型为线性,线性效果会好一些。

  12. args.Add("easeType", iTween.EaseType.linear);

  13. //设置寻路的速度

  14. args.Add("speed",10f);

  15. //是否先从原始位置走到路径中第一个点的位置

  16. args.Add("movetopath",true);

  17. //是否让模型始终面朝当面目标的方向,拐弯的地方会自动旋转模型

  18. //如果你发现你的模型在寻路的时候始终都是一个方向那么一定要打开这个

  19. args.Add("orienttopath",true);

  20. //让模型开始寻路

  21. iTween.MoveTo(gameObject,args);

  22. }

  23. void OnDrawGizmos()

  24. {

  25. //在scene视图中绘制出路径与线

  26. iTween.DrawLine(paths,Color.yellow);

  27. iTween.DrawPath(paths,Color.red);

  28. }

  29. }
复制代码


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


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


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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. CameraFade(摄像机的渐隐) 其Camera或者场景的东西并没有消失,只是在屏幕上贴了一张贴图 首先,要用到摄像机的渐隐/显功能的话,必须调用CameraFadeAdd()函数,来添加背景图片,不然在运行时会包错。 下面来讲解一下CameraFade里面需要用到的几个函数 1) CameraFadeAdd() //当不传参的时候,会默认一个黑色的背景 CameraFadeAdd(Texture2D texture) //摄像机视图渐隐后显示texture CameraFadeAdd(Texture2D texture,int depth) //同上,depth的作用暂时不知道,猜测与分层有关,可能类似PS的图层 2)CameraFadeDepth(int depth) //改变刚才texture的depth 3)CameraFadeDestroy() //移除并摧毁 4)CameraFadeTo(float amount,float time) 从当前视图转换到前面设置的视图(texture) //amount透明度,介于0~1之间。等于1 时Texture完全覆盖Camera视图 //time是达成该效果需要多少秒 CameraFadeTo(Hashtable args) //用哈希表可以设置更详细的内容 此函数的哈希表key有:name,amount,time,delay,easetype,looptype,onstart等,KEY作用以及值参考提供的EXCEL文档的HASHTABLE项 5)CameraFadeFrom(float amount,float time) CameraFadeTo(Hashtable args) //从前面设置的视图(texture)转换到当前视图,参数参考CameraFadeTo 6)CameraTexture(Color color) //创建一个单色的用于CameraFade的texture2d 2. Audio音频 同CameraFade一样,itween对音频的控制也并没有结束音频的播放,而是控制的音频的音量(volume)和音调(pitch)。音频文件赋值到某个GO上,将GO给函数传参 1)AudioTo(GameObject target, float volume, float pitch, float time) //target为挂载音频的对象,volume/pitch为最终要达到的音量/音调(volume的值为0~1),达到目的所需的时间 AudioTo(GameObject target, Hashtable args) //hashtab参数:name,audiosource,volume,pitch,time,delay,easetype,looptype,onstart等 其Audiosource是你挂载音频的物体 2)AudioFrom(GameObject target, float volume, float pitch, float time) AudioFrom(GameObject target, Hashtable args) 这个就不详解了,就一个FROM和TO的区别,参数都一样 3)AudioUpdate(GameObject target, float volume, float pitch, float time) AudioUpdate(GameObject target, Hashtable args) a)这个函数主要用在那种会循环调用的函数里面,比如系统的Update()函数,它会不断的降低音量音调来接近你设置的那个值,降低那个差值会递减。 b)这里需要注意的是,即使使用hashtable也只有以下这几个参数: audiosource,volume,pitch,time 3. Color(颜色) 函数类似上面的audio,具体参数解析,可以参考excel文档的color hashtable 函数有以下几个: 1)ColorFrom(GameObject target, Hashtable args) ColorFrom(GameObject target, Color color, float time) 2)ColorTo(GameObject target, Hashtable args) ColorTo(GameObject target, Color color, float time) 3)ColorUpdate(GameObject target, Color color, float time) ColorUpdate(GameObject target, Hashtable args) 在这里会引入一个比较特别的新的参数,NamedValueColor,这是一个枚举变量,有一下几个值:_Color,_SpecColor,_Emission,_ReflectColor具体意义可以参考EXCEL 文件 4. Draw(画线)的几个函数区别 DrawLine(Vector3[] path) DrawLine(Vector3[] path, Color color) DrawLine(Transform[] path) DrawLine(Transform[] path,Color color) DrawLineGizmos DrawLineHandles DrawPath DrawPathGizmos DrawPathHandles PathLength //返回路径长度 这些函数必须放在OnDrawGizmos()里面使用。OnDrawGizmos()和Start()一样直接放在脚本类内部的最外层。DrawPath的效果是在编辑器内部可以看到,但是运行时没有的 每个函数的参数和DrawLine()一样,就不一一列举了。 其DrawLine是画直线而DrawPath是画曲线路径,也是物体移动的实际路径。 函数以Gizmos结尾的和没有的效果一样,而以Handles结尾的暂时有一个不兼容的问题,不能用,这样算下来,这几个函数里面有用的也就三个: DrawLine() DrawPath() PathLength() 在这里还有一个函数,用于给你的路径上的画一个线圈,方便观察 Gizmos.DrawWireSphere(Vector3 position,float radius); //参数一为位置,参数二为半径 效果如图: 5. 物体渐隐(FadeTo,FadeFrom,FadeUpdate) 主要是对物体的alpha通道值进行改变,使物体逐渐透明。 这里要注意的是,需要改了shader参数,这个效果才会生效。首先你给物体添加一个Material后,选物体,查看inspector视图,在Material处你会看到一个shader选项,点击选择transparant->Diffuse 6. 物体朝向(LookFrom,LookTo,LookUpdate) 1)LookFrom(GameObject target, Vector3 looktargetposition, float time) LookFrom(GameObject target, Hashtable args) 2)LookTo(GameObject target, Vector3 looktargetposition, float time) LookTo(GameObject target, Hashtable args) 前两个函数的哈希表参数如下: name,looktarget,axis,time,speed,delay,easetype,looptype,onstart等,具体的可以参考EXCEL文件 3)LookUpdate(GameObject target, Hashtable args) LookUpdate(GameObject target, Vector3 looktargetposition, float time) 用于循环函数,如Update(),使物体一直朝向looktargetposition, 7. 移动(Move*) 1)MoveAdd(GameObject target, Vector3 amount, float time) MoveAdd(GameObject target, Hashtable args) 2)MoveBy(GameObject target, Vector3 amount, float time) MoveBy(GameObject target, Hashtable args) 3)MoveFrom(GameObject target, Vector3 position, float time) MoveFrom(GameObject target, Hashtable args) 4)MoveTo(GameObject target, Vector3 position, float time) MoveTo(GameObject target, Hashtable args) 5)MoveUpdate(GameObject target, Vector3 position, float time) MoveUpdate(GameObject target, Hashtable args) 这几个函数的不使用哈希表作为参数的时候没有区别,但是当引入哈希表的时候,movefrom和moveto可以根据一个vector3序列(path)进行运动,而moveadd和moveby只能点对点运动,moveby和moveadd这两个函数经过测试,我表示他们没区别,当然要是你发现他们之间的区别的时候,记得联系我告诉我哦,大家相互学习嘛。Moveupdate和其他**update原理一样,就不讲了,具体的参数也都比较好理解,哈希表参数可以参考我的EXCEL文档 Moveupdate的哈希表参数只有: position,x,y,z,orienttopath,looktarget,looktime,axis,islocal,time (PS:参数之间有的是不能同时为真的哦,比如orienttopath和looktarget) 8. 暂停itween(Pause) 当某itween被赋予“ignoreTimeScale”时,无法暂停 函数比较简单,我就直接贴在下面了: Pause(GameObject target) //暂停gameobject上的所有itween Pause(GameObject target, bool includechildren) //暂停gameobject上的所有itween,是否包括孩子 Pause(GameObject target, string type) //暂停gameobject上的,某个类型的所有itween Pause(GameObject target, string type, bool includechildren) //暂停gameobject上的,某个类型的所有itween,是否包括孩子 Pause() //暂停场景的所有itween 9. Resume继续 就和上面的暂停一个样,就不详细讲了 Resume(GameObject target) Resume(GameObject target, bool includechildren) Resume(GameObject target, string type) Resume(GameObject target, string type, bool includechildren) Resume() 10. Stop停止 就和上面的暂停一个样,就不详细讲了 Stop() Stop(string type) Stop(GameObject target) Stop(GameObject target, bool includechildren) Stop(GameObject target, string type) Stop(GameObject target, string type, bool includechildren) 11. StopByName根据名字停止 StopByName(string name) 12. 外力击打效果(PunchPosition,PunchRotation,PunchScale) 用于模拟物体受外力后,改变位置,旋转,大小的效果。 PunchPosition(GameObject target, Vector3 amount, float time) PunchPosition(GameObject target, Hashtable args) PunchRotation(GameObject target, Vector3 amount, float time) PunchRotation(GameObject target, Hashtable args) PunchScale(GameObject target, Vector3 amount, float time) PunchScale(GameObject target, Hashtable args) 这几个函数没有引入新的哈希表参数,就不详细讲解了 13. PutOnPath 把物体放到某路径的百分之几的位置 PutOnPath(GameObject target, Vector3[] path, float percent) PutOnPath(GameObject target, Transform[] path, float percent) PutOnPath(Transform target, Vector3[] path, float percent) PutOnPath(Transform target, Transform[] path, float percent) 14. PointOnPath 返回一个在路径上百分之几的位置的vector3 position PointOnPath(Transform[] path, float percent) PointOnPath(Vector3[] path, float percent) 15. RectUpdade RectUpdate(Rect currentValue, Rect targetValue, float speed) : Rect 具有返回值 这东西,暂时没搞懂怎么用,反正效果就是一个矩形,在给出的值之间不停的变换位置和大小 16. 旋转(Rotate**) 根据移动(Move**)的函数推理一下就懂了,相信你的能力 RotateAdd(GameObject target, Vector3 amount, float time) RotateAdd(GameObject target, Hashtable args) RotateBy(GameObject target, Vector3 amount, float time) RotateBy(GameObject target, Hashtable args) RotateFrom(GameObject target, Vector3 rotation, float time) RotateFrom(GameObject target, Hashtable args) RotateTo(GameObject target, Vector3 rotation, float time) RotateTo(GameObject target, Hashtable args) RotateUpdate(GameObject target, Hashtable args) RotateUpdate(GameObject target, Vector3 rotation, float time) 17. 规模(Scale**) 根据移动(Move**)的函数推理一下就懂了,相信你的能力 ScaleAdd(GameObject target, Vector3 amount, float time) ScaleAdd(GameObject target, Hashtable args) ScaleBy(GameObject target, Vector3 amount, float time) ScaleBy(GameObject target, Hashtable args) ScaleFrom(GameObject target, Vector3 scale, float time) ScaleFrom(GameObject target, Hashtable args) ScaleTo(GameObject target, Vector3 scale, float time) ScaleTo(GameObject target, Hashtable args) ScaleUpdate(GameObject target, Vector3 scale, float time) ScaleUpdate(GameObject target, Hashtable args) 18. 晃动(Shake**) 根据你给的参数进行位置旋转大小的晃动,比较特别的是,这个晃动会逐步减小归于平静。看了前面那些函数的参数作用,相信这个也不是问题了: ShakePosition(GameObject target, Vector3 amount, float time) ShakePosition(GameObject target, Hashtable args) ShakeRotation(GameObject target, Vector3 amount, float time) ShakeRotation(GameObject target, Hashtable args) ShakeScale(GameObject target, Vector3 amount, float time) ShakeScale(GameObject target, Hashtable args)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值