(BlendTree以外)
Mecanim
- メリット
- 人型のリグを認識して調整する
- 他の人型キャラにアニメーションを使いまわせる
- アニメーションの切り替えをスムーズにブレンドする
アニメーションシステム?を指していて、Mecanim画面とかがあるわけではない。
Animatorコンポーネント
Controller
アニメーションセットを配置・管理するためのもの。使い回しが効く。
Avator
モデルにAvatorがついている場合はそれを選択する。
Legacyなどになっているモデルの場合は、Animation TypeをHumanoid
に変更する。
Avatarが生成される。
Apply Root Motion
positionの変更が組み込まれている場合、移動するかどうか
Update Mode
モード | 内容 |
---|---|
Normal | Time.timeScaleの影響を受ける |
Animate Physics | 物理演算の影響を受ける |
Unscaled Time | Time.timeScaleの影響を受けない |
Culling Mode
見えていない時にアニメーションさせるかどうか
Animation Clip
Animation Events
チュートリアルのサバイバルシューターを見てみると、StartSinking
がアニメーションイベントとわかる。このAnimationClipをもつゲームオブジェクトに、StartSinking
関数をもったスクリプトがアタッチされていて、それをコールしている。死亡アニメーションの途中で床に沈み始めてほしいという意図だろう。アニメーションの最後につければ、終了時のイベントをとることもできる。
※注意点
Aアニメーションが終了する前に
Bアニメーションが始まってしまうと
Aアニメーションの終了するタイミングがなくなってしまう
(アニメーションイベントが発生しない)
なので実際の業務では、
前のフレームのアニメーションを取得し続け、
今のフレームのアニメーションと照らし合わせてステートを判定しているらしい
Animator Controller
State
アニメーションデータ(AnimationClip)をアニメーターウィンドウにドラッグ&ドロップするとステートがつくられる。
オレンジ色が最初のステート。右クリックからのSet as Layer Default State
で、最初のステートを切り替えられる。
Any State
どのステートからでも遷移できるステート。ステートの遷移先にすることはできない。ex.「Any State」->「ダメージを受ける」
Transition
Stateの上で右クリックし、Make Transition
を選び、次のステートへつなげる。
Transition(矢印)をクリックして、ConditionsやExitTimeの設定をする。
※削除する場合はインスペクタのTransitions
からマイナスボタンを押さないといけない。
Parameters
アニメーション切り替え条件のパラメータを設定する。
「歩く」「走る」などじわじわ値を変えていって閾値を越えたかどうかの判定にはFloat
を使う。
「ジャンプ」「攻撃」など、一回だけ実行したい時にはTrigger
を使う。公式のサンプルでは「死亡した」ときにanimator.SetTrigger("Die");
のように使っている。Trigger
は1フレームtrueを実行したらfalseに戻る。一方Bool
は、セットしたbool値を維持する。
1回だけ実行してフラグを元に戻したい場合は、Trigger
を使って以下のようにシンプルに書くことができる。
if(Input.GetKeyDown(KeyCode.Space)) {
animator.SetBool("Jump", true);
} else {
animator.SetBool("Jump", false);
// falseに戻さないとずっとジャンプしている
}
if(Input.GetKeyDown(KeyCode.Space)) {
animator.SetTrigger("Jump");
}
Conditions
アニメーションの切り替え条件。パラメータから設定する。
ExitTime
Has Exit Time
にチェックを入れると、パラメータではなくアニメーションの再生回数(Exit Time)で遷移のタイミングを決める。
Fixed Duration
アニメーションがクロスする部分の度合いを、前のアニメーションの長さを元にパーセントで決めるか、秒数で決めるか。
AnimatorOverrideController
トランジション、ステートなどのロジックは同じで、複数キャラに使いまわしたい場合に使う。
ベースになるControllerを指定して、AnimationClipを差し替える。