FSMの使い所もわからずにできればプログラミングを最小限の方向でと
Arbor3を遊ばせていただいています
Animatorを遷移させる方法を教えてください
やりたいことは
1 Idle状態のキャラクターがいて
2 タッチされたり、ボタンが押された時に
3 違うアニメーションに遷移させ
4 またIdleに戻したいです
Example 3(Animator)にある
AnyKeyDownTransition > AnimatorStateTransitionあたりを使えばいいのかといじってはいるのですが...
よろしくお願いいたします。
Animatorを遷移させる方法
Forum rules
Here is the forum to do the questions about how to use to Arbor developer.
Attention point:
ここは、Arbor開発者へ使い方に関する質問を行うフォーラムです。
注意点:
Here is the forum to do the questions about how to use to Arbor developer.
Attention point:
- We can not answer your questions about your project specific issues.
- We can not answer your questions on Unity's specification issues.
- Please check Arbor Documentation and ask a question if you still don't know how to use it. If the desired function is not described in the document, it is highly possible that the function does not exist from the beginning, so go to the request forum.
ここは、Arbor開発者へ使い方に関する質問を行うフォーラムです。
注意点:
- ユーザー様のプロジェクトの仕様上の問題や設計に対する質問には答えられません。
- Unityの仕様上の問題に対する質問には答えられません。
- Arbor Documentationを確認の上、それでも使い方がわからない場合にご質問ください。欲しい機能の記載がドキュメントにない場合は機能が元から存在しない可能性が高いので要望フォーラムへ。
- caitsithware
- 管理人
- Posts: 495
- Joined: 2015/08/17 12:41
Re: Animatorを遷移させる方法
Animatorの遷移方法についてですが、Animator側の組み方によっていくつか方法があります。
以下のどちらかの方法をお試しください。
- Animatorのパラメータを使って遷移
Animator側に追加したパラメータが遷移条件になっている場合は、CalcAnimatorParameterを使用してパラメータの値を変更してください。
たとえば、以下のような流れになります。- Animator側 : Idleステートと他のアニメーションステート(ひとまずTouchステートとします)、Touchパラメータを用意
(パラメータをどの型にするかは何をさせたいかによるため必要に応じて設定してください) - Animator側 : IdleステートからTouchステートに遷移し、遷移条件をTouchパラメータにする。
- Idle -> TouchはTriggerタイプのTouchパラメータで遷移。
- Touch -> IdleはHas Exit Time(アニメーションが終了したら)で遷移。
- ArborFSM側 : WaitTouchステートとChangeAnimステートを作成
- ArborFSM側 : WaitTocuhステートではAnyKeyDownTransitionなどで入力受付し、ChangeAnimステートへ遷移。
- ArborFSM側 : ChangeAnimステートでCalcAnimatorParameterを使用し、Touchパラメータを遷移条件に合致するように設定する。
- Idleステートに戻す条件に従って、元に戻す遷移も作成
(Animator側が自動的にIdleになったのに連動してArborFSM側も変える場合はAnimatorStateTransitionを使用)- Animator側をTriggerタイプ+Has Exit Timeにした関係で、Touchステートへの遷移完了待ちも追加。
- Animator側 : Idleステートと他のアニメーションステート(ひとまずTouchステートとします)、Touchパラメータを用意
- CrossFadeを使用して遷移
Animator側のステート同士が遷移設定されていない場合、AnimatorCrossFadeを使用して直接遷移させることができます。
たとえば、以下のような流れになります。- Animator側 : Idleステートと他のアニメーションステート(ひとまずTouchステートとします)を用意。
- IdleとTouchは接続する必要がない。
- ArborFSM側 : WaitTouchステートとChangeAnimステートを作成
- ArborFSM側 : WaitTocuhステートではAnyKeyDownTransitionなどで入力受付し、ChangeAnimステートへ遷移。
- ArborFSM側 : ChangeAnimステートでAnimatorCrossFadeを使用し、Animator側をTouchステートに遷移させる。
- Idleステートに戻す条件に従って、元に戻す遷移も作成
(Animator側が自動的にIdleになったのに連動してArborFSM側も変える場合はAnimatorStateTransitionを使用)- Idleステートに戻す条件として、ひとまず時間経過で遷移。
- Animator側 : Idleステートと他のアニメーションステート(ひとまずTouchステートとします)を用意。
Re: Animatorを遷移させる方法
早速のお返事ありがとうございます
ご丁寧に2つも示していただきありがとございます
どちらも試して思い通りの挙動を得ることができました
Animatorのクリップを複数にする場合は
それぞれにパラメーターを設定し
ArborFSMで
WaitTouchにKeyDownTransition等を複数つけて
そこからそれぞれのChangeAnimに遷移させ
WaitIdleに戻すということで実現できました
実際にやってみることでArborの理解が深まったように感じます
また質問させてくださいよろしくお願いいたします。
ありがとうございました
ご丁寧に2つも示していただきありがとございます
どちらも試して思い通りの挙動を得ることができました
Animatorのクリップを複数にする場合は
それぞれにパラメーターを設定し
ArborFSMで
WaitTouchにKeyDownTransition等を複数つけて
そこからそれぞれのChangeAnimに遷移させ
WaitIdleに戻すということで実現できました
実際にやってみることでArborの理解が深まったように感じます
また質問させてくださいよろしくお願いいたします。
ありがとうございました
Re: Animatorを遷移させる方法
何度もすいません
2つ目に示していただいた方法のWaitTouchステートを常駐にしKeyDownTransitionを3つつけ
それぞれの割当KeyでAnimatorCrossFadeに飛ぶようにすると
続けてKeyを押しても割り込んで別のアニメーションをするということができたのですが
そのような方法でもあっていますでしょうか?
その時、BackToIdleステートはAnimatorCrossFadeまででよろしいのでしょうか?
それともCoinPusherのSaucerのようにTimeTransitionをGoToTransitionにして
NewStateに遷移させておいたほうが良いのでしょうか?
急いでおりませんのでお時間のある時に目を通していただけると幸いです
よろしくお願いいたします。
2つ目に示していただいた方法のWaitTouchステートを常駐にしKeyDownTransitionを3つつけ
それぞれの割当KeyでAnimatorCrossFadeに飛ぶようにすると
続けてKeyを押しても割り込んで別のアニメーションをするということができたのですが
そのような方法でもあっていますでしょうか?
その時、BackToIdleステートはAnimatorCrossFadeまででよろしいのでしょうか?
それともCoinPusherのSaucerのようにTimeTransitionをGoToTransitionにして
NewStateに遷移させておいたほうが良いのでしょうか?
急いでおりませんのでお時間のある時に目を通していただけると幸いです
よろしくお願いいたします。
- caitsithware
- 管理人
- Posts: 495
- Joined: 2015/08/17 12:41
Re: Animatorを遷移させる方法
最終的にどういったことがやりたいかによりますので、「仕様に合わせた理想的なステートマシンにできているか」や「作成されたステートマシンの細部のデバッグ」などにつきましては各自ユーザー様にお任せしております。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を遷移させる方法
早速のご返信にわかりやすい解説ありがとうございます。
常駐ステートの使用方法が理解できました
何を実行しているのかが目で見てわかり日本語で質問できるArborは
自分の様なものにはとてもありがたい存在です
今後とも宜しくお願いします
常駐ステートの使用方法が理解できました
何を実行しているのかが目で見てわかり日本語で質問できるArborは
自分の様なものにはとてもありがたい存在です
今後とも宜しくお願いします