动画系统:
支持:动画融合,混合,叠加动画,行走循环的时间同步,动画层,控制动画的各个方面(时间,速度,融合权重)
 
带有每顶点1、2或4骨骼的蒙皮网格,以及支持基于物理的布娃娃系统和程序动画。
 
简要介绍如下:  
 
 动画融合 Animation Blending    你不希望两个不同的动作之间突然跳转,想要动画平滑过渡  
        在Unity同一个角色可以拥有任意数量的动画,所有动画被融合或添加在一起,来产生最终动画。
 
         Animation Layers   动画层   
         Animation.CrossFade() 淡入淡出
         在Unity动画系统,可以在许多动画剪辑之间做期望的融合,
         可以指定手工融合权重或简单实用animation.CrossFade(),来自动动画处理权重。
         对权重的解释:
         比方说有一个行走循环和跑步循环,两者的权重都是1(100%)。当Unity生成最终动画会规格化权重,这意味着行走将占50%,跑步占50%权重。
 
 Animation Mixing 动画混合                                           附加动画  和   动画混合 的区别尚不清楚
        例如,有个一个挥手动画,想要在空闲角色或正行走的角色播放挥手动画。没有动画混合,您必须创建两个手挥舞着动画:一个用于空闲,一个用于行走。不过,如果你添加肩膀变换作为混合变换,来做挥手动画,那么挥手动画将从肩膀位置外受完全控制,身体的其余部分将不会受到它的影响,将继续播放空闲或行走动画。因此,只需要一个挥手动画。
 
 Additive Animation 叠加动画(也可以认为是附加动画)          代码部分原理尚未清楚:
  叠加动画和动画混合可以让你缩减为游戏制作的动画片断的数量,并且对面部动画(facial animations)来说非常重要.
叠加动画:就是让你在任意其他动画上面附加上动画效果。或者这样认为主运动不变,在其上面添加一些附加运动。
附加动画详解:
叠加型动画通过将两个动画彼此相减进行计算,并将其存储为两个动画的差值。实际上叠加型动画本身并没有什么用途,因为它需要添加到另一个动画上才能正常工作。使用叠加型动画实际目的是想找到可以应用到多个动画上的叠加姿势。这可以降低每个状态需要的动画数量。比如一个武器弹药装载动画可以制作成为叠加动画。现在可以把它添加到空闲动画、走步的动画集(前、后、左和右)上面,同样也可以添加到跑步的动画集上。所以不必制作向前走动过程中加载弹药的动画或者其他任何组合动画,只需要创建一个装载弹药的叠加动画,然后将其添加到向前走动、向后跑动等动画的上面即可。
但是使用时应该注意失真的影响。
 
Procedural Animation 程序动画
有时,想要程序动画角色骨骼。这样的话可以给指定骨骼写脚本,来控制骨骼的运动轨迹。
一件很重要的事情要知道的是动画系统更新变换是在Update()函数之后并LateUpdate()函数被调用之前。因此想要调用LookAt()函数,应该在LateUpdate()中以确保已经真的重写动画。
     布娃娃系统Ragdolls 也是用同样的方法制作出来的. 你可以简单的把刚性物体(Rigidbodies), 角色关节(Character Joints) 和 胶囊碰撞体(Capsule Colliders)连接给不同的骨骼. 这样物理系统就可以作用于蒙皮角色(skinned character). (什么是布娃娃系统,当你在射击类游戏中打死对手时可以注意到当角色快接近地面时,他的四肢开始瘫软在地面上,这个不是动画师调出来的,而是布娃娃系统自动计算出来的。)
布娃娃系统的利弊:
由于计算机的各种技术限制,游戏开发者不能够使用完全仿真的布娃娃设计,而采用一种相对简单的模式。
  • 一些末端骨骼如手指能做出种类繁多的动作。
  • 利用骨骼联合点代替真实的骨骼肌来约束骨骼的移动,能取得较好的表现效果。
  • 通过布娃娃的碰撞检测可以让角色在游戏中的表现更为真实。不同的先前的将整个角色模型用来进行碰撞检测。

