# EndFindPath(NavQueryBuffer, out int)

> Obtains the number of nodes in the path computed by a successful NavWorld.ContinueFindPath operation.

## Definition

* **Type:** Method
* **Namespace:** [Unity.AI.Navigation.LowLevel](/engine/6000.5/script-reference/unity/ai/navigation/lowlevel.md)
* **Assembly:** UnityEngine.AIModule

## EndFindPath(NavQueryBuffer, int)

```csharp
public readonly NavQueryStatus EndFindPath(NavQueryBuffer queryBuffer, out int pathSize)
```

### Parameters

**** (\[NavQueryBuffer]\(/engine/6000.5/script-reference/unity/ai/navigation/lowlevel/navquerybuffer)): The container that stores intermediate node data for this search operation.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The number of NavMesh nodes in the found path. This method sets the value before it returns.

### Returns

| Type                                                                                             | Description                                              |
| ------------------------------------------------------------------------------------------------ | -------------------------------------------------------- |
| [NavQueryStatus](/engine/6000.5/script-reference/unity/ai/navigation/lowlevel/navquerystatus.md) | A bitfield with one of the following two main flags set: |

### Remarks

This method prepares the path data so that you can then call [NavWorld.GetResultFromFindPath](/engine/6000.5/script-reference/unity/ai/navigation/lowlevel/navworld/getresultfromfindpath.md) to retrieve the array of [NavNode](/engine/6000.5/script-reference/unity/ai/navigation/lowlevel/navnode.md) values that make up the path.

**Important**: Call this method only once, at the end of the pathfinding operation. Calling it more than once invalidates the stored path.

Additional Resources: [NavQueryStatus.StatusDetailMask](/engine/6000.5/script-reference/unity/ai/navigation/lowlevel/navquerystatus/statusdetailmask.md)

### Examples

```csharp
using Unity.Collections;
using UnityEngine;
using Unity.AI.Navigation.LowLevel;

public class FindPathExample : MonoBehaviour
{
    public Transform target;
    NavWorld m_World;
    NavQueryBuffer m_Buffer;

    void OnEnable()
    {
        m_World = NavWorld.GetDefaultWorld();
        m_Buffer = new NavQueryBuffer(m_World, Allocator.Persistent, 1024);
    }

    void Update()
    {
        NavLocation start = m_World.MapLocation(transform.position, Vector3.one, 0);
        NavLocation end = m_World.MapLocation(target.position, Vector3.one, 0);
        if (!m_World.IsValid(start) || !m_World.IsValid(end))
            return;

        NavQueryStatus status = m_World.BeginFindPath(m_Buffer, start, end);
        while ((status & NavQueryStatus.InProgress) != 0)
            status = m_World.ContinueFindPath(m_Buffer, 64, out int _);

        if ((status & NavQueryStatus.Success) == 0)
            return;

        status = m_World.EndFindPath(m_Buffer, out int pathSize);
        if ((status & NavQueryStatus.Success) == 0)
            return;

        NativeArray<NavNode> path = new NativeArray<NavNode>(pathSize, Allocator.Temp);
        int copied = m_World.GetResultFromFindPath(m_Buffer, path);

        // The path is a corridor of nodes, not a list of waypoints. Draw the gate that each
        // pair of consecutive nodes shares to see the corridor the agent can move through.
        for (int i = 0; i < copied - 1; i++)
        {
            if (m_World.GetPortalPoints(path[i], path[i + 1], out Vector3 left, out Vector3 right))
                Debug.DrawLine(left, right, Color.yellow);
        }

        path.Dispose();
    }

    void OnDisable()
    {
        m_Buffer.Dispose();
        m_World.Dispose();
    }
}
```
