OnCollisionEnterや演算ノードの使い方

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を確認の上、それでも使い方がわからない場合にご質問ください。欲しい機能の記載がドキュメントにない場合は機能が元から存在しない可能性が高いので要望フォーラムへ。

Forum rules
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を確認の上、それでも使い方がわからない場合にご質問ください。欲しい機能の記載がドキュメントにない場合は機能が元から存在しない可能性が高いので要望フォーラムへ。
AnEggJP
Posts: 10
Joined: 2017/07/22 04:41

OnCollisionEnterや演算ノードの使い方

Post by AnEggJP »

スミマセン恥ずかしながら初歩的な使い方が解りません。
https://drive.google.com/open?id=0B_sVQ ... XJwWW9FTTA
キャラクター(JC)がTag(cube)の上に乗ったらキャラクターのモーションを切り替えたいのですがよく解りません。
演算ノードのOnCollisionEnterTransitionなどもマニュアルをみても使い方がよく解らないのですが。。
Arbor2のバージョンは最新2.1.6
windows8.1です。
よろしくお願いします。
User avatar
caitsithware
管理人
Posts: 493
Joined: 2015/08/17 12:41

Re: OnCollisionEnterや演算ノードの使い方

Post by caitsithware »

ご確認していただきたい点が2点あります。

1つめ、Tag(cube)はCubeゲームオブジェクトに設定されていますか?

設定されていないとOnCollisionEnterTransitionでIs Check Tagのチェックを付けている場合は、相手のゲームオブジェクトに該当タグを設定しないと次のステートに遷移されません。

2つめ、OnCollisionEnterTransitionから遷移したステートにAnimatorStateTransitionが追加されていますが、ここではAnimatorでのステートに合わせて遷移させたいのではなくモーションを切り替えたいということでしょうか?

もしモーションを切り替えるのでしたら、AnimatorStateTransitionは削除し、代わりにAnimator/CalcAnimatorParameterを追加してください。
CalcAnimatorParameter
CalcAnimatorParameterはAnimatorのパラメータを変更するBehaviourですので、Animator側での遷移条件に合わせて値を設定するようにしてみてください。

この辺りは原則として、名前にTransitionとあるものは条件に従ってステート遷移する専用のBehaviourと覚えていただけると混乱しにくくなるかと思います。

また、今回の場合は演算ノードによる値の受け渡し等は必要なさそうです。
CollisionColliderCalculatorノードは削除してしまっても問題ないかと思います。

以上となります、ご確認よろしくお願いいたします。
AnEggJP
Posts: 10
Joined: 2017/07/22 04:41

Re: OnCollisionEnterや演算ノードの使い方

Post by AnEggJP »

