Unity2018.1.5f1
Windows10
□
【UnityC#講座】3D人型モデルの動かし方をユニティちゃんで学ぶ【Animator】
【UnityC#講座】ユニティちゃんをスカイリム風に操作する
今までAnimator Controllerを何度かいじってきたけどはっきり言って苦手です。
思うように動かないし機能が多すぎて覚えるのが大変。
今まで作ったものは待機状態のStateを中継にしていたからアニメーションの間にそれが入ってぎこちない動作になっていたんですよね・・・
でももっとユニティちゃんを滑らかに動かしたい!
というわけで色々探した結果、
・Any State
・Animator.Play
・Animator.CrossFade
ここら辺を上手に使えば良さそうなので今回試してみました!
■Any State
Any StateはAnimator Controller内にあるエメラルドグリーン(?)のState(Animation Controller内の四角い部分)です。
これからTransition(Stateをつなぐ矢印)でつないだStateはどこからでも呼び出せます。
試行錯誤した結果このような形に落ち着きました。
Parametersはすべてboolです。
各TransitionのHas Exit TimeとSettingsのCan Transition Toのチェックを外しました。
Can Transition ToはAny Stateから伸びるTransitionにしかありません。
スクリプトはこちらです。
これだけだとFront、Back、Right、LeftからTransitionを出す必要はなさそうに思えますが、そこでHas Exit Timeのチェックを外しておかないとアニメーションが最後まで再生されてしまいます。
それで結果はこちら。
いかがでしょうか。
私にとっては今までよりも滑らかに遷移しているので満足です。
ちなみにCan Transition Toのチェックを入れるとこうなります。
Any Stateとつながっている後ろ歩きと左右移動のアニメーションがおかしくなっています。
これは絶え間なくAny Stateからアニメーションを再生させられているからです。
■Animator.Play
Animator.PlayはStateがどこにあっても、他のアニメーションの途中でもスクリプトからアニメーションを再生できます。
ならばこのような配置で十分かと思ったら・・・
こんなことに!
連続で使うには向かないようです。
ちなみにスクリプトはこんな感じにしました。
スポンサーリンク
普通の移動のためには使えない。
では何に使えるのかと思ったらあるサイトではダメージを受けた時や攻撃をキャンセルする時に良いとありましたのでこんな風にしてみました。
マウス右クリックでダメージを受けたアニメを出すようにしました。
いずれモンスターと戦う時に使うようにします。
■Animator.CrossFade
Animator.CrossFadeはアニメーションにかかる時間やアニメーションを途中から始めることができます。
試しにボタン押しっぱなしで移動することに使えるか試してみたらボタン押している間はストップしていて使えませんでした。
代わりに走っているところからジャンプせることで実験します。
Animator.CrossFadeはこのようにスクリプトに記述します。
animator.CrossFade(“Stateの名前”, 0.0f, 0, 0.0f);
引数が4つありますが上から順にこうなっています。
・Stateの名前
・アニメーションにかかる時間
・レイヤー数
・アニメーションをどこから始めるか(0~1)
Animator Controllerとスクリプトはこのようにしました。
さてまずfirstからいじってみましょう。
animator.CrossFade(“Jump”, 0.0f, 0, 0.0f);
これがプレーンな状態です。
animator.CrossFade(“Jump”, 0.5f, 0, 0.0f);
かなりゆっくりになったと思います。
さらに・・・
animator.CrossFade(“Jump”, 1f, 0, 0.0f);
かなりゆっくりになったしジャンプもほとんど変わらなくなりました。
単に遅くなるだけじゃないようです。
次はアニメーションを開始する場所を変えてみましょう。
animator.CrossFade(“Jump”, 0.0f, 0, 0.2f);
少し突然ジャンプするようになりました。
animator.CrossFade(“Jump”, 0.0f, 0, 0.6f);
もうジャンプの終わりだけです。
そして1にすると・・・
animator.CrossFade(“Jump”, 0.0f, 0, 1f);
もうアニメーションが起こりさえしないのでした(笑)
□
Animator Controllerにはまだまだ色んな機能があるので少しずつ紹介していけたらと思っています。
では今回はここまで。
お疲れさまでした。
この作品はユニティちゃんライセンス条項の元に提供されています
■関連記事
【UnityC#講座】ユニティちゃんの表情を替える【SetLayerWeight】
【UnityC#講座】AnimatorControllerを使いまわす【AnimatorOverrideController】
【UnityC#講座】AnimatorControllerの使い方
スポンサーリンク