敵キャラに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地点間を行ったり来たりしますが、それ以外は何もしないできない人口無能状態なので、今後もっと人工知能らしくする必要があります。
スポンサーリンク
スポンサーリンク
コメント