敵キャラに2つのパトロールポイントをAIを使って行ったり来たり巡回させます。一つのパトロールポイントに到達した場合、ランダムに設けた待ち時間だけその場に一旦停止させます。パトロール→ウエイト→パトロールを延々と繰り返すだけのAIです。
スポンサーリンク
2つ目のパトロールポイントを作成する
Enemy.hに2つ目のパトロールポイントを宣言します。
UPROPERTY(EditAnywhere, Category = AI, meta = (AllowPrivateAccess = "true", MakeEditWidget = "true")) FVector PatrolPoint2;
Enemy.cppのBeginPlay関数にコードを書き加えます。
void AEnemy::BeginPlay()
{
Super::BeginPlay();
EnemyController = Cast<AEnemyController>(GetController());
const FVector WorldPatrolPoint = UKismetMathLibrary::TransformLocation(
GetActorTransform(),
PatrolPoint);
const FVector WorldPatrolPoint2 = UKismetMathLibrary::TransformLocation(
GetActorTransform(),
PatrolPoint2);
if(EnemyController)
{
EnemyController->GetBlackboardComponent()->SetValueAsVector(
TEXT("PatrolPoint"),
WorldPatrolPoint);
EnemyController->GetBlackboardComponent()->SetValueAsVector(
TEXT("PatrolPoint2"),
WorldPatrolPoint2);
EnemyController->RunBehaviorTree(BehaviorTree);
}
}
これで2つ目のパトロールポイントの作成は終了です。
スポンサーリンク
2地点間のパトロールと待ち時間を設定する
EnemyBehaviorTreeを開き、ブラックボードを選択、新規キーを押し、Vector型キーを新たに作成します。
名前はPatrolPoint2にします。
ビヘイビアツリーに移動して、Wait×2とMoveToを新たに付け足します。
WaitをのWait TimeとRandom Deviationに好きな数値を入力します。Wait Timeは待ち時間のことで、例えば、3と入力すると、パトロールポイントに到達したら3秒間待つようになります。Random Deviationは、その待ち時間からランダムに+-される値です。例えば、2と入力すると、1秒~5秒の間でランダムに待つようになります。
二つ目のMove ToのBlackboard KeyにPatrolPoint2を設定します。
スポンサーリンク
ワールド内にパトロール地点を設定する
ワールド内の適当な場所に二つ目のパトロール地点を設置します。

PatrolPoint→PatrolPoint2→PatrolPointの順に巡回します。
これで2地点間を行ったり来たりしますが、それ以外は何もしないできない人口無能状態なので、今後もっと人工知能らしくする必要があります。
スポンサーリンク
スポンサーリンク









コメント