上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:
- 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; }
- 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(); }
- 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; }