Unity「Apply Root Motion」と「Bake into Pose」


リファレンスhttp://blog.csdn.net/cubesky/article/details/39478207
made by Unity 2017.1.1f1
モデルとアニメーションはすべてAsset Storeの上で無料でダウンロードすることができます
キーワード「Mixamo」Unity
テストケース
Demo 2フォルダを追加し、新しいシーン、Animator Controller、および制御スクリプトを作成してMixamo/Magic Pack/Charactersの人物モデルプリフォームをHierarchyパネルのUnity にドラッグしてカメラパラメータを調整し、人物移動Unity がAnimator Controllerを構成していることを確認します.Hierarchyパネルのキャラクタモデルにドラッグ&ドロップUnity スクリプトを作成し、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();
    }

    // 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コンポーネントのUnity (2)Bake Into Pose位置:Animationアニメーションの属性です.Unity
untiyではアニメーションの変換を2つに分け、Body TransformとRoot Transformの2つの設定が相互に影響します.
Body Transform(pose)に設定すると、これらの変換はアニメーションそのものの一部に相当します.つまり、Apply Root Motionを設定するかどうかにかかわらず、シーンではモデルの位置や角度の変化が見られます.(Body Transformはモデルの実際の位置と角度に影響しないため、ここでは純粋なアニメーション効果にすぎず、モデルの位置と角度パラメータ値は変わらない).
Root Transformに設定すると、Root Transformはモデルの実際の位置と角度に影響します(「Apply Root Motion」を設定し、Apply Root Motionを設定しないと、つまり変換は適用されず、シーン内のモデルの位置や角度は変化しません(パラメータ値は自然に変わりません).ずっとその場を歩いているかもしれません).
そしてここの「Apply Root Motion」を重点的に見てみましょう.ここで彼は2つの役割を果たします.まず最も重要なのは、Root Transformを適用するかどうかを決定することです.適用すれば、アニメーションと同時にモデルの位置と角度が同時に変化します.ここでチェックしないと、Root Transformを適用しないと、私たちのすべてのRoot Transformは何の役にも立たないということです.(つまり、Bake into Poseのないすべての変換が役に立たないことに相当します).
Apply Root Motionの2つ目の役割は、アニメーションが終了した後、Body Transformのバリエーションをモデルに適用します(ここでは終了時に適用します、つまりアニメーションの場合はモデルのposition、rorateなどのパラメータは変わらないので、アニメーションが終了してから新しいアニメーションを開始する前に変更します、ここで前述のRoot Transformの違いに注意してください)
シナリオ解析
【Standing_work_forward.animアニメーションでテスト】
シーンを実行し、十字カーソル(ショートカットW)をクリックすると、Idle状態でモデルのボーンが動いているのが見えますが、親オブジェクト、つまり空のGameObjectの位置属性は変わりません.Unity
【Standing_work_forward.animアニメーションでテスト】
(1)「Bake into Pose」にチェックを入れ、「Apply Root Motion」にチェックを入れず【毎回その場から先を行く】Bake into Poseにチェックを入れた後、Body Transformに変換し、だからここで「Apply Root Motion」をチェックしていなくても、アニメーションはシーンに現れ、人物はアニメーションのパスに従って歩きます(ただし、Inspectorのモデルのpositionパラメータを観察すると、値はずっと変わりません).ただしApply Rootモーションはチェックされていないため、アニメーションが終了しても変換はモデルに適用されないため、この場合、新しいアニメーションを開始すると、モデルは瞬時にホーム位置(新しいアニメーションの開始時、モデルはアニメーションの開始時の位置)に戻ります.Unity (2)「Bake into Pose」、「Apply Root Motion」、「毎回その場から先を行く」、「Bake into Pose」をチェックすると、「Apply Root Motion」はチェックしないようにロックされるので、効果はシナリオと同じです.Unity (3)「Bake into Pose」をチェックしない、「Apply Root Motion」をチェックする【前に進む】変換はRoot Transformとして機能するので、ここではApply Root Motionをチェックしているので、変換はモデルに適用されます(モデルのpositionはアニメーションに従って絶えず変化します).Unity (4)「Bake into Pose」をチェックせず、「Apply Root Motion」をチェックしない【その場で歩く】ここでは変化はRoot Transformとして扱われているが、Apply Root Motionをチェックしていないため変換は適用されないため、モデルはずっとその場にあるので、自然と、新しいアニメーションの開始時にモデルはアニメーションの開始時の位置にある.Unity