示例#1
0
    /*
     * keep checking for the closest pursuer and set the state */
    void CheckNearbyPursuers()
    {
        float closestDist = float.MaxValue;

        foreach (PathfindingChaser pursuer in pursuers)
        {
            float dist = (pursuer.transform.position - transform.position).magnitude;
            if (dist < closestDist)
            {
                closestDist    = dist;
                currentPursuer = pursuer;
            }
        }
        if (isWandering())
        {
            if (hasLineOfSight(currentPursuer) && closestDist < 3.0f)
            {
                currentState = State.FLEE;
            }
        }
        else if (isFleeing())
        {
            if (!hasLineOfSight(currentPursuer) && closestDist > 3.0f)
            {
                currentState = State.WANDER;
                CheckNearbyPursuers();
            }
        }
    }
示例#2
0
 private bool hasLineOfSight(PathfindingChaser pursuer)
 {
     if (Physics.Linecast(transform.position, pursuer.transform.position))
     {
         return(false);
     }
     return(true);
 }