AnimatorでAnimation Clipを動かすと、アニメーションの位置はAnimation Clipに設定されている値が優先されて表示されます。
例えば、原点でバウンドするボールのアニメーションを作ると、その後でボールを移動させても、実行時には原点でバウンドするボールに戻ってしまうのです。
Unity5ではRoot Motionを設定することで、Animation Clipで設定したアニメーションの位置を相対的なものとして扱うことができます。ここではRoot Motion機能を使って移動後の場所でアニメーションを再生する方法を紹介します。
アニメーションを作成する
まずはボールが跳ねるアニメーションを作りましょう。
シーンビューに球を配置して、その球を選択した状態でメニューバーから「Window」→「Animation」を選択します。出てきたAnimation Windowの「Create」ボタンをクリックしてhopという名前で保存しておきます。
続いて「Add Property」→「Transform」→「Position」を選択して、アニメーションを作成します。今回はアニメーションカーブを次のように配置してみました。
さてこの状態で実行してみると、原点を軸にしてボールがバウンドします。このボールを無理やり端っこに持っていってもやはり原点でバウンドしてしまいます。
Generate Root Motion Curbを設定する
Root Motionを設定することで、Animation Clipに設定された値を相対的なものとして扱えるようになります。ここでは球にRoot Motionを設定して、移動先でバウンドするようにしましょう。
まずは作成した「hop」のAnimation Clipを選択し、インスペクタから「Generate Root Motion Curb」のボタンをクリックします。
続いて、SphereにアタッチされているAnimatorコンポーネントの詳細をインスペクタに表示し、「Apply Root Motion」のチェックを入れます。
これによりRoot Motionが有効になります。ゲームを実行してみると移動後の場所でボールがバウンドするようになります。
まとめ
Animatorを使った場合、通常ではAnimation Clipに設定された座標が優先されて使われます。Root Motionを使うことで、オブジェクトを移動しても移動先でアニメーションを再生することができるようになります。
AnimatorやAnimation Clipに関しては「Unity5の教科書」でも説明していますので、あわせて参考にしてみてくださいね^^