LoginSignup
8
7

More than 5 years have passed since last update.

Animationまとめ

Last updated at Posted at 2017-10-31

(BlendTree以外)

Mecanim

  • メリット
    • 人型のリグを認識して調整する
    • 他の人型キャラにアニメーションを使いまわせる
    • アニメーションの切り替えをスムーズにブレンドする

アニメーションシステム?を指していて、Mecanim画面とかがあるわけではない。

参考
UnityのMecanimでキャラクターを動かす

Animatorコンポーネント

Controller

アニメーションセットを配置・管理するためのもの。使い回しが効く。

スクリーンショット 2017-10-17 1.21.10.png

Avator

モデルにAvatorがついている場合はそれを選択する。
Legacyなどになっているモデルの場合は、Animation TypeをHumanoidに変更する。

スクリーンショット 2017-10-17 1.10.52.png

Avatarが生成される。

スクリーンショット 2017-10-17 1.11.01.png

Apply Root Motion

positionの変更が組み込まれている場合、移動するかどうか

Update Mode

モード 内容
Normal Time.timeScaleの影響を受ける
Animate Physics 物理演算の影響を受ける
Unscaled Time Time.timeScaleの影響を受けない

Culling Mode

見えていない時にアニメーションさせるかどうか

Animation Clip

Animation Events

AnimationEvents_.png

チュートリアルのサバイバルシューターを見てみると、StartSinkingがアニメーションイベントとわかる。このAnimationClipをもつゲームオブジェクトに、StartSinking関数をもったスクリプトがアタッチされていて、それをコールしている。死亡アニメーションの途中で床に沈み始めてほしいという意図だろう。アニメーションの最後につければ、終了時のイベントをとることもできる。

※注意点

Aアニメーションが終了する前に
Bアニメーションが始まってしまうと
Aアニメーションの終了するタイミングがなくなってしまう
(アニメーションイベントが発生しない)

なので実際の業務では、
前のフレームのアニメーションを取得し続け、
今のフレームのアニメーションと照らし合わせてステートを判定しているらしい

参考
Unity : AnimationClipに合わせて処理をしたいなら

Animator Controller

State

スクリーンショット 2017-10-17 13.08.44.png

アニメーションデータ(AnimationClip)をアニメーターウィンドウにドラッグ&ドロップするとステートがつくられる。

オレンジ色が最初のステート。右クリックからのSet as Layer Default Stateで、最初のステートを切り替えられる。

Any State

どのステートからでも遷移できるステート。ステートの遷移先にすることはできない。ex.「Any State」->「ダメージを受ける」

Transition

Stateの上で右クリックし、Make Transitionを選び、次のステートへつなげる。

Transition(矢印)をクリックして、ConditionsやExitTimeの設定をする。

※削除する場合はインスペクタのTransitionsからマイナスボタンを押さないといけない。

スクリーンショット 2017-10-17 13.18.57.png

Parameters

アニメーション切り替え条件のパラメータを設定する。

追加は以下のプラスボタンから
スクリーンショット 2017-10-17 13.03.32.png

「歩く」「走る」などじわじわ値を変えていって閾値を越えたかどうかの判定にはFloatを使う。

「ジャンプ」「攻撃」など、一回だけ実行したい時にはTriggerを使う。公式のサンプルでは「死亡した」ときにanimator.SetTrigger("Die");のように使っている。Triggerは1フレームtrueを実行したらfalseに戻る。一方Boolは、セットしたbool値を維持する。

1回だけ実行してフラグを元に戻したい場合は、Triggerを使って以下のようにシンプルに書くことができる。

Bool型でジャンプ処理を書く
if(Input.GetKeyDown(KeyCode.Space)) {
    animator.SetBool("Jump", true);
} else {
    animator.SetBool("Jump", false);
    // falseに戻さないとずっとジャンプしている
}
Trigger型でジャンプ処理を書く
if(Input.GetKeyDown(KeyCode.Space)) {
    animator.SetTrigger("Jump");
}

参考
【Unity7】プレイヤーのAnimator Controllerを設定したい!【ローグライク8】

Conditions

アニメーションの切り替え条件。パラメータから設定する。

ExitTime

Has Exit Timeにチェックを入れると、パラメータではなくアニメーションの再生回数(Exit Time)で遷移のタイミングを決める。

Fixed Duration

アニメーションがクロスする部分の度合いを、前のアニメーションの長さを元にパーセントで決めるか、秒数で決めるか。

参考
【Unity開発】Animator Controllerの遷移設定(Duration等)【ひよこエッセンス】

AnimatorOverrideController

スクリーンショット 2017-10-26 1.38.52.png

トランジション、ステートなどのロジックは同じで、複数キャラに使いまわしたい場合に使う。
ベースになるControllerを指定して、AnimationClipを差し替える。

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7