Unreal Engine:AIで敵キャラに2地点間を巡回させる

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

スポンサーリンク
スポンサーリンク

コメント

タイトルとURLをコピーしました