主なコンテンツ

〜主なコンテンツ〜

1. Unityで製作したゲームと製作Tips
  1. 三月精チャレンジ(東方Project二次創作)
    1. 作り方
  2. 英語学習2D(オリジナルスマホアプリ)
2. UE4
3. ゲームアプリ見学
4. Bitbucket & SourceTreeでの一連の流れ
  1. 前半
  2. 後半
5. Tips
  1. UnityのTips
  5. SQL文のTips
  6. Final IK
  7. GearVR+Unity

2016年6月20日月曜日

AnimatorのInterrupt Sourceについて

意外とヒットモーション時に足を止めるようにするのが難しかった。最初はAnimatorStateInfoでアニメーションの終了を検出しようとしたが、ステートの遷移が含まれると正確に判断できないため断念した。これは2Dのように遷移を補完しないアニメーション向けのようである。

次にノックバックなどのアニメーションクリップの再生時間を取得し、Invokで再生時間後にストップを解除しようとした。しかし、Animatorの再生速度を加味する必要があったのでこれも断念した。

最終的にアニメーションイベントでストップを解除するようにした。ただし、ヒット中にもう一度攻撃を受けると、ステート推移の影響でアニメーションイベントがギリギリ読み込まれる事態が生じてしまった。

つまり、
  1. 1回目のヒットアニメーション冒頭でストップフラグが立つ
  2. → 2回目のヒットアニメーション冒頭でヒットでストップフラグが立つ
  3. →1回目のアニメーション終了時のイベントがギリギリ読み込まれ、ストップフラグが解除される
となり、2回目のヒットアニメーション中の途中から動けるようになってしまった。AnyStateからの推移はCan Transition to Selfにチェックを入れてある。長いことAnyStateを疑っていたが、問題はヒットモーションから待機状態に戻る際にInterrupt SourceがNoneになっていることだった。つまり、ヒットモーションから待機状態に遷移する際に、この遷移が中断されないせいで待機アニメーション終了時に仕込んだアニメーションイベントが呼ばれていた
Interrupt Sourceについては公式マニュアル参照。とりあえず中断させたければ、None以外にすれば良さそう。今回は、ヒットモーションを繰り返して欲しかったのでCurrent State then Next Stateにした。


これにより、いわゆるハメの状態が可能に。処理としてはこちらの方が正しい。あとはハメ対策としてダウン値を設けるなどの工夫をすれば良い。

0 件のコメント:

コメントを投稿