Polarith AI
Steering Tag

front-end: AIMSteeringTag

A Steering Tag is used to assign optional data (relevant to steering algorithms) to a specific game object and, thus, to its corresponding percept. For example, the Significance or an array of custom float values might be specified. Furthermore, it is possible to assign a label to a percept for identification purposes in behaviours concerning specific objects. Note that this component is completely optional and needs to be attached only if the additional data is needed, for example, if you write your own behaviour and you want to inject custom data through the float Values.


This component has got the following specific properties.

Property Description
Label Identifies the percept corresponding to the perceived object by the given string.
Significance An additional multiplier for the ResultMagnitude. It can be used to weight the importance of different objects.
Radius Defines the radius of the given object. This radius is used as bounding volume approximation by RadiusSteeringBehaviour instances such that objects with different sizes work with the same parameterization. Behaviours using real bounding box informations are not affected.
Values A float array which can be used to inject custom data to a custom behaviour. For example, for a behaviour which needs to know the mass of an agent, this value can be written into this array.
TrackVelocity If enabled, the velocity of the game object is computed instead of using the value of an attached Rigidbody.
UpdateLocalBounds If enabled, the oriented bounding boxes (OBBs) of the game object are computed for each percept update. This is useful if the local bounds dynamically change at runtime, for instance, when the scale of the corresponding object changes dynamically. If this option is disabled (which is the default), the OBBs are updated only once for each newly perceived object. Thus, they are only re-computed if the object reference in an environment changes.
IgnoreLocalBounds If true, the perception pipeline will NOT obtain the local OOB for this object. This might be helpful, if you use physics models of your Rigidbody or Transform that have rotations beyond (-)180 degrees. You don't need this option in common scnenarios. Note, that you might receive them once and disable the updates afterwards using the API.


Some behaviours need to know the velocity of a perceived game object (percept). So, there are two ways of obtaining this information. First, if a Rigidbody is attached to an object, the velocity is obtained automatically. Second, by attaching a SteeringTag and activating TrackVelocity, the velocity is computed via the perception pipeline. If both conditions are met, the velocity of the SteeringTag is always preferred.

The Significance can be used to weight different objects like in the following abstract example: There is an agent which should collect gold coins. Different coin piles are distributed in the scene and they are sampled by the agent's Seek behaviour. There are two different types of piles, a small coin pile and a large pile. The agent should prefer larger piles over smaller piles, and so, the larger ones have a Significance of 2, as against smaller piles may have a Significance of 1.

The IgnoreLocalBounds is a workaround for special scenarios. Since we need to rotate objects to obtain the OOB, physics of Rigidbody and Transform might get broken due to the clamping of rotations to [-180, 180] in Unity. Therefore you can use this option to prevent our pipeline from obtaining the bounds information for OOB. Note, that you might want to receive the information first, e.g. on the startup. In this case, you need to disable this option first and enable it after the first update.