Mål: At kunne implementere simpel AI I Unreal Engine med Behaviour trees, som skal kunne finde en tilfældig placering og bevæge sig hen til.

Jeg har I dag taget hul på den video serie som forklare om AI I Unreal Engine ved brug af C++. Hvor jeg har fundet ud af at der er overordnet 2 ting som man skal bruge for at lave en AI i Unreal Engine. Som er et Behavior Tree, og et Blackboard. Behavior Tree er det som bestemmer hvad ens AI skal gøre ud fra nogle cases.

Blackboard derimod er det som Unreal Engine kalder for hjernen i ens AI, som er der hvor al dataen er. Det er her man blandt andet finder en lokation som ens AI skal gå mod, eller det kan være hvem man skal angribe. Blackboard er data, og Behavior Tree bruger disse data.

Mit Blackboard har en reference til sig selv, og en variabel jeg selv har lavet, som er TargetLocation, som er der jeg vil have min AI til at bevæge sig hen

Når man kigger på det første billede ser man en node der hedder Find Random Location In NavMesh, denne node eksistere ikke navtively i Unreal Engine, men er noget jeg har implementeret i C++.

UBTTask_FindRandomLocation.h
UBTTask_FindRandomLocation.cpp

Hvis jeg bare lige skal beskrive kort hvad det gør, så er det at jeg har denne ExecuteTask funktion, som jeg overskriver med min egen kode. Min kode tjekker så først om OwnerComp’s AIOwner er af typen AEnemyAIController, som er en klasse jeg selv har implementeret I C++. Derefter finder jeg instansen af min Enemy Pawn, for at finde Origin som jeg finder ved at kalde GetActorLocation(). Dernæst finder jeg et tilfældigt punkt på min navmesh, ud fra en given radius som har origin ved min enemy’s lokation, og som strækker sig ud til min SearchRadius, og så som output sætter den lokationen på min FNavLocation Loc, som jeg bruger til at sætte min TargetLocation. Når den siger GetSelectedBlackboardKey(), så bestemmer man selv hvilken key/variabel man vil bruge, men jeg bruger min TargetLocation.

Fredag vil jeg bruge på at lave et C++ script som skal kunne finde spillerens lokation, fremfor kun et tilfældigt punkt.

Produkt:


Kilder: