http://blog.csdn.net/cubesky/article/details/39478207

在很多动画当中,模型的位置、角度往往会发生变化,我们需要决定是否将模型再动画中发生的这些变换应用到实际模型。Unity中有两个跟这个有关的设置。

1、

2、

这里如果看官方文档,理解起来会比较绕,特别是这两个设置的地方会相互影响。当然如果要是弄明白了里面的机制就好理解了。

我们首先来看这个“Bake into Pose".在untiy中将动画中的变换分成两种,Body Transform和Root Transform,我们可以设置动画中的关于模型的一些变换(平移、旋转等)是属于Body Transform(pose)还是Root Transform(trajectory)的一部分。这里的Bake
into Pose 也就是将变换设置为Body Transform(pose)的一部分
我们可以这样去理解,如果是设置成Body Transform(pose)的话,就相当这些变换是属于动画本身的一部分,也就是说,不管设不设置Apply Root Motion,在场景中,我们都会看到模型位置或角度的变化。(因为Body Transform不影响模型实际的位置和角度,所以这里只是纯粹的动画效果,模型的位置和角度参数值不变)如果设置成Root
Transform,Root Transform将影响模型的实际位置和角度(前提是要设置“Apply Root Motion”,如果不设置Apply Root Motion的话,也就是说变换将不应用,场景中的模型位置或角度是不会有变化的(参数值自然也不变),就像一个行走动画,可能一直在原地行走)。

然后我们来重点再看看这里的”Apply Root Motion".这里他会起到两个作用,首先最重要的是,决定是否应用Root
Transform,如果应用的话,那么在动画的同时,模型的位置和角度会同时跟着变化。如果这里不勾选的话,那么就是说不应用Root Transform,这样我们所有的Root Transform都将不起任何作用。(也就相当于于所有没有Bake into Pose 的变换都没有用了)。

Apply Root Motion的第二个作用是在动画结束后,将Body Transform中的变化应用到模型(注意,这里是结束的时候才应用,也就是说动画的时候,模型的position、rorate等参数是不变的,当动画结束之后,开始新的动画之前才会改变,注意这里跟前面提到的Root
Transform的区别)

上面就是关于Root Motion的理论,然后我们来个几个实际的场景。

比如说我们有一个人物行走的动画,我们来考虑一下几种情况(这里以“Root transform position(XZ)为例)

1、勾选”Bake into Pose",不勾选“Apply Root Motion",勾选”Bake into Pose"后,变换属于Body Transform,所以即使这里未勾选”Apply Root Motion“,但是动画依然会在场景中体现,人物会按照动画的路径行走(但是如果我们观察Inspector中模型的position参数,值一直不变)。但是因为没有勾选Apply
Root Motion,所以动画结束后,变换不会应用到模型,所以如果这时候,如果开始一个新的动画的话,模型会瞬间回到起始位置(新的动画开始时候,模型处于行走动画开始时的位置)。

2、勾选”Bake into Pose",并勾选“Apply Root Motion",这里跟上面的情况唯一不同的就是,动画结束后,开始新的动画之前,变换会应用到模型。(模型的position在新的动画开始之前会发生变化,新的动画开始时候,模型处于动画结束时的位置)

3、不勾选”Bake into Pose",勾选“Apply Root Motion",这时候,变换是作为Root Transform,所以因为这里勾选了Apply Root Motion,变换会应用到模型(模型的position跟着动画不停的变化),自然,新的动画开始时候,模型处于动画结束时的位置。

4、不勾选”Bake into Pose",并且不勾选“Apply Root Motion",这里变化还是作为Root Transform,但是因为没有勾选Apply Root Motion,所以变换将不被应用,所以模型将一直在本地不动,自然,新的动画开始时候,模型处于行走动画开始时的位置

参考:

http://ru.unity3d-docs.com/Documentation/Manual/Animator.html

http://ru.unity3d-docs.com/Documentation/Manual/RootMotion.html

http://ru.unity3d-docs.com/Documentation/Manual/ScriptingRootMotion.html

Root Motion深度解析[Unity]的更多相关文章

  1. Unity加载模块深度解析(Shader)

    作者:张鑫链接:https://zhuanlan.zhihu.com/p/21949663来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 接上一篇 加载模块深度解析(二 ...

  2. Unity加载模块深度解析(网格篇)

    在上一篇 加载模块深度解析(一)中,我们重点讨论了纹理资源的加载性能.这次,我们再来为你揭开其他主流资源的加载效率. 这是侑虎科技第53篇原创文章,欢迎转发分享,未经作者授权请勿转载.同时如果您有任何 ...

  3. Unity3D规则之Unity Root Motion / Bake into Pose 的问题

    参考: http://ru.unity3d-docs.com/Documentation/Manual/Animator.html http://ru.unity3d-docs.com/Documen ...

  4. unity, Root Motion

    (引自:http://tieba.baidu.com/p/4323644080) 然后详细看了下这个文档:http://docs.unity3d.com/Manual/RootMotion.html ...

  5. Unity学习疑问记录之Apply Root Motion

    Should we control the character's position from the animation itself or from script. 如果我们勾选了Animator ...

  6. Kafka深度解析

    本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/01/02/Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅 ...

  7. Unity3D 中 Generic 动画导入设置和 Root Motion 之间的关系

    2条评论 Unity3D 的 Mecanim 动画系统可以直接复用 3DS MAX 中制作的动画文件中的位移,这个就是通过 applyRootMotion 来达成的,我们只需要在使用 Animator ...

  8. Apply Root Motion

    Apply Root Motion 应用根动作: Should we control the character's position from the animation itself or fro ...

  9. mybatis 3.x源码深度解析与最佳实践(最完整原创)

    mybatis 3.x源码深度解析与最佳实践 1 环境准备 1.1 mybatis介绍以及框架源码的学习目标 1.2 本系列源码解析的方式 1.3 环境搭建 1.4 从Hello World开始 2 ...

随机推荐

  1. UVA - 1045 The Great Wall Game(二分图最佳完美匹配)

    题目大意:给出棋盘上的N个点的位置.如今问将这些点排成一行或者一列.或者对角线的最小移动步数(每一个点都仅仅能上下左右移动.一次移动一个) 解题思路:暴力+二分图最佳完美匹配 #include < ...

  2. Sping中Bean配置的深入探讨

    一.p命名空间的使用 Spring 从 2.5 版本开始引入了一个新的 p 命名空间,可以通过 <bean> 元素属性的方式配置 Bean 的属性.使用 p 命名空间后,基于 XML 的配 ...

  3. Redis 分布式锁的正确实现方式(转)

    _ 前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各 ...

  4. 使用MSSQL同步&发布数据库快照遇到错误:对路径“xxxxx”访问被拒绝的解决方法

    使用MSSQL同步 数据库同步做后后测试:先在同步那台服务器(服务器A)数据库里修改里面数据库,然后再去被同步那台服务器(服务器B)看下数据有没被同步过去 发布数据库快照遇到错误:对路径“xxxxx” ...

  5. myeclipse10.0如何集成Git

    现需要给myeclipse10.0集成git工具,经过搜索资料,现整理如下方法: myeclipse10.0对应的Git版本应该为:egit版本为2.3.1 下载地址:http://wiki.ecli ...

  6. wireshark 学习 1

    wireshark 调试WiFi 安装之后的启动脚步. #!/bin/bash iw dev mon0 del iw dev wlp3s0 interface add mon0 type monito ...

  7. Raspberry Pi3 ~ 安装 nfs Server

    l  安装必要服务: sudo      apt-get install  portmap sudo  apt-get install  nfs-kernel-server sudo      apt ...

  8. [2017-10-25]Abp系列——集成消息队列功能(基于Rebus.Rabbitmq)

    本系列目录:Abp介绍和经验分享-目录 前言 由于提交给ABP作者的集成消息队列机制的PR还未Review完成,本篇以Abplus中的代码为基准来介绍ABP集成消息队列机制的方案. Why 为什么需要 ...

  9. linux 网络设备,网卡配置 ,相关

    网络设备,网卡配置: Eth0是物理网卡:唯一mac地址,Bcast:广播地址,MAsk:子网掩码, Lo:系统自带的回环的ip地址,可以做一些基本的测试应用,比如没有网卡就用127.0.0.1, r ...

  10. Ext rowcontextmenu回调

    今天栽了大跟头,,,, EXT js右键可以获取到选中的那一列的索引值,只需在回调函数中取到那一列的数据就可以ok,不用再费尽心思的费用执行click的事件 grid.on("rowcont ...