Blending behaviors by weight
The 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 widely-used behavior-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, this is 1.0f
. We should refactor the Update
function to incorporate weight
as a parameter for the Agent
class's 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
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 other parameters.
See also
In this project, there is an example of avoiding walls, which is worked out using weighted blending.