Unity 2018 Artificial Intelligence Cookbook(Second Edition)
上QQ阅读APP看书,第一时间看更新

How to do it...

We can regard it as a big three-step process in which we first manipulate the internal target position in a parameterized random way, face that position, and move accordingly:

  1. Create the Wander class deriving from Face:
using UnityEngine; 
using System.Collections; 
 
public class Wander : Face 
{ 
    public float offset; 
    public float radius; 
    public float rate; 
} 
  1. Define the Awake function in order to set up the internal target:
public override void Awake() 
{ 
    target = new GameObject(); 
    target.transform.position = transform.position; 
    base.Awake(); 
} 
  1. Define the GetSteering function:
public override Steering GetSteering() 
{ 
    Steering steering = new Steering(); 
    float wanderOrientation = Random.Range(-1.0f, 1.0f) * rate; 
    float targetOrientation = wanderOrientation + agent.orientation; 
    Vector3 orientationVec = OriToVec(agent.orientation); 
    Vector3 targetPosition = (offset * orientationVec) + transform.position; 
    targetPosition = targetPosition + (OriToVec(targetOrientation) * radius); 
    targetAux.transform.position = targetPosition; 
    steering = base.GetSteering(); 
    steering.linear = targetAux.transform.position - transform.position; 
    steering.linear.Normalize(); 
    steering.linear *= agent.maxAccel; 
    return steering; 
}