布娃娃系统最大的优势还是在于取代传统的角色动作系统。

Animation Playback and Sampling 动画播放和取样
  动画剪辑通常以一个固定的帧速制作。例如,可以砸Maya中以每秒60帧(fps)的帧速率创建动画,当导入动画到Unity时,这个帧速率将由导入器读取,根据前面的情况,可以得知,导入的动画数据被取样也是60fps。
 提示:所以这个动画播放的取样速率是由3D制作软件(如Maya)来决定的。但是播放速率是由实际设备决定的。
 
然而,游戏运行通常运行在一个变化帧速率,有的电脑帧速快,有的电脑帧速慢,
即使是同一台电脑,前一秒和后一秒因为视角的不同帧速也会不一样。基本上当游戏开始运行时我们无法确定一个精确的帧速率。这意味着即使动画剪辑制作时是60fps,那它播放时也许是另外一个速率,例如56.72 fps 或 83.14 fps,它可能是任何一个。
读取动画播放的最后一帧
采用WrapMode.ClampForever模式    这样的话,动画将保持无限取样最后一帧,直到你停止动画。
 同样需要注意的是变化的帧速采样结果, 一个使用WrapMode.Once 模式重放的动画的采样不一定是精确的最后一帧( last frame).在游戏中很有可能是刚好结束前的某一帧, 在下一帧时间可能超过动画的长度, so it is disabled 和 not sampled further. 如果你需要动画的最后一帧采样精确,你可以使用WrapMode.ClampForever. 如果是那样的话动画将不停的对最后一帧进行采样直到你自己停止动画. 
 
使用动画事件 using Animation Events
       动画剪辑中可以添加动画事件,使你在时间轴特定的帧调用脚本中的函数。这里需要关注的就是在某一个时间点调用某一个函数。比如播放到动画事件显示在事件行上。通过双击事件行,或使用"事件"按钮,添加一个新的动画事件。
        对绝大多数应用场合,  Unity对变化帧速的采样我们无需对其进行干预. 可是, 如果你的某个游戏逻辑所依赖的动画变化或道具(transforms or properties)结构十分特殊, 那你必须知道这一点.  举例说, 如果你有一个动画是把一个物体30帧内从 0旋转到180度, 你想从代码中得知什么时候动画完成一半, 你不能写一段条件语言来检查现在旋转值是不是90度. 因为 Unity 依照游戏的变化速率来对动画采样, 它可能在旋转快到90度时进行采样, 或者是刚好过90度的时候采样. 如果你需要通报动画中一个特殊点到达时,你可以使用 AnimationEvent 来替代.
 
动画剪辑 Animation Clip      动画剪辑存储着所有可使用于角色动画或简单动画的动画数据。这些动画剪辑数据只有一个属性而且不能修改:采样率。(这是创建剪辑的采样率)
 
 

