Infinite Axis Utility System

So, I’m making a Cat and Lazer pointer game in UE4. I’ve redone the AI system now several times, I’m on my 4th iteration.

I had been using the built in Behavior Tree system in UE4, but I kept having issues with it. Basically I would get a behavior to work and move on to another part of the game, then when I’d come back to the AI a couple months later my cat wouldn’t move, or no longer looked at the laser etc.

I give up. I don’t know if I’m using it in a way that wasn’t intended or changes are made to the system that break my functionality when I update. Either way, it’s better for me if I just do it myself.

What is an Infinite Axis Utility System?

Here is a screenshot of the GUI Editor for the System:


In a nutshell it is a system that returns an Action to perform with the highest value. It’s bascially a list of Actions and each Action has a list of “Axis”. Dave Mark did a talk on it at GDC a couple years ago and that’s where I heard about it. I think he also mentioned a Cat and Laser pointer game in the same talk actually which was the initial seed idea of Lol Cats I Can Has Lazer, though our game went it’s own design direction.

Here is a link to the talks:

Those videos go into the nuts and bolts of the system. The book Behavioral Mathmatics for Game AI is also a good source and I recommend reading it if you intend to implement a Utility System. It really gets into the design aspect of how to model behaviors as math functions.

Here is a link to a GDC talk of an evolved version of the Utility System used in an MMO:

After watching that I decided to incorporate some of the ideas into my system. My first couple IAUS ( Infinite Axis Utility System ) were not optimized at all. They were dynamic classes with functions. I wanted to describe my system in a more Data Centric way, and then have the System itself hold the functions that work on the data.

I choose this because it was easier to describe a system of data in the UE4 Editor than classes. Having TARRAY’s of structs with enums and floats as variables is very easy. With classes it’s not so easy.

Share Button

Leave a Reply

Your email address will not be published. Required fields are marked *