Пример #1
0
    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));
    }
Пример #2
0
    protected Vector3 Seek(Vector3 target)
    {
        Vector3 desiredVelocity = (movingEntity.target.transform.position - transform.position).normalized * movingEntity.maxSpeed;

        return(desiredVelocity - movingEntity.GetComponent <Rigidbody>().velocity);
    }