現時点でも、それっぽい動きだが・・・
前回までの「巡回」→「追跡」ロジックでも問題無さそうですが、今回は追跡から巡回に戻る際に「巡回ルート」から外れた場所に戻ってから巡回に復帰するというロジックを組んでいきます。
巡回から外れた座標をブラックボードに記憶させる
ブラックボードに巡回ルートから外れたタイミングで、現在の座標を記憶させるエリアを定義します。名前は”LostTraceVector”とし、Vector型の変数として定義します。今後はこの座標の事を、「巡回復帰座標」と呼ぶことにします。

巡回復帰座標が設定されていたら、巡回復帰座標への移動を優先する
ビヘイビアツリーの条件を設定して、巡回 or 巡回復帰のロジックを組んでいきます。処理としては単純で、巡回復帰座標を持っている場合には巡回復帰座標への移動を優先し、巡回復帰座標を持っていない場合は通常の巡回を行うだけです。
以前と比べてビヘイビアツリーの巡回ロジックのノードが少しだけ増えています。ここで、巡回だけど、LostTraceVectorに値がセットされているか否かを判断するデコレーターが設定され、それぞれの動作を切り替えています。
巡回処理の先頭にSelectorが追加されていますが、これは上位の条件判定の為と、LostTraceVectorの有無で配下の処理を切り替える為だけに追加されたノードとなります。

巡回復帰座標の設定
巡回中に追跡モードに切り替わったタイミングで「巡回復帰座標(LostTraceVector)」を設定してあげる必要があります。AI_AICharacterを開き、発見時のロジックに、以下のノードを追加します。
ロジックはとても単純で、LostTraceVectorに値が設定されていない場合(つまり、巡回している場合)にプレイヤーを発見した時点の敵キャラクターの座標をブラックボードに書き込んでいるだけです。

巡回復帰した場合に巡回復帰座標をクリアする処理を追加する
なんとなく今まで組んできたロジックでも動きそうですが、巡回復帰座標をクリアする処理がありません。このままだと、「巡回」→「追跡」→「巡回復帰」→「動かない!!」という事になってしまうので、巡回復帰座標をクリアするビヘイビアツリータスクを作成します。名前は”BTT_ClearLostTraceVector”とします。ロジックは超単純です。

ビヘイビアツリーに巡回復帰座標をクリアする処理を入れる
巡回復帰座標へ移動後に巡回復帰座標をクリアすれば良いので、以下のようなビヘイビアツリーとなります。巡回復帰座標へMoveToした後に、さっき作ったクリア処理を呼び出しているだけですね。

プレイしてみましょう。
プレイヤー発見時に巡回ルートから外れて、プレイヤーを見失うと、巡回ルートから外れた地点に戻ってから巡回を再開していることが分かると思います。
次回は・・・
次回は、このレベル上に2体の敵キャラクターを配置しつつ、それぞれの個性を作っていこうと思います。
No responses yet