

PatchOffMeshConnectionStutterStepping enabled.SmartRoaming if the agent is not on the navmesh.AgentExtensions.GetPathOrigin() to determine the start point of its paths.SmartRoaming if a path from an agent succeeds, while a path from the search start point fails.NavMesh.GetAreaFromName("NonSmartAgent") returns 25.AgentExtensions.GetPathOrigin() to get the path origin for NavMeshAgents more accurately. This will avoid issues with pathfinding on agents with a non-zero baseOffset, such as the Soul Devourer enemy.AgentExtensions.GetQueryFilter() method to retrieve an agent's type ID, area mask, and cost overrides in one call. Previously, the cost overrides were largely unusable due to requiring 32 individual calls to NavMeshAgent.GetAreaCost().SmartRoaming is sending an enemy to a search node.SmartPathTask.IsStarted to determine whether StartPathTask() has been called.SmartRoaming will not throw an exception if it runs out of nodes to search.SmartPathTask.StartPathTask() throw an exception if it is called with zero destinations. All path results will also throw exceptions if the task has not been started. This should help to avoid situations where IsResultReady() could always return false, blocking further navigation logic from ever running.NavMesh.CalculatePath().IElevator.IsInsideElevator(Vector3) to determine if a point is inside the physical bounds of the elevator, which is required to be implemented for all registered elevators.SmartPathDestination.CanActivateDestination(Vector3) method which determines whether an agent at that position can activate/use the destination. This is intended to prevent agents from pressing the button to send an elevator to a floor without being inside first, preventing AI from getting stuck repeatedly hitting elevator buttons.SmartRoaming API to customize the distance that an agent is allowed to spend navigating to a node.SmartPathTask was allowed to be garbage collected instead of being Dispose()d.SmartPathfinding: A static class with methods to register smart agents, elevators, and teleporters for the smart pathfinding system.IElevator: An interface that can be implemented to allow enemies to navigate through them if they use SmartPathTask.SmartPathTask: A class to calculate paths to multiple destinations either directly or through entrance teleports and elevators.SmartRoaming: A static class that reimplements the vanilla AI search routine using SmartPathTask to allow enemies that choose to use it to roam through elevators.NavMeshQueryUtils.FindStraightPath to result in a final corner at the destination.NavMeshQueryUtils.FindStraightPath to use Vector3 instead of float3, as the Unity runtime assumes the memory layout matches Vector3 internally.NavMeshQueryUtils.FindStraightPath call through to the Unity runtime instead of reimplementing the algorithm. The results should now match the output from NavMeshPath.corners perfectly.NavMeshQueryUtils.FindStraightPath in favor of one that requires less allocations to match the native Unity function's signature.FindPathJob.NavMeshReadLocker in favor of a new value-type version in the Utilities namespace.NavMeshLock to help avoid deadlocks.NavMeshLock safeties that were causing exceptions when apparently taking read locks on the main thread.NavMeshLock that is used safely.TogglableProfilerAuto methods public.FindPathJob was not taking the read lock at the start of the job, but would later take the lock without releasing it, which could result in deadlocks.NavMeshQuery.UpdateFindPath() with an iteration limit, and unlocking the navmesh read between calls.PooledFindPathJob back to the pool to avoid null error spam.Initial version. Public-facing API includes:
FindPathJob: A simple job to find a valid path for an agent to traverse between a start and end position.JobPools: A static class providing pooled FindPathJob instances that can be reused by any API users.NavMeshLock: Provides methods to prevent crashes when running pathfinding off the main thread.PathfindingJobSharedResources: A static class that provides a NativeArray<NavMeshQuery> that can be passed to a job to access a thread-specific instance of NavMeshQuery.AgentExtensions.GetAgentPathOrigin(this NavMeshAgent): Gets the position that paths originating from an agent should start from. This avoids pathing failure when crossing links.Pathfinding.FindStraightPath(...): Gets a straight path from the result of a NavMeshQuery.