/// <summary> /// Performs a raycast on the navigation mesh to perform line of sight or similar checks /// </summary> /// <param name="start">Starting point</param> /// <param name="end">Ending point</param> /// <param name="querySettings">Advanced settings to be provided to the navigation mesh query</param> /// <returns>The found raycast hit if <see cref="NavigationRaycastResult.Hit"/> is true</returns> public NavigationRaycastResult Raycast(Vector3 start, Vector3 end, NavigationQuerySettings querySettings) { NavigationRaycastResult result = new NavigationRaycastResult { Hit = false }; if (RecastNavigationMesh == null) { return(result); } start -= SceneOffset; end -= SceneOffset; result = RecastNavigationMesh.Raycast(start, end, querySettings); result.Position += SceneOffset; return(result); }
/// <summary> /// Finds a path from point <paramref cref="start"/> to <paramref cref="end"/> /// </summary> /// <param name="start">The starting location of the pathfinding query</param> /// <param name="end">The ending location of the pathfinding query</param> /// <param name="querySettings">Advanced settings to be provided to the navigation mesh query</param> /// <param name="path">The resulting collection of waypoints for the found path, if any (at least 2 if a path was found)</param> /// <returns>True if a valid path was found</returns> public bool TryFindPath(Vector3 start, Vector3 end, IList <Vector3> path, NavigationQuerySettings querySettings) { if (path == null) { throw new ArgumentNullException(nameof(path)); } if (RecastNavigationMesh == null) { return(false); } start -= SceneOffset; end -= SceneOffset; if (!RecastNavigationMesh.TryFindPath(start, end, path, querySettings)) { return(false); } for (int i = 0; i < path.Count; i++) { path[i] += SceneOffset; } return(true); }
/// <summary> /// Finds a path from the entity's current location to <paramref cref="end"/> /// </summary> /// <param name="end">The ending location of the pathfinding query</param> /// <param name="querySettings">Advanced settings to be provided to the navigation mesh query</param> /// <param name="path">The resulting collection of waypoints for the found path, if any (at least 2 if a path was found)</param> /// <returns>True if a valid path was found</returns> public bool TryFindPath(Vector3 end, IList <Vector3> path, NavigationQuerySettings querySettings) { return(TryFindPath(Entity.Transform.WorldMatrix.TranslationVector, end, path, querySettings)); }
/// <summary> /// Performs a raycast on the navigation mesh to perform line of sight or similar checks. Starts from the entity's current world position /// </summary> /// <param name="end">Ending point</param> /// <param name="querySettings">Advanced settings to be provided to the navigation mesh query</param> /// <returns>The found raycast hit if <see cref="NavigationRaycastResult.Hit"/> is true</returns> public NavigationRaycastResult Raycast(Vector3 end, NavigationQuerySettings querySettings) { return(Raycast(Entity.Transform.WorldMatrix.TranslationVector, end, querySettings)); }