Page 1 of 1

Animatorを遷移させる方法

Posted: 2019/03/31 20:53
by KSDdesign
FSMの使い所もわからずにできればプログラミングを最小限の方向でと
Arbor3を遊ばせていただいています

Animatorを遷移させる方法を教えてください
やりたいことは
1 Idle状態のキャラクターがいて
2 タッチされたり、ボタンが押された時に
3 違うアニメーションに遷移させ
4 またIdleに戻したいです

Example 3(Animator)にある
AnyKeyDownTransition > AnimatorStateTransitionあたりを使えばいいのかといじってはいるのですが...
よろしくお願いいたします。

Re: Animatorを遷移させる方法

Posted: 2019/03/31 23:36
by caitsithware
KSDdesign wrote: 2019/03/31 20:53 Animatorを遷移させる方法を教えてください
Animatorの遷移方法についてですが、Animator側の組み方によっていくつか方法があります。
以下のどちらかの方法をお試しください。
  • Animatorのパラメータを使って遷移
    Animator側に追加したパラメータが遷移条件になっている場合は、CalcAnimatorParameterを使用してパラメータの値を変更してください。
    たとえば、以下のような流れになります。
    1. Animator側 : Idleステートと他のアニメーションステート(ひとまずTouchステートとします)、Touchパラメータを用意
      (パラメータをどの型にするかは何をさせたいかによるため必要に応じて設定してください)
    2. Animator側 : IdleステートからTouchステートに遷移し、遷移条件をTouchパラメータにする。
      CalcAnimatorParameter_Animator.png
      CalcAnimatorParameter_Animator.png (29.35 KiB) Viewed 6998 times
      • Idle -> TouchはTriggerタイプのTouchパラメータで遷移。
      • Touch -> IdleはHas Exit Time(アニメーションが終了したら)で遷移。
    3. ArborFSM側 : WaitTouchステートとChangeAnimステートを作成
    4. ArborFSM側 : WaitTocuhステートではAnyKeyDownTransitionなどで入力受付し、ChangeAnimステートへ遷移。
    5. ArborFSM側 : ChangeAnimステートでCalcAnimatorParameterを使用し、Touchパラメータを遷移条件に合致するように設定する。
    6. Idleステートに戻す条件に従って、元に戻す遷移も作成
      (Animator側が自動的にIdleになったのに連動してArborFSM側も変える場合はAnimatorStateTransitionを使用)
      CalcAnimatorParameter_ArborFSM.png
      CalcAnimatorParameter_ArborFSM.png (91.95 KiB) Viewed 6998 times
      • Animator側をTriggerタイプ+Has Exit Timeにした関係で、Touchステートへの遷移完了待ちも追加。
  • CrossFadeを使用して遷移
    Animator側のステート同士が遷移設定されていない場合、AnimatorCrossFadeを使用して直接遷移させることができます。
    たとえば、以下のような流れになります。
    1. Animator側 : Idleステートと他のアニメーションステート(ひとまずTouchステートとします)を用意。
      AnimatorCrossFade_Animator.png
      AnimatorCrossFade_Animator.png (24.35 KiB) Viewed 6998 times
      • IdleとTouchは接続する必要がない。
    2. ArborFSM側 : WaitTouchステートとChangeAnimステートを作成
    3. ArborFSM側 : WaitTocuhステートではAnyKeyDownTransitionなどで入力受付し、ChangeAnimステートへ遷移。
    4. ArborFSM側 : ChangeAnimステートでAnimatorCrossFadeを使用し、Animator側をTouchステートに遷移させる。
    5. Idleステートに戻す条件に従って、元に戻す遷移も作成
      (Animator側が自動的にIdleになったのに連動してArborFSM側も変える場合はAnimatorStateTransitionを使用)
      AnimatorCrossFade_ArborFSM.png
      AnimatorCrossFade_ArborFSM.png (102.19 KiB) Viewed 6998 times
      • Idleステートに戻す条件として、ひとまず時間経過で遷移。
参考リンク

Re: Animatorを遷移させる方法

Posted: 2019/04/01 22:13
by KSDdesign
早速のお返事ありがとうございます
ご丁寧に2つも示していただきありがとございます
どちらも試して思い通りの挙動を得ることができました

Animatorのクリップを複数にする場合は
それぞれにパラメーターを設定し
ArborFSMで
WaitTouchにKeyDownTransition等を複数つけて
そこからそれぞれのChangeAnimに遷移させ
WaitIdleに戻すということで実現できました

実際にやってみることでArborの理解が深まったように感じます
また質問させてくださいよろしくお願いいたします。
ありがとうございました

Re: Animatorを遷移させる方法

Posted: 2019/04/02 12:57
by KSDdesign
何度もすいません
2つ目に示していただいた方法のWaitTouchステートを常駐にしKeyDownTransitionを3つつけ
それぞれの割当KeyでAnimatorCrossFadeに飛ぶようにすると
続けてKeyを押しても割り込んで別のアニメーションをするということができたのですが

そのような方法でもあっていますでしょうか?

その時、BackToIdleステートはAnimatorCrossFadeまででよろしいのでしょうか?
それともCoinPusherのSaucerのようにTimeTransitionをGoToTransitionにして
NewStateに遷移させておいたほうが良いのでしょうか?


急いでおりませんのでお時間のある時に目を通していただけると幸いです
よろしくお願いいたします。

Re: Animatorを遷移させる方法

Posted: 2019/04/02 14:21
by caitsithware
KSDdesign wrote: 2019/04/02 12:57 何度もすいません
2つ目に示していただいた方法のWaitTouchステートを常駐にしKeyDownTransitionを3つつけ
それぞれの割当KeyでAnimatorCrossFadeに飛ぶようにすると
続けてKeyを押しても割り込んで別のアニメーションをするということができたのですが

そのような方法でもあっていますでしょうか?

その時、BackToIdleステートはAnimatorCrossFadeまででよろしいのでしょうか?
それともCoinPusherのSaucerのようにTimeTransitionをGoToTransitionにして
NewStateに遷移させておいたほうが良いのでしょうか?


急いでおりませんのでお時間のある時に目を通していただけると幸いです
よろしくお願いいたします。
最終的にどういったことがやりたいかによりますので、「仕様に合わせた理想的なステートマシンにできているか」や「作成されたステートマシンの細部のデバッグ」などにつきましては各自ユーザー様にお任せしております。
ひとまず動作しているということなので、こちらからは特に問題はなさそうかと思いますがいかがでしょうか。

補足

常駐ステートは、例えば「ダメージを受けたらダメージモーションを取る」を、「常駐ステートでダメージ待機→ダメージモーションステート(他ステートを実行中でも強制的にダメージ処理)」というような使用方法を想定して実装しております。
どのようにご利用いただくかは自由ですが、常駐ステートを使用すべきかの判断に迷ったときにでも参考にしてみてください。

CoinPusherサンプルについては、Arborのバージョンが古い時に作られたのもあり、必ずしもこういう造りでないと動作しないというわけではないので、あくまで参考程度に見ていただければと思います。
(実際チュートリアル版CoinPusherではSaucer部分に常駐ステートは使用せずに同じ動作を作成しています)

Re: Animatorを遷移させる方法

Posted: 2019/04/02 15:04
by KSDdesign
早速のご返信にわかりやすい解説ありがとうございます。
常駐ステートの使用方法が理解できました

何を実行しているのかが目で見てわかり日本語で質問できるArborは
自分の様なものにはとてもありがたい存在です
今後とも宜しくお願いします