Unityでは外部アプリケーションで作成したアニメーションを取り込み使用する事が出来ます。
今回は取りこんだアニメーションクリップのプロパティについてみていきます。
サンプル作り
アニメーションクリップのプロパティを操作する前に確認する為のサンプルを作成します。
人型3Dモデルをヒエラルキー上に配置したら、AnimatorにAnimatorControllerを設定します。
比較の為、人型モデルを二人並べてAnimatorControllerを別々に作成しそれぞれ別のアニメーションを設定します。
↑のように二人のキャラクターをヒエラルキー上に設置します。
名前を変更しAnimationClipのプロパティを変更しないキャラと変更するキャラを作ります。
確認の為に↑のように横に並べて比較しやすいようにしておきます。
サンプルではジャンプのアニメーションを使用しますが、これはAssetStoreでRaw Mocap Data for Mecanimで検索して出てくるアニメーションのJumpを使用します。
NormalCharacterに設定するAnimatorControllerの遷移はJump状態を作成しJumpアニメーションを設定しておきます。
EntryからJumpに流れますが、JumpからExitにHasExitTimeの条件だけで遷移をさせます。
こうすることでずっとJumpアニメーションが再生されます。
ルートモーションのプロパティを変更するCharacterに設定するAnimatorControllerのJumpにはJumpアニメーションを複製したものを設定します。
Jumpファイルを選択した状態でCtrl+Dキーを押して複製し名前をAnimationClipTestと変更します。
またAnimationClipTestのインスペクタのアニメーションの名前をJumpからAnimationClipTestと変更します。
名前は自由に変更してください。
AnimatorControllerについては
辺りを参照して頂くと状態や遷移の作り方がわかります。
ルートモーションの個別設定
Unityにアニメーション付きのモデルを取りこんでファイルを取りこむと以下のようになっています。
ファイルを選択するとインスペクタに
↑のようにアニメーションクリップに関するプロパティが表示されます。
それではルートモーションに関する部分を確認してみます。
Loop Time
Loop Timeにチェックを入れるとアニメーションの再生が終わったら繰り返し再生します。
歩くアニメーション等ずっと再生させたい時はチェックを入れておきます。
Loop Timeにチェックを入れるとLoop PoseとCycle Offsetの設定が出来るようになります。
Loop Poseにチェックを入れるとアニメーションの最初と最後がシームレス(滑らかに?)で再生されます。
Cycle Offsetはアニメーションのオフセットの位置(アニメーション開始位置)を設定します。
アニメーションは0~1の間でアニメーションの再生パーセンテージを指定するので0.5を設定すればアニメーションが50%の位置から再生します。
アニメーションの再生が2回目以降になると1以上の値が入って来るので1以上の値も設定可能だと思いますが設定する意味はあるかな?
Loop TimeとLoop Poseにチェックを入れ確認してみます。
左側が通常で右側がLoop Poseにチェックを入れたアニメーションクリップです。
右側がアニメーションの初めに向かってシームレスで再生されるように腕の位置等が通常と違っています。
Cycle Offsetを0.5に設定して再生すると
↑のように0.5の位置から再生されました。
Animatorの遷移はブレンドして再生されるので0.5では空中に浮いた状態ですが他の状態から遷移してきた時はブレンドされたアニメーションが再生されるので、
空中に飛んだ状態からは始まりません。
Root Transform Rotation
Root Transform RotationのBake Into Poseにチェックを入れるとアニメーションの値がルートオブジェクトの回転に反映されなくなります。
チェックを入れない場合はアニメーションの回転がゲームオブジェクトの回転に影響を与えるのでスクリプトで回転を制御したい場合はチェックを入れておきます。
Based Uponは回転のルート位置の設定でOriginalはアニメーションのデータ通り、Body OrientationはBodyの前方ベクトルに合わせます。
Bake Into Poseのチェックを外すと
↑のように右側のキャラは不必要に回転してしまってます。
Bake Into Poseにチェックを入れBased UponにBody Orientationを設定し、Offsetに30を入れて確認してみます。
↑のように右側のキャラクターは30度ほど回転した状態から始まります。
Root Transform Position(Y)
Root Transform Position(Y)のBake Into Poseにチェックを入れるとアニメーションの値がルートオブジェクトのY座標に反映されなくなります。
スクリプトで制御する場合はチェックを入れます。
Based UponはY座標の基準値の設定でOriginalはアニメーションの基点、Center Of Massは重心、Feetは足元に設定します。
Offsetは足元からの調整値を設定します。
Bake Into Poseのチェックを外して確認すると
↑のように右側のキャラが地面スレスレで回転しているだけになります。
これだと少し解り辛いのでアニメーションクリップの下に表示されるサンプルで確認してみましょう。
左がBake Into Poseにチェックを入れた場合、右側がチェックを入れない場合です。
ベースとなる位置が左側だとずっと同じ位置、右側はジャンプに合わせて上に移動しています。
Root Transform Position(XZ)
Root Transform Position(XZ)のBake Into Poseにチェックを入れるとアニメーションの値をルートオブジェクトのX、Z軸に反映させません。
Based Uponは基準値の設定でOriginalはアニメーションのデータ、Center Of Massは重心を基準にします。
これはちょっとわかり辛いですがルートオブジェクト(基点となる位置)を焼きこむのでチェックを入れるとアニメーションの動きでキャラクターが移動しているように見えます。
例えばBake Into Poseにチェックを入れBased UponをOriginalとすると
↑のように基点となる位置が焼きこまれアニメーションはそこを基点にして作成してある為、実際のアニメーションでキャラが動きます。
Bake Into Poseのチェックを外すと
↑のように基点となる位置も一緒に移動する為、実際のアニメーションでキャラが動きません。
シーンビューで確認してみると
↑のようにBake Into Poseにチェックを入れるとアニメーションの動きでキャラが動いています。
Mirror
MirrorはRigのAnimation TypeをHumanoidにしている時だけ有効になる項目で、アニメーションを左右反転させる事が出来ます。
左側が通常、右側がMirrorにチェックを入れたキャラクターです。
Additive Reference Pose
Additive Reference Poseはリファレンスポーズを設定する事が出来ます。
タイムライン上の青い矢印をドラッグするか、
Additive Reference Poseの下のPose Frameに直接フレーム番号を指定します。
リファレンスポーズの設定がどう影響するのかがちょっとわかりません・・・・(^_^;)
Curves
Curvesはアニメーションのパラメータ変数を指定し、アニメーションの再生位置に応じてパラメータを設定する事が出来ます。
AnimationビューのCurvesと使い方はほとんど同じですが、
AnimationClipのCurvesではパラメータ変数を指定しその変数の値をスクリプトから参照する事が出来るのでキャラクターの見た目に応じてコライダのサイズを調整するといった事が出来るようになります。
Events
Eventsはアニメーションの再生位置に応じてアニメーションイベントを設定する項目です。
AnimationビューのAnimation Eventsと同じように使用出来ます。
足を地面に着いた時に足音を鳴らしたり、剣を上から振りおろす時に音を鳴らしたいといった時にアニメーションイベントを設定するとアニメーションの再生位置のタイミングでアニメーションイベントを発生させ、スクリプトで処理を行う事が出来ます。
Mask
Maskでアニメーションを体の部位によって再生するかしないかを設定する事が出来ます。
この項目はAssetsフォルダで右クリック→Create→Avatar Maskでアバターマスクを作成しインスペクタで表示したものとほとんど同じです。
Definitionの項目でCopy From Other Maskを選択し、自身で作成したアバターマスクを指定すればその設定を使用する事が出来ます。
DefinitionをCreate From This Modelにすればその下のHumanoid、Transformでマスクを指定する事が出来ます。
アバターマスクに関しては
を参照してください。
Motion
Motionはカスタムのルートモーションノードを指定します。
Root Motion NodeをNone以外に設定すると記事の最初の方に記したルートモーションの項目は選択出来なくなります。
↓がRoot Motion NodeをNoneにした場合です。
次にRoot Motion NodeにボーンのNeckを設定した場合です。
首の部分がルートモーションノードになっています。
実際に動かしてみると、
↑のように首を中心にアニメーションが再生されます。
ルートモーションノードに関しては
Unityマニュアルを参照してください。
終わりに
アニメーションクリップのルートモーションの設定は今までいいかげんにやってきましたので今回でなんとかものにしようと試みました。
が・・・少し混乱しました。
単純にそれぞれの項目でのBake Into Poseのチェックをしたらこうなる、外したらこうなる、とそれぞれの項目で同じ感じでチェックが出来ない事がわかりました。
Bake Into Poseにチェックを入れれば単純にスクリプトで制御出来ると思っていたんですが、Bake Into Poseでチェックを入れた場合それぞれのアニメーションの基点となる位置の焼きこみを行うかどうかの設定なので、
Root Transform Position(Y)とRoot Transform Position(XZ)ではちょっと変わってきますね。
単純にいけばRoot Transform Position(Y)のBake Into Poseのチェックを入れ、Root Transform(XZ)のBake Into Poseのチェックを外すという感じでしょうか。
まぁ・・・アニメーションの作り、スクリプトだけでキャラクターを制御する等によって変わってくるとは思います。