【ITween】Unity3d iIween插件的研究
发布日期:2021-06-30 11:40:35 浏览次数:3 分类:技术文章

本文共 5063 字,大约阅读时间需要 16 分钟。

推荐阅读

首先是插件的下载路径

官方下载地址

http://itween.pixelplacement.com/index.php
这里写图片描述
点击Get iTween小图标 ->Download iTween

或者 AssetStores商店中直接下载

如何把iTween插件加入到项目中

在项目中建立Plugins目录, 然后将下载的iTween.cs放到Plugins目录即可。

如果需要编辑路径, 使用import package->custom package菜单功能加入iTweenPath.unitypackage。

iTween 支持的功能:

控制音频:AudioFrom、AudioTo、AudioUpdate、Stab

控制相机:CameraFadeAdd、CameraFadeDepth、CameraFadeDestroy、CameraFadeSwap、CameraFadeFrom、CameraFadeTo、CameraTexture
变色控制:ColorFrom、ColorTo、ColorUpdate
绘制相关:DrawLine、DrawLineGizmos、DrawLineHandles、DrawPath、DrawPathGizmos、DrawPathHandles
淡入淡出:FadeFrom、FadeTo、FadeUpdate
视角控制:LookFrom、LookTo、LookUpdate、LookType
移动控制:MoveAdd、MoveBy、MoveFrom、MoveTo、MoveUpdate
路径操作:PutOnPath、PointOnPath
旋转操作:RotateAdd、RotateBy、RotateFrom、RotateTo、RotateUpdate
缩放操作:ScaleAdd、ScaleBy、ScaleFrom、ScaleTo、ScaleUpdate
震动控制:ShakePosition、ShakeRotation、ShakeScale
其他:Count、PathLength、EaseType(衰减类型)、FloatUpdate、Hash、Init、Pause、Resume、Stop、StopByName、PunchPosition、PunchRotation、PunchScale、RectUpdate、ValueTo、Vector2Update、Vector3Update

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

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); } }

比较重要的参数是这个:

easyType

args.Add(“easeType”, iTween.EaseType.easeInOutExpo);

这个参数是指移动的特效,先震动在移动、先后退在移动、先加速在变速、等等
具体效果在下面这个链接中可以查看
http://www.robertpenner.com/easing/easing_demo.html

looktarget

args.Add(“looktarget”,Vector3.zero);

移动的过程中面朝一个点

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

这里写图片描述

按路径移动

第一种写法

var path = GameObject.Find("Plane").GetComponent("iTweenPath").GetPath("myPath");iTween.MoveTo(gameObject, iTween.Hash(//"position", Vector3(0, 0, 0),"path", path,"time", 20,"easetype", "linear"));

第二种写法

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

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); } }

注意这两个参数:

args.Add(“orienttopath”,true);

//是否让模型始终面朝当面目标的方向,拐弯的地方会自动旋转模型
args.Add(“looktarget”,Vector3.zero);
//移动的过程中面朝一个点

这两个参数不能共用,如果用一个另一个要去掉

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

在Scene视图中显示路线

public Transform[] paths;void OnDrawGizmos()    {
if (paths.Length > 0) {
iTween.DrawPath(paths); } }

在移动结束后调用函数

//移动结束时调用,参数和上面类似        args.Add("oncomplete", "Test");        args.Add("oncompletetarget", gameObject);//移动结束时调用的函数void Test()    {
}

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

转载地址:https://itmonon.blog.csdn.net/article/details/78499606 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【Unity3D】 官方自带人物控制器研究
下一篇:【SVN】解决SVN安装语言包后无法选择中文的问题

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月24日 00时29分48秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java 高效工具库 2019-04-30
19.docker之dockerCompose基础 2019-04-30
20.docker之DockerCompose基础进阶 2019-04-30
1.全局异常处理 2019-04-30
3.mysql 索引基础知识 2019-04-30
线程、事件与QObject 2019-04-30
树莓派4不连接显示器开机的方法 2019-04-30
[转]ffmpeg在vs2008中的使用 2019-04-30
[转]用"树莓派"打造一款智能音响(也许有点智障。。。) 2019-04-30
学习笔记(02):一学即懂的计算机视觉(第一季)-什么是视觉? 2019-04-30
学习笔记(03):一学即懂的计算机视觉(第一季)-第一个计算机视觉程序 2019-04-30
学习笔记(04):一学即懂的计算机视觉(第一季)-计算机视觉方向知识体系结构... 2019-04-30
学习笔记(05):一学即懂的计算机视觉(第一季)-学了视觉可以做什么 2019-04-30
学习笔记(06):一学即懂的计算机视觉(第一季)-有光即有世界:照明模型 2019-04-30
学习笔记(08):一学即懂的计算机视觉(第一季)-实战演练:颜色空间分解 2019-04-30
学习笔记(09):一学即懂的计算机视觉(第一季)-最浅显的卷积与滤波概念讲解!... 2019-04-30
学习笔记(10):一学即懂的计算机视觉(第一季)-图像平滑滤波与去噪 2019-04-30
学习笔记(11):一学即懂的计算机视觉(第一季)-数学形态学滤波 2019-04-30
学习笔记(12):一学即懂的计算机视觉(第一季)-实战演练:图像平滑滤波对比... 2019-04-30
学习笔记(14):一学即懂的计算机视觉(第一季)-Canny算子 2019-04-30