FSMで状態遷移したタイミングだけで衝突をとりたい

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

FSMで状態遷移したタイミングだけで衝突をとりたい

Post by Einst »

こんにちは、Arborはじめて2日目の初心者です。

状態遷移したタイミングでColliderに触れているかどうかを判断するのに良い方法はありませんか?
剣が握られる、握られてない(手離す)という状態で、離したタイミングでさやに触れていたらさやに
収めるなどを作る場合どうすれば良いでしょうか?

OnTriggerEnterTransitionなどで、さや格納状態に遷移させるのも考えたのですが。剣を落とした状態
で、さやを握って剣に触れさせるとさやに入ってしまします。

OnStateBeginのタイミングで衝突判定するとか
OnTriggerEnterTransitionを初回状態遷移時のみ有効にするとか
何か良い方法はありませんか?
User avatar
caitsithware
管理人
Posts: 495
Joined: 2015/08/17 12:41

Re: FSMで状態遷移したタイミングだけで衝突をとりたい

Post by caitsithware »

ステートと衝突判定のタイミングに関するご質問ですね。
Einst wrote: 2020/01/14 13:41 剣が握られる、握られてない(手離す)という状態で、離したタイミングでさやに触れていたらさやに
収めるなどを作る場合どうすれば良いでしょうか?
「離したタイミング」という一瞬のみの判定でしたら、「鞘に収めるチェックステート」を作成し、OnTriggerEnterTransitionやOnTriggerStayTransitionとTimeTransitionを組み合わせてみるというのはいかがでしょうか。
  • OnTriggerEnterTransitionやOnTriggerStayTransitionではチェック対象のTagを鞘に限定し、触れているようであれば「収めるステート」に遷移。
  • TimeTransitionでは数フレーム分(ほぼ一瞬)待ってから「離したステート」に遷移。
という感じです。
Einst wrote: 2020/01/14 13:41 OnStateBeginのタイミングで衝突判定するとか
OnStateBeginのタイミングでの衝突判定については、Unityの仕様上の話となります。
Physics.Raycastなどの判定メソッドを使用したり、別途Trigger系イベントをプーリングするスクリプト(一旦フラグ立てておいて後からでも判定できるようにする処理)などを自作する必要があります。
こちらについては、Arborの範疇を超えているためこれ以上のサポートは致しません。
Unityマニュアルやチュートリアルを参考に、スクリプトを作成してみてください。
Einst wrote: 2020/01/14 13:41 OnTriggerEnterTransitionを初回状態遷移時のみ有効にするとか
何か良い方法はありませんか?
初めから組み込まれているスクリプトについては汎用性のため、お望みの機能がないことがあります。
StateBehaviour等のスクリプトを自作するのを推奨しておりますので、一度自作もご検討ください。

StateBehaviour | Arbor Documentation
Einst

Re: FSMで状態遷移したタイミングだけで衝突をとりたい

Post by Einst »

回答ありがとうございます。基本、お教えいただいた通りで動きました。

1.チェック用のステートを設け、OnTriggerStayTtransitionで、収めるステートに飛ぶ
2.収めるステート内で独自処理
 2.1.カスタムのStateBehaviourを作成しOnTriggerStayTtransitionからColliderを受け取り。
 2.2.ColliderからさやのGameObjectを取得し、刀のParentに設定
 2.3.刀をisKinematecをTrueに設定


public class StoreNozzle : StateBehaviour {

public InputSlotCollider sayaCollider;

public override void OnStateBegin()
{
Collider collider = null;

if (sayaCollider.GetValue(ref collider))
{
gameObject.transform.parent = collider.gameObject;
gameObject.transform.localPosition = new Vector3(0f,0f,0f);

Rigidbody nozzleRigidBody = gameObject.GetComponent<Rigidbody>();
nozzleRigidBody.isKinematic = true;
}
}
}
Post Reply