Blending behaviors by weight
Blending techniques allow you to add behaviors and mix them without creating new scripts every time you need a new type of hybrid agent.
This is one of the most powerful techniques in this chapter, and it's probably the most used behaviour-blending approach because of its power and the low cost of implementation.
Getting ready
We must add a new member variable to our AgentBehaviour
class called weight
and preferably assign a default value—in this case, 1.0f
. Besides this, we should refactor the Update
function to incorporate weight
as a parameter to the Agent
class' SetSteering
function. All in all, the new AgentBehaviour
class should look something like this:
public class AgentBehaviour : MonoBehaviour
{
public float weight = 1.0f;
// ... the rest of the class
public virtual void Update ()
{
agent.SetSteering(GetSteering(), weight);
}
}
How to do it...
We just need to change the SetSteering
agent function's signature and definition:
public void SetSteering (Steering steering, float weight)
{
this.steering.linear += (weight * steering.linear);
this.steering.angular += (weight * steering.angular);
}
How it works...
The weights are used to amplify the steering
behavior result, and they're added to the main steering structure.
There's more...
The weights don't necessarily need to add up to 1.0f
. The weight
parameter is a reference for defining the relevance that the steering
behavior will have among the other ones.
See also
In this project, there is an example of avoiding walls, worked out using weighted blending.