Search Unity

Problems trying to determent if the AI agent destination status is valid or not using CalculatePath

Discussion in 'Navigation' started by Rukas90, Oct 12, 2016.

  1. Rukas90

    Rukas90

    Joined:
    Sep 20, 2015
    Posts:
    169
    I have this problem when trying to determent if enemy can reach the player. Because if the player is in the room and enemy is not in the room or the enemy is in the room and the player is not in the room and the room door closes the path is closed which means that there is no way the enemy is going to reach the player. Only if you open the door the path is available. Cause the door has a dynamic obstacle. So I tried to use CalculatePath method to determent the destination status (to see if for example the enemy can reach the player). But it doesn't work.. Path is always unavailable, even if I stepped out of the closed area (like room) to the path where the enemy is walking around. (canReachPlayer is always = false)

    I use Unity4.

    P.S. Sorry if my english is bad.

    The Demonstration: [/B] [URL]https://postimg.org/image/xgjhu434z/[/URL]

    [IMG]https://postimg.org/image/xgjhu434z/

    The script:

    public Transform player;
    private NavMeshAgent agent;

    [HideInInspector]
    private bool canReachPlayer;
    private NavMeshPath pathToPlayer;

    void Start ()
    {
    agent = GetComponent(NavMeshAgent);
    }

    void Update ()
    {
    pathToPlayer = new NavMeshPath ();

    Debug.Log(canReachPlayer +" - CanReach");
    if(CalculateNewPath()==true)
    {
    canReachPlayer =true;
    print("Path available");
    }
    else
    {
    canReachPlayer =false;
    print("Path not available");
    }
    if(canReachPlayer ==true)
    {
    agent.SetDestination(player.position);
    }
    elseif(canReachPlayer ==false)
    {
    //Ignore the player and go back patrolling the area.
    }
    }

    bool CalculateNewPath ()
    {
    agent.CalculatePath (player.position, pathToPlayer);
    print ("New Path calculated");

    if(pathToPlayer.status != NavMeshPathStatus.PathComplete)
    {
    return false;
    }
    else
    {
    return true;
    }
    }
     
  2. Thorskin

    Thorskin

    Joined:
    Oct 10, 2016
    Posts:
    13