上QQ阅读APP看书,第一时间看更新
How to do it...
This recipe entails adding changes to our Agent class.
- Go to the Agent class.
- Add a member variable for storing the rigid body component's reference:
private Rigidbody aRigidBody;
- Get the reference to the rigid body component in the Start function:
aRigidBody = GetComponent<Rigidbody>();
- Implement a function for transforming an orientation value to a vector:
public Vector3 OriToVec(float orientation) { Vector3 vector = Vector3.zero; vector.x = Mathf.Sin(orientation * Mathf.Deg2Rad) * 1.0f; vector.z = Mathf.Cos(orientation * Mathf.Deg2Rad) * 1.0f; return vector.normalized; }
- Add the following two lines at the beginning of the Update function:
public virtual void Update () { if (aRigidBody == null) return; // ... previous code
- Define the FixedUpdate function:
public virtual void FixedUpdate() { if (aRigidBody == null) return; // next step }
- Continue implementing the FixedUpdate function:
Vector3 displacement = velocity * Time.deltaTime; orientation += rotation * Time.deltaTime; if (orientation < 0.0f) orientation += 360.0f; else if (orientation > 360.0f) orientation -= 360.0f; // The ForceMode will depend on what you want to achieve // We are using VelocityChange for illustration purposes aRigidBody.AddForce(displacement, ForceMode.VelocityChange); Vector3 orientationVector = OriToVec(orientation); aRigidBody.rotation = Quaternion.LookRotation(orientationVector, Vector3.up);