残念ながら動作しませんでした( ノД`)

>1つめ、Tag(cube)はCubeゲームオブジェクトに設定されていますか?
https://www.dropbox.com/s/jfv5mqw2o339u ... 8.png?dl=0
CubeゲームオブジェクトをTag(cube)に設定しています。

>2つめ、OnCollisionEnterTransitionから遷移したステートにAnimatorStateTransitionが追加されていますが、ここではAnimatorでのステートに合わせて遷移させたいのではなくモーションを切り替えたいということでしょうか?

その通りなのですが動作しませんでした。
https://www.dropbox.com/s/no4tfwxwi86qy ... 4.png?dl=0

runステートに遷移しているようなのですが…(しない時もあり??)

OnCollisionEnterは常駐ステートの中にしかなく、
常駐ステートを作る事が正しいのかもよく解りません。

また次のステートは「開始ステート」になっているのですが
これでいいのかも判りません??
(通常ステートを新規に作る場合は「開始ステート」しかならないので)

ステートの作り方が悪いのか
何か設定が間違っているのかも解らないので(Animetorの遷移はBoolです)
申し訳ないのですがよろしくお願いします。
User avatar
caitsithware
管理人
Posts: 493
Joined: 2015/08/17 12:41

Re: OnCollisionEnterや演算ノードの使い方

Post by caitsithware »

スクリーンショットを見た感じ特に問題はなさそうですね・・・

張っていただいたスクリーンショットからは判断できないのでもし間違っていたら申し訳ないですが、
ほかのスクリプトなどで「移動処理中ならAnimatorのrunをtrueにする」ような処理が入っている場合も当然ながら上手く動作しないため、そちらも確認していただければと思います。
もしそういった処理がある場合はStateBehaviourを自作して移動処理を無効にする処理を追加しなければなりません。

ちなみに、コンポーネントそのものを無効にしても大丈夫であればSendEventGameObjectが使えます。
SendEventGameObject
OnStateBegin()の+ボタンを押してイベントを追加し、GameObjectを設定、Functionを無効にしたいコンポーネントのenabledを指定してチェックは付けないでいると該当ステートに遷移した瞬間にコンポーネントが無効になります。
他のステートに遷移した際に有効にしたい場合は有効にしたいステートにもSendEventGameObjectを追加しenabledのチェックを付ければ再び有効になります。

ひとまず今回の件については以上になります。ご確認よろしくお願いします。

最後に補足として、開始ステートや常駐ステートの使いどころについて簡単にですがまとめてみました。
よろしければこちらもご覧ください。

■開始ステート

ゲーム開始時やArborFSMが付いたオブジェクトが生成されたタイミングで一番最初に開始されるステートです。
いわばステートマシンの入り口的なステートになります。
たとえばモンスターが発生した時はよく発生モーションなどが再生されますが、その発生モーションの再生&終了待ちなどを開始ステートで処理するのが適しています。
特に発生モーションなどがない場合でも、一番初めにどういった状態かが重要です。
モンスターを例にすると最初はプレイヤーが近づくまで待機するんでしたら、近づいたら遷移する処理を開始ステートで行うようにします。

今回の場合ですと、開始ステートがCalcAnimatorParameterを処理するようになっていますが、特に開始時にAnimatorのrunを設定する必要がないのでしたら若干無駄な処理になってしまいますので、今一度、開始時がどういう状態かの見直しをしたほうがよいかもしれません。

■常駐ステート

通常のステートの遷移状況によらず、常に処理されつづける特殊なステートです。
たとえば、モンスターの現在ステート(巡回中や攻撃中など、いま行っている状態)に関係なく、HPが0になったら死亡モーションを再生して消したい場合があったとします。
この場合は、HPが0になったかどうかで遷移する常駐ステートを作成して死亡ステートに遷移、死亡ステートでは死亡モーション再生などの処理を行う。というのが適しているかと思います。
このように常駐ステートからの遷移を用いないと、巡回ステートでもHPチェック、攻撃ステートでもHPチェック、とすべてのステートに同じ処理を追加しないといけないため管理が大変になってしまいます。
そんな時に共通の遷移条件を常駐ステートにまとめておけるのが一番の使いどころです。

今回の場合ですと、ステートが2つしかないため特に常駐ステートでも問題ありませんが、後々他のステートが増えた時にもしcubeに触れても強制遷移させたくなく特定の状態の時のみ(例えば移動中の時のみなど)に遷移するのでしたら、
常駐ステートにせず普通のステートにOnCollisionEnterTransitionを付けてrunステートへ遷移する、という形でもよいかと思います。
また、現状の2ステートでいうと開始時はcubeに触れるまで待機するということでしたら、OnCollisionEnterTransitionのステートを開始ステートにするのが適しているということになります。

長くなってしまいましたが以上です、何かの参考になれば幸いです。
AnEggJP
Posts: 10
Joined: 2017/07/22 04:41

Re: OnCollisionEnterや演算ノードの使い方

Post by AnEggJP »

親切な回答有難う御座います。
自分としては狙撃されてそのあとのリアクションを取らせたい!
という考えでの実験だったので
シーンを作り直してもう一度チャレンジしたいと思います。
銃、弾丸を発射!(弾丸Tag) :arrow: それを受けてOnCollisionEnterもしくはOnTriggerEnter :arrow: アクション(モーションチェンジ)でやってみたいと思います。
長らくご迷惑をお掛けして申し訳御座いませんでした。
うまく使いこなせるように勉強します(^^;)
Post Reply