Multiple AI types workflow


I’ve been trying to create AI for my 2D game and I’ve planned to have 3-4 different versions of AI characters in my game. I’ve already created a simple patroling AI, but when I started to think about the remaining 3 AI character types, I’ve been stuck understanding the flow of the logic how I should be able to control multiple AI characters with different behavior.

I’ve created my first patrol AI (follows path actors) using C++ and behaviortree/blackboard. I only set the behaviortree for my character and the overall blackboard variable setup is done in the controller. Here’s the controller logic:


	BB_Component = CreateDefaultSubobject<UBlackboardComponent>(TEXT("BB_Component"));
	BT_Component = CreateDefaultSubobject<UBehaviorTreeComponent>(TEXT("BT_Component"));

	AIPerception = CreateDefaultSubobject<UAIPerceptionComponent>(TEXT("PerceptionComponent"));
	SightConfig = CreateDefaultSubobject<UAISenseConfig_Sight>(TEXT("Sight Sense"));

	SightConfig->DetectionByAffiliation.bDetectEnemies = true;
	SightConfig->DetectionByAffiliation.bDetectFriendlies = true;
	SightConfig->DetectionByAffiliation.bDetectNeutrals = true;
	SightConfig->PeripheralVisionAngleDegrees = 65.f;
	SightConfig->SightRadius = 500.f;
	SightConfig->LoseSightRadius = 700.f;


void ABasicAIController::Tick(float DeltaSeconds)

void ABasicAIController::BeginPlay()

	AIPerception->OnPerceptionUpdated.AddDynamic(this, &ABasicAIController::SenseUpdated);
	BB_Component->SetValueAsObject(BlackBoard_Key_DesiredPathNode, Cast<ABasicAICharacter>(GetPawn())->DesiredNode);


void ABasicAIController::Possess(APawn* InPawn) {

	ABasicAICharacter* Character = Cast<ABasicAICharacter>(InPawn);
	if (Character && Character->BehaviorTreeAsset) {
		UE_LOG(LogTemp, Warning, TEXT("POSSESSING"));




	BB_Component->SetValueAsObject(BlackBoard_Key_DesiredPathNode, Character->DesiredNode);
	BB_Component->SetValueAsObject(BlackBoard_Key_SelfActor, Character);


void ABasicAIController::SenseUpdated(TArray<AActor*> Actors) {
	UE_LOG(LogTemp, Warning, TEXT("test"));

My question: When I want to create, for example, chasing enemies, would I have to create a new AIcontroller class for this type of enemies?
It might be a dumb question, but I am not sure if I do this in right workflow nor I did not find much information how to separate the logic when creating multiple AI types (especially when using C++).

With regards