转载雨松的unity中使用ITween插件和ITweenPath
移动模型时候用到的几个核心方法如下:
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绑定在需要移动的游戏对象身上。
using UnityEngine; using System.Collections; public class Move : MonoBehaviour { void Start() { //键值对儿的形式保存iTween所用到的参数 Hashtable args = new Hashtable(); //这里是设置类型,iTween的类型又很多种,在源码中的枚举EaseType中 //例如移动的特效,先震动在移动、先后退在移动、先加速在变速、等等 args.Add("easeType", iTween.EaseType.easeInOutExpo); //移动的速度, args.Add("speed",10f); //移动的整体时间。如果与speed共存那么优先speed args.Add("time",1f); //这个是处理颜色的。可以看源码的那个枚举。 args.Add("NamedValueColor","_SpecColor"); //延迟执行时间 args.Add("delay", 0.1f); //移动的过程中面朝一个点 args.Add("looktarget",Vector3.zero); //三个循环类型 none loop pingPong (一般 循环 来回) //args.Add("loopType", "none"); //args.Add("loopType", "loop"); args.Add("loopType", "pingPong"); //处理移动过程中的事件。 //开始发生移动时调用AnimationStart方法,5.0表示它的参数 args.Add("onstart", "AnimationStart"); args.Add("onstartparams", 5.0f); //设置接受方法的对象,默认是自身接受,这里也可以改成别的对象接受, //那么就得在接收对象的脚本中实现AnimationStart方法。 args.Add("onstarttarget", gameObject); //移动结束时调用,参数和上面类似 args.Add("oncomplete", "AnimationEnd"); args.Add("oncompleteparams", "end"); args.Add("oncompletetarget", gameObject); //移动中调用,参数和上面类似 args.Add("onupdate", "AnimationUpdate"); args.Add("onupdatetarget", gameObject); args.Add("onupdateparams", true); // x y z 标示移动的位置。 args.Add("x",5); args.Add("y",5); args.Add("z",1); //当然也可以写Vector3 //args.Add("position",Vectoe3.zero); //最终让改对象开始移动 iTween.MoveTo(gameObject,args); } //对象移动中调用 void AnimationUpdate(bool f) { Debug.Log("update :" + f); } //对象开始移动时调用 void AnimationStart(float f) { Debug.Log("start :" + f); } //对象移动时调用 void AnimationEnd(string f) { Debug.Log("end : " + f); } }
然后ITween里面还有一个是叫ITweenPath是一个能自定义位置的一个划线动画。平常寻路或者动画都可以用。
具体用法就是挂上这个ITweenPath组件
pathName就是这个路径的名字。这个到时候需要在代码里面用到的。NodeCount是你自己定义个路标点,他会沿着你的路标点进行移动。
具体代码是:
1 using unityEngine; 2 using System.Collections; 3 4 public class ITweenController:MonoBehviour 5 { 6 void Start() 7 { 8 //创建一个哈希值存储 9 Hashtable args = new Hashtable(); 10 //移动速度 11 args.Add("speed",4f); 12 //获取Path路径 13 args.Add("path",iTweenPath.GetPath("one")); 14 //获取反向路径 15 // args.Add("path",iTweenPath.GetPathReversed("one")); 16 //开始移动 17 iTween.MoveTo(gameobject,args); 18 } 19 }