protected Vector3 Pursuit(MovingEntity target) { Vector3 toEvader = movingEntity.target.transform.position - transform.position; float relativeHeading = Vector3.Dot(transform.forward, movingEntity.target.transform.forward); if (Vector3.Dot(toEvader, transform.forward) > 0 && relativeHeading < Mathf.Cos(150f)) { return(Seek(target.transform.position)); } float lookAheadTime = toEvader.magnitude / (movingEntity.target.GetComponent <Rigidbody>().velocity.magnitude + movingEntity.maxSpeed); _pursuit_expected = target.transform.position + target.GetComponent <Rigidbody>().velocity *lookAheadTime; return(Seek(target.transform.position + target.GetComponent <Rigidbody>().velocity *lookAheadTime)); }
protected Vector3 Seek(Vector3 target) { Vector3 desiredVelocity = (movingEntity.target.transform.position - transform.position).normalized * movingEntity.maxSpeed; return(desiredVelocity - movingEntity.GetComponent <Rigidbody>().velocity); }