[Tutorial] Artificial Intelligence Essentials

Hello Community!

It’s been quite awhile since I produced a new UE4 C++ tutorial series(nearly 2 years!). I’ve been quite busy with life and struggle within those times.

I want to announce the new tutorial series I will be releasing in the next couple days will be UE4 C++ Artificial Intelligence Essentials! :smiley:

Things that I will go over in this series(ALL IN C++!Except for the BB and BT):

  1. AIController
  2. BTService
  3. BTTask
  4. BTDecorator
  5. Blackboard(BP)
  6. Behavior Tree(BP)

I will post my video on this thread and on my YouTube channel. I have made an announcement video along with a BIG Thank you to everyone who helped support and fund me to get to GDC 2016!


I look forward to responses and critiques!



it sounds very interesting!
You could include later the Utility node plugin, that seems to be very useful for decision evaluation by weighting or behavior variation:

I was just looking for something like this, I’m a bit lost on AI, I’m not sure how to make everything work togheter (BT, BBs, enemy class, enemy anim bp) the way it was intended by ue4 developers.
In particular the place you store state is a bit confusing to me, should you put state information (flags like bIsAttacking) on the enemy class (which would then be accessible by the anim instance class) or inside the bt blackboard?
Also I saw there are bt nodes to play animations, isn’t that what the anim blueprint is for? I don’t quite get it.
I hope your series will clarify these things, I already saw your weapon essentials series and I found that very informative.

Unreal Engine 4 C++: Artificial Intelligence Essentials Part 1: The Base

I hope this series so far helps everyone in need of help with C++ AI! There will be more to come from building off from this :D!

Nice we have resources to learn. I have just started and I am wondering why you chose to explicitly add a UBehaviorTreeComponent in your controller instead of using the existing UBrainComponent?

I use UBehaviorTreeComponent because I can call the function StartTree to tell the AIController to use a particular BehaviorTree. If I use UBrainComponent, it doesn’t have the StartTree function in it’s class. Either way, UBehaviorTreeComponent inherits UBrainComponent

Use AIController method:

bool AAIController::RunBehaviorTree(UBehaviorTree* BTAsset)

Good call! That would also work as well :stuck_out_tongue: .