Unity "Apply Root Motion" 与 “Bake into Pose”

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

made by Unity 2017.1.1f1

模型和动画均可以在Asset Store上免费下载

关键词“Mixamo”
这里写图片描述

测试案例

添加一个Demo2文件夹,并创建新场景、Animator Controller 和 控制脚本
将 Mixamo/Magic Pack/Characters 下的人物模型预制体拖到 Hierarchy 面板中
这里写图片描述
调整相机参数,使其能看到人物移动
这里写图片描述
配置 Animator Controller,并将其拖到 Hierarchy 面板的人物模型上
这里写图片描述
编写脚本,并将其拖到 Hierarchy 面板的人物模型上

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour {

    private Animator mAnimator;
    // Use this for initialization
    void Start () {
        mAnimator = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update () {
        if(Input.GetKey(KeyCode.W))
        {
            mAnimator.SetTrigger("Walk");
        } else
        {
            mAnimator.SetTrigger("Idle");
        }
    }
}

原理解析

(1)Apply Root Motion
位置:点开 Hierarchy 面板中的人物模型,在其 Animator 组件中
这里写图片描述
(2)Bake Into Pose
位置:它是 Animation 动画的一个属性。
这里写图片描述

在untiy中将动画中的变换分成两种,Body Transform和Root Transform,这两个设置会相互影响。

如果是设置成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的区别)

情景分析

【在 Standing_work_forward.anim 动画下进行测试】

运行场景,单击十字光标(快捷键W),可以看到 Idle 状态下,该模型的骨骼其实一直在动,而它的父对象,也就是一个空的 GameObject 的位置属性却是不变的。
这里写图片描述

【在 Standing_work_forward.anim 动画下进行测试】

(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”
【每次都从原地超前行走】
勾选“Bake into Pose”后,“Apply Root Motion”锁定为不勾选,所以效果和情景一是一样的。
这里写图片描述
(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,所以变换将不被应用,所以模型将一直在原地,自然,新的动画开始时候,模型处于行走动画开始时的位置。
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值