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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

using UnityEngine;
using System.Collections;
public class Path : MonoBehaviour {
//路径寻路中的所有点
public Transform [] paths;
void Start ()
{
Hashtable args = new Hashtable();
    //设置路径的点
args.Add("path",paths);
//设置类型为线性,线性效果会好一些。
args.Add("easeType", iTween.EaseType.linear);
//设置寻路的速度
args.Add("speed",10f);
//是否先从原始位置走到路径中第一个点的位置
args.Add("movetopath",true);
//是否让模型始终面朝当面目标的方向,拐弯的地方会自动旋转模型
//如果你发现你的模型在寻路的时候始终都是一个方向那么一定要打开这个
args.Add("orienttopath",true);
    //让模型开始寻路
iTween.MoveTo(gameObject,args);
}
void OnDrawGizmos()
{
//在scene视图中绘制出路径与线
iTween.DrawLine(paths,Color.yellow);
iTween.DrawPath(paths,Color.red);
}
}

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

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

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

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

  • 本文固定链接: http://www.xuanyusong.com/archives/2052
  • 转载请注明: 雨松MOMO 2013年01月23日 于 雨松MOMO程序研究院 发表

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

  1. iTween研究院之学习笔记Move移动篇

    最近项目中需要加入一些模型移动的小动画,学习过程中发现了iTween这个类库.它主要的功能就是处理模型从起始点到结束点之间运动的轨迹.(移动,旋转,音频,路径,摄像机等)它是一个开源的项目并且完全免费 ...

  2. OracleDesigner学习笔记1――安装篇

    OracleDesigner学习笔记1――安装篇   QQ:King MSN:qiutianwh@msn.com Email:qqking@gmail.com 一.       前言 Oracle是当 ...

  3. 设计模式学习笔记(目录篇)

    设计模式学习笔记(目录篇) 为了方便查看,特此将设计模式学习笔记系列单独做一个目录. 1   设计模式学习笔记(一:命令模式) 2   设计模式学习笔记(二:观察者模式) 3   设计模式学习笔记(三 ...

  4. Redis学习笔记1-理论篇

    目录 1,Redis 数据类型的底层结构 1.1,Redis 中的数据类型 1.2,全局哈希表 1.3,数据类型的底层结构 1.4,哈希冲突 1.5,rehash 操作 2,Redis 的 IO 模型 ...

  5. Redis学习笔记(实战篇)(自用)

    Redis学习笔记(实战篇)(自用) 本文根据黑马程序员的课程资料与百度搜索的资料共同整理所得,仅用于学习使用,如有侵权,请联系删除 文章目录 Redis学习笔记(实战篇)(自用) 1.基于Sessi ...

  6. 树莓派4B学习笔记——IO通信篇(UART)

    文章目录 UART简介 树莓派使用UART与串口屏通信 串口屏简介 硬件连接 配置串口接口 树莓派打开UART接口 树莓派安装串口调试助手 编程实现 wiringSerial.h Serial简介 C ...

  7. JavaScript学习笔记之入门篇

    JavaScript学习笔记之入门篇 JavaScript引入 1. 页面级 js: 2. 外部js文件: JavaScript变量 1. 变量的作用: 2. 声明变量: 3. 变量赋值: 4. 单一 ...

  8. 《软技能-代码之外的生存指南》学习笔记之理财篇

    <软技能–代码之外的生存指南>学习笔记之理财篇 作者:[美] John Z. Sonmez 摘要:这是⼀本真正从"⼈"(⽽⾮技术也⾮管理)的⾓度关注软件开发⼈员⾃⾝发展 ...

  9. 3、Latex学习笔记之表格篇

    目录 表格 1.基本结构 1.1框架 1.2行高 1.3标题 1.4标签 1.5居中 1.6表格 2.引用表格 3.常见表格类型 3.1三线表 3.2 斜线表头 3.3合并单元格 4.在线表格生成工具 ...

最新文章

  1. 1035 插入与归并
  2. 再见,谷歌!再见,算法!
  3. NR 5G QoS模型
  4. 【错误记录】国际化报错 ( “xxx“ is not translated in “zh“ (Chinese) )
  5. 【Python刷题】_2
  6. 蓝桥杯 历届试题 分糖果(模拟)
  7. python2和python3如何共存_Windows下python2和python3的共存设置
  8. poj 3411 1724
  9. 你在学校我安排了你没有做到最多凶你一顿,在公司不一样,直接得让走人!...
  10. apache为什么更适合处理动态请求_[适合初中级Java程序员修炼手册从0搭建整个Web项目](一)...
  11. python两个时间点比较大小_python中如何比较两个时间点
  12. tps波动很大的原因_期货揭秘:价格的波动规律(2)
  13. eclipse maven项目导入Intellij问题处理
  14. 利用wireshark分析IP报文结构
  15. android 微信登陆功能,Android 实现微信登录详解
  16. Volterra方程的不动点
  17. 软件开发工具——理论篇
  18. 中国各城市首轮感染高峰期预测!(最新更新版)
  19. 两性关系的50个经典客观规律
  20. python百题大冲关_Python中 Pandas 50题冲关

热门文章

  1. Android 直播 直播测试拉流播放器和地址
  2. win10开启上帝模式
  3. ios 获取相册第一个视频_历史上第一个视频游戏
  4. linux中jdk添加字体_Linux操作系统JDK中文字体设置方法介绍
  5. selenium之浏览器文件下载
  6. 货车运输题解 最大生成树+lca
  7. 经典签名 100条经典个性签名
  8. ppt微软云服务器,微软 Teams Meeting 系列(1) - 把MS Ignite PPT拿到手
  9. android 应用发布助手,Android 1.0 Beta6版腾讯应用助手发布
  10. 微信公众号上传图片问题!!!!!!!!!!!