AIチュートリアル③ 〜プレイヤーを追跡する〜

プレイヤーを見つけて追跡するAIを実装する。

1. タスクを作成する

ビヘイビアツリー[BT_SamuraiTaisho]を開き、[New Task]の[BTTask_BlueprintBase]を選択して新しいタスクを作成し、[FindPlayerLocation]と名前を変更する。

Blackboard Key型の変数を[Vector]という名前で作成し、[Instance Editable]にチェックを入れておく。
そして下のようにブループリントを組む。
f:id:tatsuyann:20200503134414p:plain

続いて同じようにもう一つ新しいタスクを作成し、[ChasePlayer]と名付ける。
下のようにブループリントを組む。
f:id:tatsuyann:20200503151346p:plain




2. ビヘイビアツリー を編集する

前回作成してビヘイビアツリーの[Sequence]ノードの名前を[Go to Random Location]に変更する。
新しい[Sequence]ノードを作成し、[Chase Player]と名付ける。
そして下のようにビヘイビアツリーを組む。
f:id:tatsuyann:20200503151556p:plain

次にブラックボード[BB_SamuraiTaisho]を開き、Bool型の[CanSeePlayer]というキーを作る。

そしてビヘイビアツリーに戻り、デコレーターを付ける。
デコレーターは[Selector]ノードにおいて、どの子ノードを実行するかの条件を設定するものである。

[Go to Random Location]を右クリックして[Add Decorator]>[Blackboard]を選択し、下のように設定する。
f:id:tatsuyann:20200503135614p:plainf:id:tatsuyann:20200503135840p:plain

[Chase Player]ノードにも同じようにデコレーターを追加し、下のように設定する。
f:id:tatsuyann:20200503140625p:plain

ただし、このままでは[FindPlayerLocation]ノードと[ChasePlayer]ノードで TargetLocation が更新されているので、敵キャラがブレるように見える。
そこで[Cooldown]デコレーターを追加し、[Cool Down Time]を「0.2」に設定する。
f:id:tatsuyann:20200503152242p:plain
[Cooldown]はクールダウン時間が終了するまでノードまたはブランチの実行をロックする。

[Can't See Player]デコレーターを選択し、[Details]パネルの[Flow Control]>[Observer aborts]を「Both」にする。
f:id:tatsuyann:20200503150413p:plain


3. パーセプションを設定する

AIコントローラー[CT_SamuraiTaisho]を開く。
[Components]パネルから[AI Perception]を追加し、下のように設定する。
f:id:tatsuyann:20200503140818p:plainf:id:tatsuyann:20200503141042p:plain

次に、このパーセプションがプレイヤーキャラクターを検知するように設定する。
プレイヤーキャラクター[Pawn_Player]を開く。
[Components]パネルから[AIPerceptionStimuliSource]を追加し、下のように設定する。
f:id:tatsuyann:20200503141535p:plain

そしてAIコントローラー[CT_SamuraiTaisho]に戻り、下のようにブループリントを組む。
f:id:tatsuyann:20200503142228p:plain


4. 敵キャラクターの回転を修正

今のままだと敵キャラクターがプレイヤーを追いかけて向きを変える時にカクつくので、修正する。
敵のキャラクタークラスのブループリント[Pawn_SamuraiTaisho]を開く。
[Components]パネルで[Pawn_SamuraiTaisho(self)]を選択し、[details]パネルの[Pawn]>[Use Rotation Controller Yaw]のチェックを外す。
f:id:tatsuyann:20200503153223p:plain

そして[Components]パネルで[Charactoer Movement(Inherited)]を選択し、[details]パネルの[Character Movement (Rotation Settings)]>[Rotation Rate]>[Z]を「250」にして、下の[Orient Rotation to Movement]にチェックを入れる。
f:id:tatsuyann:20200503153659p:plain

これでスムーズに回転するようになった。