Page 1 of 1

AgentFollowを終わらせたい

Posted: 2017/06/07 16:25
by akp2
Unity初心者です&Arbor2使わさせていただいています。

敵キャラをUnityのNavMeshAgentで操作しています。 複数の巡回ポイントを巡回させるスクリプトで動作しています。
この敵キャラオブジェクトにArbor FSMのDistance Transitionでプレイヤーとの距離を測り、Near Stateの範囲に入った場合にAgent Followを起動し、プレイヤーを追いかけるという処理をしています。 Far Stateになったら、再度上記の巡回させるスクリプトの動作に戻りたいのですがどうしたらいいでしょうか。

1、Arborを抜ける?
または
2、Arborで巡回する自作のスクリプトを動作させる

どうすればいいでしょうか。

Re: AgentFollowを終わらせたい

Posted: 2017/06/07 23:31
by caitsithware
複数の巡回ポイントを巡回させるスクリプト
このスクリプトはArborのStateBehaviourではなく通常のMonoBehaviourで作られているということでしょうか。
でしたら、そのスクリプトのenabledを切り替えるStateBehaviourを作成するか、巡回させるスクリプトそのものをStateBehaviourに置き換える必要があります。

巡回スクリプトをArborに対応する方法

1、Arborを抜ける?

厳密にはちょっと意味合いが異なりますが、こちらが「そのスクリプトのenabledを切り替えるStateBehaviourを作成する」になります。

StateBehaviourとはステートに割り当てられるスクリプトで、MonoBehaviourと同じように記述して独自実装ができます。

巡回スクリプトのenabledを切り替えるStateBehaviourスクリプトの具体的な内容は、
  • OnStateBegin()が呼び出されたら巡回スクリプトのenabledをtrueに。
  • OnStateEnd()が呼び出されたら巡回スクリプトのenabledをfalseに。
という感じです。

詳しくはStateBehaviourのカスタマイズをご覧ください。

2、Arborで巡回する自作のスクリプトを動作させる

こちらは「巡回させるスクリプトそのものをStateBehaviourに置き換える」です。
上記「1、Arborを抜ける?」への回答の通りStateBehaviourは独自に実装できますので、すでにある巡回スクリプトをほぼそのままStateBehaviourに対応できます。

巡回と追跡を切り替える

上記2点いずれかを実装できましたら、「巡回」ステートと「追跡」ステートを作成します。
  • 「巡回」ステートには、上記で作成した巡回スクリプトを動作させるStateBehaviourと距離で遷移するDistanceTransitionを追加します。
    DistanceTransitionのNear Stateは「追跡」ステートへドラッグ&ドロップして遷移を設定しておきます。
  • 「追跡」ステートでは、AgentFollowとDistanceTransitionを追加し、DistanceTransitionのFar Stateを「巡回」ステートへドラッグ&ドロップしてステートが戻るように設定します。
以上で一通り動くようになるかと思います。

Re: AgentFollowを終わらせたい

Posted: 2018/02/23 05:43
by akp2
ありがとうございます。
とても参考になりました。