NyARToolkit for Unityで3Dモデルのアニメーション
3Dモデルのアニメーション
前回に引き続き、Unityのオリジナルキャラクターである「ユニティちゃん」を利用して、 3Dモデルにアニメーションを設定してみましょう(詳細はNyARToolkit for 3Dモデルの表示を参照)。
Unityで3Dモデルにアニメーションを設定するときは、Animator ControllerというAssetを利用します。 「ユニティちゃん」のパッケージには、UnityChanLocomotions、UnityChanActionCheck、UnityChanARPoseの 3種類のAnimator Controller **が含まれています。
今回は、UnityChanLocomotionsを「ユニティちゃん」に設定して、キーボードの入力に対応してアニメーションするように改良します。
Animation Controller
[UnityChan]-[Animators]にAnimation ControllerのUnityChanLocomotionsがあります。 これをドラッグし、unitychanのInspectorにあるControllerに設定します。 これで、「ユニティちゃん」はUnityChanLocomotionsで定義されたアニメーションを行うことが可能となります。
ここで、UnityChanLocomotionsの内容を確認してみましょう。 Animation Controllerは下図のようにグラフで定義されます。 まずは、Entryから始まり、Idle状態に遷移することが分かります。
Idle状態のInspectorを確認すると、 MotionにWAIT00が設定されていることが分かります。 このWAIT00が3Dモデルの動きに対応します。 また、Idle状態から、Locomotion状態、WalkBack状態、Rest状態の 3つの状態に遷移可能なことが分かります。
では、Idle状態から他の状態に遷移するための条件は何でしょうか。 TransitionsのIdle -> Restをクリックすると、状態遷移のための条件(Conditions)が表示されます。 ここでは、Restという変数(パラメータ)がtrueであるときにRest状態に遷移することが分かります。 同様に、Locomotions状態に遷移する条件は、Speedが0.1より大きいとき、 また、WalkBack状態に遷移する条件は、Speedが-0.1より小さいときということが分かります。 このように変数(パラメータ)に基づき、3Dモデルの状態が確定します。
スクリプトによる状態遷移の制御
次に、C#スクリプトを作成し、キーボードからの入力に応じて状態遷移を制御してみます。 まずは、[Create]-[C# Script]をクリックして、新規にC#のスクリプトを作成します。 ファイル名はARAnimationsとしておきます。
まずは、キーボードの1を押すとRest状態に遷移するようにしてみます。 キーの入力判定はInput.GetKey()メソッドを利用します。 引数にはstring型で対象となるキーを指定します。 また、状態遷移のトリガーとなる変数Restの値を設定するには、 SetBool()メソッドを利用します。 引数には、String型で対象となる変数と、その値を指定します。 再生ボタンをクリックして、「ユニティちゃん」を表示した状態で、キーボードの1を押してみましょう。 ユニティちゃんが背伸びをするアニメーションが表示されるはずです。
次に、キーボードの2を押すとLocomotions状態、3を押すとWalkBack状態、 4を押すとIdle状態に遷移するようにしてみます。 トリガーとなる変数Speedはfloat型のため、SetFloat()メソッドを利用して値を変更しています。 再生ボタンをクリックして、「ユニティちゃん」を表示した状態で、キーボードの2、3、4を押してみましょう。 ユニティちゃんが走ったり、後ずさりするアニメーションが表示されるはずです。
これまでに紹介した機能を利用して、拡張現実を利用した作品を制作してみてください。