おもちゃラボ

Unityで遊びを作ってます

【Unity】Animation Clipで設定した位置を相対的な値として扱う方法

AnimatorでAnimation Clipを動かすと、アニメーションの位置はAnimation Clipに設定されている値が優先されて表示されます。

例えば、原点でバウンドするボールのアニメーションを作ると、その後でボールを移動させても、実行時には原点でバウンドするボールに戻ってしまうのです。

f:id:nn_hokuson:20170424192512j:plain

Unity5ではRoot Motionを設定することで、Animation Clipで設定したアニメーションの位置を相対的なものとして扱うことができます。ここではRoot Motion機能を使って移動後の場所でアニメーションを再生する方法を紹介します。

アニメーションを作成する

まずはボールが跳ねるアニメーションを作りましょう。

シーンビューに球を配置して、その球を選択した状態でメニューバーから「Window」→「Animation」を選択します。出てきたAnimation Windowの「Create」ボタンをクリックしてhopという名前で保存しておきます。

f:id:nn_hokuson:20170424192527p:plain:w400

続いて「Add Property」→「Transform」→「Position」を選択して、アニメーションを作成します。今回はアニメーションカーブを次のように配置してみました。

f:id:nn_hokuson:20170424192535p:plain:w500

さてこの状態で実行してみると、原点を軸にしてボールがバウンドします。このボールを無理やり端っこに持っていってもやはり原点でバウンドしてしまいます。

f:id:nn_hokuson:20170424192631j:plain:w400

Generate Root Motion Curbを設定する

Root Motionを設定することで、Animation Clipに設定された値を相対的なものとして扱えるようになります。ここでは球にRoot Motionを設定して、移動先でバウンドするようにしましょう。

まずは作成した「hop」のAnimation Clipを選択し、インスペクタから「Generate Root Motion Curb」のボタンをクリックします。

f:id:nn_hokuson:20170424192709p:plain:w300

続いて、SphereにアタッチされているAnimatorコンポーネントの詳細をインスペクタに表示し、「Apply Root Motion」のチェックを入れます。

f:id:nn_hokuson:20170424192733p:plain:w300

これによりRoot Motionが有効になります。ゲームを実行してみると移動後の場所でボールがバウンドするようになります。

f:id:nn_hokuson:20170424192738g:plain

まとめ

Animatorを使った場合、通常ではAnimation Clipに設定された座標が優先されて使われます。Root Motionを使うことで、オブジェクトを移動しても移動先でアニメーションを再生することができるようになります。

AnimatorやAnimation Clipに関しては「Unity5の教科書」でも説明していますので、あわせて参考にしてみてくださいね^^