UnityのAnimator ControllerのSpeed、Mirror、Foot IK項目

記事内に広告が含まれています。

今回はAnimator ControllerのState(状態)の項目にあるSpeed、Mirror、Foot IK項目を見てみたいと思います。

AnimatorStateのFootIK項目

Speedはこの状態でのアニメーションクリップの再生速度でスクリプトから変更するにはAnimatorControllerからAnimatorStateを取得し変更します。

Mirror項目はチェックを入れるとアニメーションが反対になります。

Foot IKは足のIKを有効にします。

MirrorとFoot IKはAnimation TypeがHumanoidに設定されている場合だけ有効になります。

その他の項目についてはよくわからなかったので説明は除外させて頂きます・・・・(^_^;)

スポンサーリンク

Foot IK

さてFoot IK項目ですがこれは文字を見る限り足のIKを有効にするということみたいです。

IKはInverse Kinematicsの略で手や足の位置や角度に応じて腕や太もも等が連動して動く機能ですね。

IKに関しては

UnityのIKを使って物を運ぶアニメーション
UnityのIKを使ってキャラクターが物を運んでいるようなアニメーションを作成していきます。

等を参照してください。

AnimatorStateのFoot IKは足にIKを働かせる為の項目のようです。

例えばStandardAssetsに入っているキャラクターEthanに使われているIdleというアニメーションは足を微妙に横にずらしています。

AnimatorControllerを作りIdleという状態を作ってこのアニメーションクリップを設定してみると、

AnimatorStateのFootIKをオフ

↑のように足元が左右に揺れているのがわかります。

AnimatorControllerのIdleのFoot IKのチェックを入れると

AnimatorStateのFootIKをオン

↑のように足元がIKで固定され動かなくなります。

スクリプトからStateの設定を変更する

ゲーム中に個々の状態でのアニメーションの再生速度やミラーの設定等を変更したい事もあると思いますので、スクリプトから操作してみましょう。

キャラクターには移動スクリプトとAnimatorControllerの設定をしておきます。

AnimatorControllerの設定

AnimatorControllerの遷移は

AnimatorStateの項目操作用AnimatorController

↑のような遷移を作っておきます。

アニメーションパラメータにFloat型のSpeed、Trigger型のJumpを作成します。

Idle→WalkはSpeedが0.1より上
Walk→IdleはSpeedが0.1より下
Idle→JumpはJump
Walk→JumpはJump
Jump→Idleは条件はなしです。

Jump→IdleだけHas Exit Timeにチェックを入れ、その他はチェックを外しておきます。

キャラ移動とAnimatorStateの項目を操作するスクリプト

次に移動とジャンプが出来るキャラクターにAnimatorStateの項目を操作するスクリプトを作成します。

キャラクターの移動スクリプトに関しては

Unityでキャラクターの移動をプログラミングしてみる
Unityで3Dキャラクターモデルを配置し、キャラクターをCharacterControllerの機能を使って移動させるようなプログラミングをしてみます。

ジャンプに関しては

Unityでキャラクターがジャンプ出来るようにする
Unityのゲームでキャラクターがジャンプ出来るようにする機能を作成します。

を参照してください。

AnimatorStateの部分を見てみましょう。

Startメソッドでanimator.runtimeAnimatorControllerをキャストしAnimatorControllerを取得します。

取得したAnimatorControllerのレイヤーを取得し、そのレイヤー群からBase Layerという名前のレイヤーを探します。

レイヤーが見つかったらその中のWalkという状態を探しstateフィールドに保持しておきます。

保持したAnimatorStateを使って項目を操作します。

項目を操作しているのがUpdateメソッドの中で

マウスの対応するボタンを押した時に保持しているAnimatorStateの項目を操作しています。

左クリックした時はstate.speedが1fの時は2fにそれ以外の時は1fに設定しています。

見慣れない構文だと思った方もいるかもしれませんが、

(条件式) ? 条件式がtrueの時に返す値 : 条件式がfalseの時に返す値

という風になっているのでstate.speedが1fだった時は2fが返ってきてそれをstate.speedに代入しています。

普通のif文を使って書き換えても問題はありません・・・・(._.)

マウスの右クリック、スクロールボタンのクリックではFoot IK、Mirror項目のオン・オフをしています。

それぞれのAnimatorStateを変更するとAnimatorの状態をリバインドする必要があるので、

animator.Rebind();

を呼び出しています。

これでスクリプトが出来たので実行して確認してみましょう。

↑のようになりました。

正直なところWalk状態のFoot IKをオンにしたり、Mirrorにチェックを入れても解り辛いですね・・・(^_^;)

Foot IKはIdle、MirrorはJumpで確認した方がよかったですが、各自お願い致します。(._.)

タイトルとURLをコピーしました