Unity Animation System(动画系统)的更多相关文章

  1. unity 对Animator动画系统的研究

    unity的新动画系统叫Mecanim,使用Animator来取代旧系统Animation,按Unity文档的惯例:知识点主要分2部分:unity manual和unity script,读者可以边看 ...

  2. 关于Unity中新版动画系统的使用

    Mecanim动画 1:旧版动画系统只能通过代码来控制动画播放,随着动画种类变多,代码复杂度也会增加,同时动画过渡也需要非常繁琐的代码控制,为了让有经验的动画师开发动画,unity推出了针对人物角色的 ...

  3. Unity笔记 英保通 Unity新的动画系统Mecanim

    Mecanim动画系统是Unity独一无二.强大灵活的人物动画系统.该系统赋予您的人类和非人类人物令人难以置信的自然流畅的动作,使它们栩栩如生.游戏中角色设计提高到了新的层次,在处理人类动画角色中可以 ...

  4. Unity3D之Legacy动画系统学习笔记

    Unity3D的Mecanim动画系统是非常强大的,而且作为Unity推荐的动画系统,其未来会完全代替老的一套动画系统,即Legacy动画系统.目前的情况是Mecanim与Legacy两套动画系统同时 ...

  5. 关于Unity中旧版动画系统的使用

    Unity在5.X以后,有一个旧版的动画系统和新版的动画系统. 新版的动画系统是使用Unity动画编辑器来调的,调动画和控制动画 旧版的动画系统是用其他的第三方软件调好后导出到一个FBX文件里面,就是 ...

  6. Unity 动画系统

    Legacy动画系统:Animation组件(旧) Mecanim动画系统:Animator组件(新) 动画播放过程: //动画片段 [System.Serializable] public clas ...

  7. Unity 4.0 中的新动画系统——MecAnim

    分享一个文档资料,关于动画系统的,版本应该很老了,但是有借鉴意义的: Unity 4.0 已于 2012 年 11 月 15 日正式发布,Unity 每一次版本的提升,都给游戏开发者带来惊喜,这一次也 ...

  8. 【Unity】第10章 Mecanim动画系统

    分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 Unity提供了两种动画系统:一种是早期版本提供的旧版(Legacy)动画系统,旧版本(Legacy)以后将逐步被淘汰掉 ...

  9. unity, Animation crossfade需要两动画在时间上确实有交叠

    unity现在播动画都用Animator了,但公司的老项用的还是Animation,今天遇到一个bug,是两个动画的衔接处不连贯. 最后发现是由于A动画已经播完之后B动画才开始播,而且还用了cross ...

随机推荐

  1. javascript中this

    js函数中的this指向问题:(this对象是在运行时基于函数的执行环境绑定的) 与普通变量获取不同,内部函数在搜索this和arguments这两个变量时,只搜索到其活动对象为止,所以this无法像 ...

  2. Tengine 安装配置全过程

    Tengine官网上有个非常简单的教程,中间并未涉及到一些常用的设置,所以仅供参考.一下午为本人的安装步骤及过程. 1.安装必要的编译环境好 由于Tengine安装需要使用源代码自行编译,所以在安装前 ...

  3. [译]Writing Custom Middleware in ASP.NET Core 1.0

    原文: https://www.exceptionnotfound.net/writing-custom-middleware-in-asp-net-core-1-0/ Middleware是ASP. ...

  4. x:Array的使用

    x:Array是通过Items属性向使用者暴露一个类型已知的ArrayList.ArrayList中成员类型由x:Array type指明 <Window x:Class="demo_ ...

  5. Python购物车程序

    1.要求用户输入工资,然后打印购物菜单 2.用户可以不断的购买商品,直到钱不够为止 3.退出时格式化打印用户已购买的商品和剩余金额 salary = int(input("请输入你的工资:& ...

  6. jemter的安装和使用

    1.下载地址:http://jmeter.apache.org/download_jmeter.cgi 2.安装 (1)解压,解压之后如图 (2)配置环境变量 我解压之后的目录是:D:\softwar ...

  7. Sublime Text3插件管理

    插件安装 package control 安装Sublime Text3 打开Sublime Text3,Ctrl+~ 调出控制台,输入代码安装 package control 代码如下: impor ...

  8. android键盘输入读取

    android键盘输入读取  监控android键盘输入方式有两种,一种在java层实现,重写onKeyDown和onKeyUp方法.另一种是在jni层实现,监控/dev/input/event0键盘 ...

  9. epoll & socket 连接数突破

    http://shenfeng.me/how-far-epoll-can-push-concurrent-socket-connection.html

  10. 《jQuery知识点总结》(二)

    dom css 操作html(n)                n为空则取值相当于JS的innerHTML填写n为赋值val(n)                n为空则取值相当于JS的value填 ...