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を押してみましょう. ユニティちゃんが走ったり,後ずさりするアニメーションが表示されるはずです.
これまでに紹介した機能を利用して,拡張現実を利用した作品を制作してみてください.