Training Stream - Making Game Ready AI, Part 2 - Oct 27th, 2015

In this multi-part series, Ian Shadden and Alexander Paschall show you how to use all of the relevant systems and features (Behavior Trees, EQS, Navigation Meshes, AnimBlueprints, AnimMontages, and more) to design, create, and optimize AI for use in a game environment with all of the requirements and restrictions that go along with that.

In Part 2, Ian and Alexander will extend on the hunger functionality implemented previously by creating a generic system to add new “needs” with associated behavior.

Tuesday, Oct 27th @ 2:00PM-3:00PM ET - Countdown]


Ian Shadden - Sr Training Content Creator
Alexander Paschall - Community Manager @UnrealAlexander](

Feel free to ask any questions on the topic in the thread below, and remember, while we try to give attention to all inquiries, it’s not always possible to answer everyone’s questions as they come up. This is especially true for off-topic requests, as it’s rather likely that we don’t have the appropriate person around to answer. Thanks for understanding!

Edit: The YouTube archive is now available here](

How would it be possible to ignore actor(s) returned from a context in a EQS trace test? The trace test .cpp IS adding some batch of actors to the “IgnoredActors” list but there doesn’t seem to be a way to pass in anything to that list.

Would it be possible to get a high level framework diagram of the AI system? Just a document showing where what is being accessed, where stuff lives, execution order, just something to help me wrap my head around the entire thing.

Creating custom EQS generators in BP seems to be broken, doesn’t work at all. I am not sure if that’s the case or am I doing it wrong. Can we see an example of this?

Many times I have had the situation of a BT branch throwing a nullpointer on some actor key, even though that key is being checked for validity in the branch root, which is also set to “interrupt self”. What could be causing this?

I ran into a specific issue where my player was invulnerable, so the AIPerception component on my AI saw this and didn’t attack him. However, when my invulnerability passed, the AI didn’t bother to re-attack because as far as AIPerception was concerned, the player was percepted. Is there some way to “re-detect” the player?

Thank you!

Just watched the video, I love you guys. <3

Thanks for the info, and sorry if I seemed jaded, I really appreciate all the work you guys do!


Nothing, i was completly wrong :stuck_out_tongue:

Hi Ian,
Sry I am late, but due to my slow internet connection I cannot participate in the livestreams, and I have to watch the YouTube replay.
I’ve just watched the AI stream, great job!
I have a small question I was hoping you might help me with.
I would like to know how I can do the following in blueprints and the Behavior Tree.
The player has different states that are placed in an enumeration:
I want a classical switch-case scenario in the behavior tree, where each case corresponds to a state and has its corresponding Tasks.
The way I was implementing this, is having for each state a bool value in the blackboard, and each time I change the AI state I have to set all the other bool variables to false, except for the one I am using.
Then select the corresponding task by using a blackboard based condition decorator.
But that quickly became complex as the states count augmented.
Is there a switch decorator?
I know there is a simpler way to implement this, and I would appreciate your help.

Also I would appreciate if you cover on your stream later how to optimize the AI, and how to spawn 50 AI in the map, and how they avoid each other, I understood you made that in bullet train.

Thank you

Love the live stream guys. Really appreciated how you showed the process for abstracting and separating interfaces in Blueprints. Can’t wait to see the later streams :slight_smile:

I’m hoping we can see some stuff like:

  1. Resources that can be reused instead of disappearing (like food sources in B&W/minerals in StarCraft etc.)
  2. Exploration AI so if someone gets REALLY hungry they start searching the landscape for more minerals (line of sight detection).

With the exploration AI and resources that can be reused, it’d be really cool to see a hive of these guys competing for resources and running out exploring for food and then dying when they can’t find any. Or when they find something, they can start building a structure/reproducing. Kind of like an organic ant colony/hive model.

The test level these training streams are based off of actually involves Lumberjacks finding forests and trees to gather wood and then find and build structures (Carpenter class AI does this) when enough wood is gathered. There are also apple trees that throw out apples. So yeah, we could easily start working our way toward this.

Awesome! That’s exciting. Thanks!

It’d be cool to add “bad” AI too that tries to blow up structures the guys make, and then we can get into fleeing/avoidance or fighting (though that might be too complicated, maybe the lumberjacks have to call in fighters or something)

However much you guys are able to get to, it’ll be really fun to keep tinkering with it. It’ll be great to have the foundation to work from.

Actually, I have “thieves” that take gold coins from villagers. Guards wander around, but won’t arrest them until they are spotted “pickpocketing” via a linetrace driven by the BT. I like the way you think with the guys that blow up stuff though!

Oh yeah! I recall you guys mentioned something like that in the first stream. That is really cool! Can’t wait :slight_smile: It’d be cool to make an outlaw town where all the pickpockets live in a state of lawlessness when they’re not trying to pickpocket normal villagers… lots of possibilities :slight_smile:

Just watched the youtube video. I know its a bit late now, but the problem you guys had with the plant not blocking your nav mesh is due to a bug in the editor. When manually adding collision to a mesh (like you did with the plant), you then need to close and restart the editor before the nav mesh will recognise the collision. Long story short, I reported this a couple of days ago and Sean Flint was able to reproduce it, and has logged an internal bug report about it. Very annoying bug as you guys found out.

Hey guys, sorry for bring up old topic,

UPDATE : I found the problem, I forget to activate “aborts self”

I’ve a problem, I don’t know why the right sequence (bIsTired is Set) just runs after the other side MoveTo is complete ?

I use 4.10.2

I’m a bit lost, perhaps because of changes in engine as I’m now on 4.18.3. The ‘Event’ for ‘AI Use Item’ isn’t available from the interface when trying to add that event on the AIS Character event graph as Shadden does at time 24:00 min in this second video. @UnrealAlexander]( How do I create an event for this interface that only has functions?

Sorry, never mind - Once I created the interface, it was added to the BaseFoodClass, but still wasn’t added to the AIS_Character blueprint. I’m not sure if that was ever mentioned that we had to do that, but I probably missed that! I hope this helps someone