动作游戏

还记得读书的时候熬夜打《波斯王子》的时光,我们的王子通过跳跃穿过墙壁的小洞、在高层建筑上进行攀爬和跳跃,还有在操作失误掉下高楼和触发必死机关后使用时之沙的时光倒流功能回归死亡之前的开挂技能。

而现在这些功能使用Unity3D的Mecanim都可以非常简单的实现了!

这篇笔记主要记录下Mecanim的3个高级功能:

  1. Animation Curve:可以根据动画的运行时间自定义一条曲线,在播放动画时可以获得这条曲线对应的值,可以实现跳跃穿过小洞的功能;
  2. Target Match:匹配一个预先定义好的点进行动画播放,可以实现人物攀爬的功能;
  3. Animation Record:可以对动画进行录制,然后可以播放录制好的动画,可以实现时之沙的时光倒流功能;

可以说Unity3D现在已经具备了开发一款媲美国际大厂的动作游戏的能力了。

Animation Curve

这里我们直接使用官网给出的示例,打开场景Scale Capsule:

运行游戏,我们发现此时人物是不能通过跳跃穿过墙上的小孔的:

原因很简单,人物的胶囊碰撞体比小孔要大。当我们勾选了右上角的Apply Scale之后,再跳跃试试看:

此时我们发现当人物跳跃时,胶囊碰撞体就会进行缩小,而我们的人物就可以钻过这个小洞了,在跳跃之后胶囊体会进行恢复。

我们找到动画文件Dive,就可以看到其设置了两个Curve:

而其中的ScaleOffsetCapsule就是用来控制胶囊体缩放的曲线,我们可以发现其呈现了1->0->1的一个区间。

然后我们看看参数的设置:

参数必须是Float类型同时名称必须和动画文件中的Curve名称一致,这样当我们播放跳跃动画时该参数就会根据预设好的曲线来取值了,注意该参数后方的输入框已经禁用了,不能输入。

最后我们看下脚本ScaleCapsule的实现:

通过每帧获取参数的值来实现跳跃的碰撞体变小的功能。

Target Match

核心是使用到了Animator的MatchTarget方法,帮助如下:

http://docs.unity3d.com/ScriptReference/Animator.MatchTarget.html

这里我们还是直接使用官网给出的示例,打开场景Target Match:

我们发现在箱子上方已经做好了一个目标点,我们的人物的右手会匹配到这个点进行动画播放。

需要注意的是,使用MatchTarget的动画必须位于Base Layer层。Match Target会将我们人物的一个部位的位置和目标点的位置进行插值来移动我们人物,结果就是可以通过一个指定高度的攀爬动画来匹配任意高度的攀爬。

我们看下调用的脚本:

 // Update is called once per frame
void Update ()
{ if (animator)
{
AnimatorStateInfo state = animator.GetCurrentAnimatorStateInfo(); if (Input.GetButton("Fire1")) animator.SetBool("Jump", true); if (state.IsName("Base Layer.JumpUp") || state.IsName("Base Layer.FullJump"))
{
animator.SetBool("Jump", false); animator.MatchTarget(RightHand.position, RightHand.rotation, AvatarTarget.RightHand, new MatchTargetWeightMask(new Vector3(, , ), ), animator.GetFloat("MatchStart"), animator.GetFloat("MatchEnd"));
hasJumped = true;
} if (hasJumped && state.normalizedTime > 1.2)
{
hasJumped = false;
Application.LoadLevel();
}
}
}

Animation Record

Unity3D的Animator类为我们提供了4个方法用于录制和播放动画:

同时我们也可以通过访问Animator提供的一些属性来了解动画录制的一些信息:

使用比较简单就不做示例展示了,需要注意的时,回放录制的动画时人物会回到开始录制的坐标点,而不是在当前坐标点开始播放。

Unity3D之Mecanim动画系统学习笔记(十一):高级功能应用的更多相关文章

  1. Unity3D之Mecanim动画系统学习笔记(一):认识Mecanim动画系统

    Mecanim简介 Mecanim动画系统是Unity3D4.0开始引入的一套全新的动画系统,主要提供了下面4个方面的功能: 针对人形角色提供一套特殊的工作流. 动画重定向的能力,可以非常方便的把动画 ...

  2. Unity3D之Mecanim动画系统学习笔记(九):Blend Tree(混合树)

    认识Blend Tree 我们在Animator Controller中除了可以创建一个State外还可以创建一个Blend Tree,如下: 那么我们看下新创建的Blend Tree和State有什 ...

  3. Unity3D之Mecanim动画系统学习笔记(十):Mecanim动画的资源加载相关

    资源加载是必备的知识点,这里就说说Mecanim动画的资源如何打包及加载. 注意,Unity4.x和Unity5.x的AssetBundle打包策略不一样,本笔记是基于Unity4.x的AssetBu ...

  4. Unity3D之Mecanim动画系统学习笔记(二):模型导入

    我们要在Unity3D中使用上模型和动画,需要经过下面几个阶段的制作,下面以一个人形的模型开发为准来介绍. 模型制作 模型建模(Modelling) 我们的美术在建模时一般会制作一个称为T-Pose( ...

  5. Unity3D之Mecanim动画系统学习笔记(七):IK(反向动力学)动画

    什么是IK? IK(Inverse Kinematics)即反向动力学,即可以使用场景中的各种物体来控制和影响角色身体部位的运动,一般来说骨骼动画都是传统的从父节点到子节点的带动方式(即正向动力学), ...

  6. Unity3D之Mecanim动画系统学习笔记(五):Animator Controller

    简介 Animator Controller在Unity中是作为一种单独的配置文件存在的文件类型,其后缀为controller,Animator Controller包含了以下几种功能: 可以对多个动 ...

  7. Unity3D之Mecanim动画系统学习笔记(四):Animation State

    动画的设置 我们先看看Animation Clip的一些设置: Loop time:动画是否循环播放. 下面出现了3个大致一样的选项: Root Transform Rotation:表示为播放动画的 ...

  8. Unity3D之Mecanim动画系统学习笔记(三):Animation View

    动画组件之间的关系 我们先看一张图: 这里我们可以看到,我们在GameObject之上绑定的Animator组件是控制模型进行动画播放的. 而其属性Controller则对应一个Animator Co ...

  9. Unity3D之Mecanim动画系统学习笔记(八):Animator Layers(动画分层)

    解决什么问题? 动画分层可以用来解决什么样的问题呢?试想一下如果你要开发一款第三人称的射击游戏,那么肯定是希望身体的动画分为上下两部分,上方根据瞄准的位置和是否射击进行动画播放,下方根据移动播放动画. ...

随机推荐

  1. UVa 10256 (判断两个凸包相离) The Great Divide

    题意: 给出n个红点,m个蓝点.问是否存在一条直线使得红点和蓝点分别分布在直线的两侧,这些点不能再直线上. 分析: 求出两种点的凸包,如果两个凸包相离的话,则存在这样一条直线. 判断凸包相离需要判断这 ...

  2. [转]ASP.NET 页生命周期概述

    原文链接:http://msdn.microsoft.com/zh-cn/library/ms178472(v=vs.110).aspx  对应版本:.NET 4.0 ASP.NET 页运行时,此页将 ...

  3. poj 1364 King(差分约束)

    题意(真坑):傻国王只会求和,以及比较大小.阴谋家们想推翻他,于是想坑他,上交了一串长度为n的序列a[1],a[2]...a[n],国王作出m条形如(a[si]+a[si+1]+...+a[si+ni ...

  4. noip2007提高组题解

    题外话:这一年的noip应该是最受大众关心的,以至于在百度上输入noip第三个关键字就是noip2007.主要是由于这篇文章:http://www.zhihu.com/question/2110727 ...

  5. Java Socket(2): 异常处理

    1 超时 套接字底层是基于TCP的,所以socket的超时和TCP超时是相同的.下面先讨论套接字读写缓冲区,接着讨论连接建立超时.读写超时以及JAVA套接字编程的嵌套异常捕获和一个超时例子程序的抓包示 ...

  6. oracle 回收站管理

    oracle10g,在pl/sql中选中删除后会出现类似:BIN$nJ5JuP9cQmqPaArFei384g==$0的表. 1.查看回收站 select * from user_recyclebin ...

  7. HTTP请求中浏览器缓存

    本文导读:浏览器缓存机制,其实主要就是HTTP协议定义的缓存机制.客户端缓存是否需要是可以在服务端代码上控制的.那就是响应头.响应头告诉缓存器不要保留缓存,缓存器就不会缓存相应内容:如果请求信息是需要 ...

  8. hdu 2059(dp)

    题意:容易理解... 思路:dp[i]表示乌龟到达第i个充电站时最少花费时间到第 i 个充电站后,从起点开始遍历到第 i-1 个充电站,得到最少花费时间 状态转移方程:dp[i]=min(dp[j]+ ...

  9. QT4.7.4-vs2008和vs2010的安装并编写测试程序

    QT的安装着实费了我好大的劲,之前试过QT5.1.0与VS2010的安装,但是因为设置的地方太多,程序运行总是不成功,所以最后选用QT4.7.4和VS2008与VS2010来编写程序.写这篇文章来总结 ...

  10. Watermarking 3D Polygonal Meshes in the Mesh Spectral Domain

    这周看了一篇Ryutarou Ohbuchi网格水印的论文,论文中提出在网格的频率域中加入水印.对于网格而言,没有如图像中的DCT等转换到频率域的变换,因此用什么量来模拟传统频率域中的系数,是很关键的 ...