敵キャラをAIで動かすに当たって、アイドル状態からいきなり攻撃を仕掛けてくるのではなく、先ず、A地点とB地点にパトロールポイントを設定してそこを行き来させ、こちらの存在に気付いてから攻撃してくるようにします。今回は、このパトロール地点の設定をしたいと思います。
スポンサーリンク
C++でパトロールポイントを設定する
Enemy.hにPatrolPointとEnemyControllerを宣言します。
UPROPERTY(EditAnywhere, Category = AI, meta = (AllowPrivateAccess = "true", MakeEditWidget = "true")) FVector PatrolPoint; class AEnemyController* EnemyController;
Enemy.cppに幾つかヘッダーファイルを追加します。
#include "EnemyController.h" #include "Kismet/KismetMathLibrary.h" #include "BehaviorTree/BlackboardComponent.h"
Enemy.cppのBeginPlay関数にコードを追加します。
void AEnemy::BeginPlay() { Super::BeginPlay(); EnemyController = Cast<AEnemyController>(GetController()); const FVector WorldPatrolPoint = UKismetMathLibrary::TransformLocation( GetActorTransform(), PatrolPoint); if(EnemyController) { EnemyController->GetBlackboardComponent()->SetValueAsVector( TEXT("PatrolPoint"), WorldPatrolPoint); EnemyController->RunBehaviorTree(BehaviorTree); } }
コンパイルしてUE4エディタを起動します。
スポンサーリンク
ブループリントで設定する
Enemy_BPのAI Controller ClassにEnemyController_BPを設定します。
EnemyBlackboardを開き、新規キーのVectorを選択します。
名前はPatrolPointにします。
EnemyBehaviorTreeを開き、ルート→Sequenceを選択します。
Sequence→TasksのMoveToを選択します。
MoveToノードのBlackboard KeyをPatrol Pointに設定します。
スポンサーリンク
ナビメッシュバウンズボリュームの設定
アクタを配置の検索窓にnavmと入力してナビメッシュバウンズボリュームを選択します。
ナビメッシュバウンズボリュームをエディタ内に引っ張り出します。
Rキーを押してナビメッシュバウンズボリュームをX、Y軸方向に拡大します。
Pキーを押すとナビメッシュバウンズボリュームが拡大したことを確認できます。
スポンサーリンク
エディタでパトロールポイントの設定
敵キャラに張り付いているパトロールポイントウイジェットを引っ張り出します。
適当な場所にパトロールポイントを配置します。
これでゲームが開始すると敵キャラはパトロールポイントに勝手に移動し始めます。
スポンサーリンク
スポンサーリンク
コメント