2017-07-11 14:13:13 Mogoson 阅读数 1374

MGS-PathAnimation

概述

Unity3D 制作路径动画 插件包。

需求

  • 创建,编辑路径锚点;
  • 依据路径播放位移动画。

方案

  • 利用AnimationCurve实现基于锚点的平滑路径。

实现

  • 扩展编辑器,辅助创建,编辑路径瞄点;
  • VectorCurve.cs:三维空间动画曲线;
  • Path.cs:依据锚点创建平滑路径;
  • PathAnimation.cs:依据路径播放位移动画。

案例

“MGS-PathAnimation/Scenes”目录下存放简易演示案例,供读者参考。

源码

源码托管地址

2014-05-29 18:55:57 needspeedboy 阅读数 5722

unity3d 4.0以后用的mecanim也启用了navmesh寻路;

mecanim处理转弯之类的行为时一般是程序和动画结合让动画更生动自然。这样一般会有转弯动画,另外采用阻尼的思路,让动画更加平滑过渡;

官方的mecanime例子中的Locomotion.cs比如:


    public float m_AnguarSpeedDampTime = 0.3f;
    public float m_DirectionResponseTime = 0.3f;

    float angularSpeed = direction / m_DirectionResponseTime;
        
    m_Animator.SetFloat(m_AgularSpeedId, angularSpeed, angularSpeedDampTime, Time.deltaTime);
    m_Animator.SetFloat(m_DirectionId, direction, directionDampTime, Time.deltaTime);



上面的m_AnguarSpeedDampTime/m_DirectionResponseTime上是阻尼参数;如果动画有抖动可以这个数稍稍设高一点,这样不会那么容易变化幅度大,这两个参

数经常作为转动的重要参数,切换动画一般用它作判断。 



2013-08-20 15:34:53 woailvmengmeng 阅读数 5564


unity3d动画插件iTween-路径动画的制作   iTween是一个动画库, 用它可以轻松实现各种动画,晃动,旋转,移动,褪色,上色,控制音频等等 到官网看看http://itween.pixelplacement.com   我今天主要是说一下用iTween来制作一段路径动画的方法和步骤。首先我们下载iTween插件并安装,官方商店就有,免费的。   安装方法很简单,可以再Project视图中单击鼠标右键,选择ImportPackage->CustomPackage找到下载插件的文件夹,导入插件即可。

  

也可以直接将插件拷贝到工程文件中的Assets文件夹中,回到unity3d中双击iTween Visual Editor文件即可导入插件。插件导入成功后,即可在菜单栏中的Component中多出了一个iTween选项,并且在Component->Scripts中多出了三个选项,这些都是我们马上要用到的。

 
好了,准备工作已做完,下面开始制作我们的路径动画了。首先制作一个简单的场景。然后创建一个简单的场景,命名为path,制作路径。选择我们新建的path然后在Component->Scripts中选择ITween Path。 

添加完成后即可在Inspector视图中看到我们添加的ITween Path属性

 

Path Name是路径的名称。我们命名为first path。Path Color为路径线的颜色。将他改成红色。一遍可以清晰的看到他。Node Count为路径的关键点数量,下面Node为每个关键点坐标。我们将Node Count的值改为6,然后设置关键点的坐标。方法1:直接改变Node下的想,x,y,z的值。防范2:在Scene视图中直接拖动每个点的坐标。制作好后的结果如图:



到这里路径已经制作好了,下面将一下怎么把这条路径和我们的运动物体连接起来呢。首先我们建立一个CUBE作为要运动的物体命名为player。选择我们新建的player然后点击菜单栏的Component->iTween->iTweenEvent.



添加完成后在Inspector视图中看到iTweenEvent属性。



属性非常多。下面介绍几个长影属性。Name:为动画时间的名称。命名为MyFirstEventShow Icon In Scene: 是否在场景中显示图标,勾选改选项。Play Automatically:是否在运行是自动播放,勾选改选项。Event Type下拉框选择MoveTo,Path 勾选选择Path-〉firstpath,在往下勾选Time,时间设置为30;勾选easetype设置为linear设置为匀速;设置好之后如图:



好了可以运行游戏了。发现盒子沿着我们设置的路径开始运动了。(住:因为参数太多。还没有完全研究,希望大家一起研究学习,有不对的地方还望高手指教)这个就写这么多了。关于动态调用,和几个路径相互切换下次再讲吧。


