Utility Intelligence is a robust and powerful utility-based AI framework. Unlike traditional AI techniques such as BTs, FSMs, and GOAP, which rely on conditions for decision-making, our agents evaluate all possible decisions and choose the one with the highest score to execute.
Additionally, each decision is scored per target, ensuring that the best target is selected for the chosen decision. This approach makes our agents behave more naturally than those using other AI techniques .
Moreover, Utility Intelligence provides the Decision Making Preview feature, which allows you to preview which decision is selected directly in the editor without having to enter Play Mode. This feature can save you a lot of time when designing your agents’ behaviors.
An intuitive and powerful Editor
We offer an intuitive and powerful Editor with many robust features that allow you to create complex AI Behaviors and Logic with ease:
Decision Making Preview: Preview which decision is selected directly in the editor, without having to enter Play Mode.
Intuitive Consideration Editor: See how the input value and the response curve affect the consideration score without having to visualize it in your head.
Blackboard Variables: Share information between multiple components, such as inputs, input normalization, and action tasks, using Blackboard Variables.
JSON Editing: Manually edit the Intelligence Data in JSON format using your Text Editor, then import it to the Intelligence Asset.
Runtime Information: View the current status of multiple components during runtime. It is similar to Decision Making Preview but includes additional runtime information, such as the best target for each decision, and the execution status of decisions and action tasks.
Runtime Editing: Tweak your AI Behaviors during runtime for testing purposes without having to replay your game.
Runtime Editor: The Utility Intelligence Editor can function both at editor time and at runtime in builds. This feature enables users to adjust variables in the Utility Intelligence Editor to observe how they affect the agent’s decisions for testing purposes in builds.
Lockable Editor: Lock the Intelligence Editor to a specific Utility Agent. This is useful when you want to keep viewing a utility agent’s information while inspecting or editing another GameObject in the Inspector Window.
Field Attributes: Show/hide and group your fields in the Intelligence Editor.
Dark & Light themes: The Intelligence Editor supports both Dark and Light themes and will automatically match the theme of the Unity Editor.
Many example scenes
We offer many example scenes to show you how to use Utility Intelligence to create AIs for your games:
StraightArrowOnly
StraightArrow vs CurvedArrow
Chaser vs Evader
Chaser & Patrol vs Evader & FindEnemy
Swordsman vs Swordsman
Axeman vs Axeman
Archer vs Swordsman
Crossbowman vs Swordsman
Team vs Team
Runtime Editor
Many tips & tricks
We provide a variety of tips and tricks to guide you on how to use Utility Intelligence more efficiently.
Hi everyone,
I have submitted this plugin and the Unity Asset Store team has informed me that it will take 21-33 business days for it to be published. In the meantime, I will write docs for it. So, please stay tuned!
It’s been a while since my last post here. I’ve been focusing on work to ensure that Utility Intelligence reaches a high level of quality. A lot of work has been done since then, including optimization, bug fixes, documentation, and more.
I’m glad to say that it will be coming soon. Unity said that there are only a few business days left until the review process is completed. Therefore, if nothing unexpected happens, it will be published next week. However, it depends on Unity, and I’m not sure about that.
For more information about this plugin, you guys can watch the introduction video or read the documentation in the first post. I hope that you guys will like it.
Hi everyone,
I’m thrilled to announce that Utility Intelligence has been released! And currently, it has a 50% New Release Discount. If you’re interested in Utility AI, please give it a try!
It’s been almost two weeks since the release and just a reminder: there are only 3 days left until the new release discount ends. So if you’re interested in Utility Intelligence, now’s the time to get it!
Just a heads up, there is only one day left before the 50% New Release Discount ends. So if you’re interested in Utility Intelligence, this is the last chance to get it at this reduced price.
Hi everyone,
I just created a demo using a new feature: Runtime Editor. It hasn’t been released yet because there are some issues that need to be resolved before release.
This feature allows you to access the UtilityIntelligenceEditor not only in Editor mode but also in Play mode.
In v1.1.0. I’ve added a cache per target for each decision-making component (decision, consideration, input normalization, input) to ensure they are only calculated once per target and reuse the result for the same target in other components. To test its efficiency, I’ve enabled this option for MyDistanceToTargetInput and added some code to make it a heavy input.
public class MyDistanceToTargetInput : Input<float>
{
protected override float OnGetRawInput(in InputContext context)
{
var myPosition = AgentFacade.Position;
var targetPosition = context.TargetFacade.Position;
myPosition.Y = 0;
targetPosition.Y = 0;
float result = 0;
for (int i = 1; i < 100; i++)
{
result += Mathf.Sqrt(i) * Mathf.Sin(i) * Mathf.Cos(i);
}
return Vector3.Distance(myPosition, targetPosition);
}
}
The processing time is reduced from 22ms to 13ms for the same 30 agents in the scene. However, it comes with a cost to find and retrieve the result from the cache per target, so it is only effective for heavy computations.
Hi everyone, I’m making new examples to test v1.1.0 and here’s the first example.
Example 1: StraightArrow vs CurvedArrow
In this example, the archer will shoot arrows straight if he can see the target. If his view is blocked by a wall, he will shoot arrows in a curve to bypass the obstacle.
Example 2: Patrol
In this example, when the player enters the chasing radius of the enemy, it will continuously chases the player. And when the player exits the chasing radius, the enemy will return to patrolling its territory.
In v1.1.0, you can categorize the action tasks, inputs, input normalizations using CategoryAttribute:
[Category("Comparison")]
public class IsGreaterThanOrEqualToValueNormalizationFloat : IsGreaterThanOrEqualToValueNormalization<float>
[Category("Animator")]
public class SetBool : SetParam
In this example, the archer will shoot arrows straight if he can see the target. If his view is blocked by a wall, he will shoot arrows in a curve to bypass the obstacle.