【UnityC#講座】ユニティちゃんでもっとAnimator Controllerを上手く使いたい


Unity2018.1.5f1
Windows10

【UnityC#講座】ユニティちゃんでもっとAnimator Controllerを上手く使いたい

【UnityC#講座】3D人型モデルの動かし方をユニティちゃんで学ぶ【Animator】

【UnityC#講座】ユニティちゃんをスカイリム風に操作する

今までAnimator Controllerを何度かいじってきたけどはっきり言って苦手です。
思うように動かないし機能が多すぎて覚えるのが大変。
今まで作ったものは待機状態のStateを中継にしていたからアニメーションの間にそれが入ってぎこちない動作になっていたんですよね・・・

でももっとユニティちゃんを滑らかに動かしたい!

というわけで色々探した結果、

・Any State
・Animator.Play
・Animator.CrossFade

ここら辺を上手に使えば良さそうなので今回試してみました!

■Any State

Any StateはAnimator Controller内にあるエメラルドグリーン(?)のState(Animation Controller内の四角い部分)です。

Animator Controller/Any State

これからTransition(Stateをつなぐ矢印)でつないだStateはどこからでも呼び出せます。

試行錯誤した結果このような形に落ち着きました。

Animator Controller/Any State/全体

Parametersはすべてboolです。
各TransitionのHas Exit TimeとSettingsのCan Transition Toのチェックを外しました。
Can Transition ToはAny Stateから伸びるTransitionにしかありません。

Animator Controller/Any State/Has Exit TimeとSettingsのCan Transition To

スクリプトはこちらです。

これだけだとFront、Back、Right、LeftからTransitionを出す必要はなさそうに思えますが、そこでHas Exit Timeのチェックを外しておかないとアニメーションが最後まで再生されてしまいます。

それで結果はこちら。

Animator Controller/Any State/ユニティちゃん

いかがでしょうか。
私にとっては今までよりも滑らかに遷移しているので満足です。

ちなみにCan Transition Toのチェックを入れるとこうなります。

Animator Controller/Any State/ユニティちゃん/Can Transition To

Any Stateとつながっている後ろ歩きと左右移動のアニメーションがおかしくなっています。
これは絶え間なくAny Stateからアニメーションを再生させられているからです。

■Animator.Play

Animator.PlayはStateがどこにあっても、他のアニメーションの途中でもスクリプトからアニメーションを再生できます。
ならばこのような配置で十分かと思ったら・・・

Animator Controller/Animator.Play

こんなことに!

Animator Controller/Animator.Play/ユニティちゃん

連続で使うには向かないようです。
ちなみにスクリプトはこんな感じにしました。

スポンサーリンク

普通の移動のためには使えない。
では何に使えるのかと思ったらあるサイトではダメージを受けた時や攻撃をキャンセルする時に良いとありましたのでこんな風にしてみました。

Animator Controller/Animator.Play/Damage

マウス右クリックでダメージを受けたアニメを出すようにしました。

Animator Controller/Animator.Play/ユニティちゃん/Damage

いずれモンスターと戦う時に使うようにします。

■Animator.CrossFade

Animator.CrossFadeはアニメーションにかかる時間やアニメーションを途中から始めることができます。
試しにボタン押しっぱなしで移動することに使えるか試してみたらボタン押している間はストップしていて使えませんでした。
代わりに走っているところからジャンプせることで実験します。

Animator.CrossFadeはこのようにスクリプトに記述します。

animator.CrossFade(“Stateの名前”, 0.0f, 0, 0.0f);

引数が4つありますが上から順にこうなっています。

・Stateの名前
・アニメーションにかかる時間
・レイヤー数
・アニメーションをどこから始めるか(0~1)

Animator Controllerとスクリプトはこのようにしました。

Animator Controller/Animator.CrossFade

さてまずfirstからいじってみましょう。

animator.CrossFade(“Jump”, 0.0f, 0, 0.0f);

Animator Controller/ユニティちゃん/animator.CrossFade("Jump", 0.0f, 0, 0.0f);

これがプレーンな状態です。

animator.CrossFade(“Jump”, 0.5f, 0, 0.0f);

Animator Controller/ユニティちゃん/animator.CrossFade("Jump", 0.5f, 0, 0.0f);

かなりゆっくりになったと思います。
さらに・・・

animator.CrossFade(“Jump”, 1f, 0, 0.0f);

Animator Controller/ユニティちゃん/animator.CrossFade("Jump", 1f, 0, 0.0f);

かなりゆっくりになったしジャンプもほとんど変わらなくなりました。
単に遅くなるだけじゃないようです。

次はアニメーションを開始する場所を変えてみましょう。

animator.CrossFade(“Jump”, 0.0f, 0, 0.2f);

Animator Controller/ユニティちゃん/animator.CrossFade("Jump", 0.0f, 0, 0.2f);

少し突然ジャンプするようになりました。

animator.CrossFade(“Jump”, 0.0f, 0, 0.6f);

Animator Controller/ユニティちゃん/animator.CrossFade("Jump", 0.0f, 0, 0.6f);

もうジャンプの終わりだけです。
そして1にすると・・・

animator.CrossFade(“Jump”, 0.0f, 0, 1f);

Animator Controller/ユニティちゃん/animator.CrossFade("Jump", 0.0f, 0, 1f);

もうアニメーションが起こりさえしないのでした(笑)

Animator Controllerにはまだまだ色んな機能があるので少しずつ紹介していけたらと思っています。
では今回はここまで。
お疲れさまでした。

ユニティちゃんライセンス

この作品はユニティちゃんライセンス条項の元に提供されています

■関連記事

【UnityC#講座】ユニティちゃんの表情を替える【SetLayerWeight】

【UnityC#講座】AnimatorControllerを使いまわす【AnimatorOverrideController】

【UnityC#講座】AnimatorControllerの使い方

スポンサーリンク

目次に戻る