上一节我们讲了iTween路径动画的制作过程。这一节我们看下怎么动态调用它,和创建多个路径的方法,动态切换的方法。   首先打开上次做的项目,选择player物体,在Inspector视图中讲iTween Event下的play Automatically的选框勾掉。因为我们要动态控制动画的播放,不需要它运行时就播放了。这些做完之后就开始写代码了,创建一个C#脚本,命名为Animation control,并写入一下代码:public class Animationcontrol : MonoBehaviour {         public GameObject player;//带路径动画的物体         void OnGUI()         {                   if (GUI.Button(new Rect(10, 70, 50, 30), "play"))                   {             //播放路径动画                            iTweenEvent.GetEvent(player,"firstevent").Play();                   }                   if (GUI.Button(new Rect(100, 70, 50, 30), "stop"))                   {               //停止路径动画                            iTweenEvent.GetEvent(player,"firstevent").Stop();                   }         }}分析上面的脚本。我们用iTweenEvent.GetEvent(player,"firstevent").Play();和iTweenEvent.GetEvent(player,"firstevent").Stop();来控制动画的停止和播放,其中player为带有路径动画的物体,"firstevent"需要与路径动画的名称保持一致。就是Inspector视图中讲iTween Event下的Name的值脚本完成后,讲脚本添加到我们的摄像机上。将player拖放到变量player运行游戏,点击play按钮动画开始运行,点击stop按钮,动画停止运行。下面我们来看下怎么给一个物体添加多段路径,及切换。选中我们path物体,在给他添加一个ITweenPath。如图:给path name命名为second pathParhColor最好与第一个颜色分开的颜色分开Node Count改为5。然后设置关键点。制作完成后。在Scene中就出现了两条路径 选择player物体。在给他添加一个。ITween Event设置如下:勾选path并选择secnd path,勾选time设置时间为20.勾选easetype选择linear设置匀速运动。如图:这样我们就给物体player添加了两段路径动画,下面我们就用代码来控制这两段动画代码如下: public class Animationcontrol : MonoBehaviour {         public GameObject player;//带有动画的物体         void OnGUI()         {                   if (GUI.Button(new Rect(10, 70, 50, 30), "firstAN"))                   {            //路径1的起始位置                            player.transform.position =new Vector3(-94.50654f, 17.2556f, 15.62861f);            //播放动画1                            iTweenEvent.GetEvent(player,"firstevent").Play();            //停止动画2                            iTweenEvent.GetEvent(player,"secondevent").Stop();                   }                   if (GUI.Button(new Rect(100, 70, 50, 30), "secondAN"))                   {            //路径2的起始位置                            player.transform.position =new Vector3(-95.15093f, 10f, 1.327053f);            //播放动画2                            iTweenEvent.GetEvent(player,"secondevent").Play();            //停止动画1                            iTweenEvent.GetEvent(player,"firstevent").Stop();                   }         }}添加到游戏物体,运行游戏。这样就算OK了。

2016-09-23 13:03:37 akof1314 阅读数 6050

原因

在使用 Unity 开发游戏过程中,经常使用到 Animation 功能来为物体做动画效果,其中就包括物体的位移路径动画,比如过场动画里镜头的路径移动等。现有的 Animation 功能只能编辑关键帧所在时刻的物体位置,而无法一览物体路径动画的轨迹,造成美术人员编辑路径动画时,没办法直观的查看所编辑的路径曲线。另外,在 Animation 窗口里进行调整曲线的切线,非常的不便,只能在180度的斜率范围内调整数值。

目标

实现实时的动画路径预览,快速定位关键帧,方便编辑切线。
这里写图片描述

解决

为了可以实时预览动画路径,那么就需要获得当前 Animation 窗口的动画数据,但是 Unity 不开放操作 Animation 窗口类,只能通过反射来处理。 创建的 AnimationWindowUtil 类,即是为了与 Animation 窗口的数据进行交互。
这里写图片描述

这里写图片描述
动画数据里面存储的是使用埃尔米特(Hermite)曲线公式的值,它是使用各个顶点的斜率来构建曲线,这也造成了在 Animation 窗口编辑切线的不便,没法精确控制斜率的值。
这里写图片描述
合适的方式是使用贝塞尔(Bézier)曲线,它提供了两个控制点来调整切线,控制点的位置比起控制斜率的值大小来的直观方便多了。好在这两种曲线公式是可以转换的,Hermite 曲线转换成 Bézier 曲线步骤如下:

P0(b) = P0(h)
P1(b) = P0(h) + M0(h) * 1/3
P2(b) = P1(h) - M1(h) * 1/3
P3(b) = P1(h)

转换完成之后,则可通过绘制 Bézier 曲线,将动画路径展现出来。
这里写图片描述
绘制的绿色点是每个关键帧的位置,点中绿色点,即可直接在 Animation 窗口定位到当前关键帧,方便直接立即编辑。点中绿色点时,会在该点的旁边出现灰色控制点,直接点中控制点,就可以直接调整该点的切线了。
这里写图片描述
这样来调整切线比在 Animation 窗口里面进行调整斜率方便的多了。切线调整完成后,通过 Bézier 曲线转换成 Hermite 曲线,来写回动画数据。
这里写图片描述
当关键帧过多时,可能会遮挡住曲线的走向绘制,特别是在转弯的地方,故也提供关闭显示关键帧点的功能。

结语

Unity 编辑器开放的接口不能够实现于想要实现的功能时,只能反编译编辑器代码,分析相应所封闭起来的功能代码,才能获取到想要的数据。动画数据存储的是 Hermite 曲线公式,而这种曲线无法在场景里面进行方便的调整,只能通过转换成 Bézier 曲线。

源码

Github 地址:https://github.com/akof1314/AnimationPath

2013-12-02 10:57:54 liang_704959721 阅读数 4928

itween插件在unity也是经常使用的,本来就行做一个很简单的路径动画,但是看到很多的教程都是很复杂的。在这里实现的功能就是用itween path工具画出点,用物体在平滑的曲线上进行运动,实现一个路径动画的效果。

itween可以在http://download.csdn.net/detail/liang_704959721/6642127下载(免费哦)。

把下载到的itween包放到你的项目Assets文件下。导入工具包。

把itweenPath到要移动的物体上并进行点的添加和设计

添加代码进行控制

 //根据路径进行移动
        iTween.MoveTo(gameObject, iTween.Hash("path", iTweenPath.GetPath("New Path 1"), "time", 100, "looptype", "pingPong"));


需要注意GetPath名称和itween path的名称要一致。这个代码放到 Sart里开始就执行。这样就可以了

没有更多推荐了,返回首页