Fixed PointNode.ContainsConnection could throw an exception if the node didn't have any connections.
Fixed AILerp's started out with a destination set to (0,0,0) instead of not having a destination set. So if you did not set a destination for it, it would try to move to the world origin.
Fixed RichAI.desiredVelocity always being zero. Thanks sukrit1234 for finding the bug.
Added some video examples to AIPath.pickNextWaypointDist.
Fixed a bug introduced in 4.1.14 which caused scanning recast graphs in the Unity editor to fail with an error sometimes.
Fixed the position returned from querying the closest point on the graph to a point (AstarPath.GetNearest) on layered grid graphs would always be the node center, not the closest point on the node's surface. Thanks Kevin_Jenkins for reporting this. This caused among other things the ClosestOnNode option for the Seeker's StartEndModifier to be identical to the SnapToNode option.
Fixed RVOController.velocity being zero when the game was paused (Time.timeScale = 0).
It is now possible to use pathfinding from editor scripts. See Pathfinding from editor scripts.
Fixed LayerGridGraph.GetNode not performing out of bounds checks.
Exposed a public method PointGraph.ConnectNodes which can be useful if you are creating a graph from scratch using e.g PointGraph.AddNode.
Improved the Multiple agent types tutorial.
Improved the Writing a movement script tutorial, among other things it can now also be followed if you are creating a 2D game. The movement script that you write has also been improved.
Improved how the RichAI movement script keeps track of the node it is on. It should now be more stable in some cases, especially when the ground's y-coordinate lines up badly with the y-coordinate of the navmesh.
Added an option to AIPath for constraining the agent to be inside the traversable surface of the graph at all times. I think it should work everywhere without any issues, but please post in the forum if anything seems to break.
Fixed the proper fonts were not imported in the documentation html, so for many browsers it fell back to some other less pretty font.
Navmesh assets used in the navmesh graph no longer have to be at the root of the Resources folder, they can be in any subfolder to the Resources folder.
Added tutorial for how to deal with agents of different sizes: Multiple agent types.
Fixed scanning recast graphs could in rare cases throw an exception due to a multithreading race condition. Thanks emrys90 for reporting the bug.
Fixed a regression in 4.0.6 which caused position based penalty to stop working for layered grid graphs. Thanks DougW for reporting the bug.
Rotation speed and acceleration are now decoupled for AIPath and RichAI. Previously the acceleration limited how quickly the agents could rotate due to how the math for centripetal acceleration works out.
Acceleration can now be set to a custom value on the AIPath class. It defaults to a 'Default' mode which calculates an acceleration such that the agent reaches its top speed in about 0.4 seconds. This is the same behaviour that was hardcoded in earlier versions.
Fixed a bug in GraphUtilities.GetContours for grid graphs when the nodes parameter was explicitly passed as non null that could cause some contours not to be generated. Thanks andrewBeers for reporting the bug.
Improved documentation for StartEndModifier.Exactness.
4.1.0 through 4.1.9 were beta versions, all their changelogs have been merged into this one.
AIPath now rotates towards actual movement direction when RVO is used.
The IAstarAI interface can now be used with all movement scripts.
Improved support for HiDPI (retina) screens as well as improved visual coherency for some icons.
Improved the 'eye' icon for when a graph's gizmos are disabled to make it easier to spot.
AIPath now works with point graphs in 2D as well (assuming the 'rotate in 2D' checkbox is enabled).
Multithreading is now enabled by default (1 thread).
The DynamicGridObstacle component now works with 2D colliders.
Reduced memory usage of the PointGraph when using optimizeForSparseGraph.
Improved the StartEndModifier inspector slightly.
The Seeker inspector now has support for multi-editing.
Reduced string allocations for error messages when paths fail.
Added support for 2D physics to the Pathfinding.RaycastModifier component.
Improved the inspector for AILerp.
Reduced allocations in the funnel modifier.
Added a method called SetPath to all movement scripts.
Added a new class GraphUtilities which has some utilities for extracting contours of graphs.
Added a documentation page on error messages: Error messages.
Added a tutorial on how to create a wandering AI: Wandering AI Tutorial.
Added tutorial on bitmasks: Bitmask Tutorial.
Various other documentation improvements and fixes.
The default value for RVOController.lockWhenNotMoving is now false.
Tiles are now enabled by default on recast graphs.
Deprecated the RVOController.ForceSetVelocity method. You should use the velocity property instead.
Removed NavGraph.UnloadGizmoMeshes because it was not used for anything.
Deprecated the NavGraph.ScanGraph method since it just does the same thing as NavGraph.Scan.
Deprecated the internal methods Path.LogError and Path.Log.
Added the new internal method Path.FailWithError which replaces LogError and Log.
Made the AIPath.TrySearchPath method private, it should never have been public to begin with.
Fixed some typos in the documentation for PathUtilities.BFS and PathUtilities.GetReachableNodes.
Fixed connection costs were assumed to be equal in both directions for bidirectional connections.
Fixed a compiler error when building for UWP/HoloLens.
Fixed some compiler warnings when using Unity 2017.3 or later.
Fixed the MultiTargetPathExample.cs.
Clamp recast graph bounding box size to be non-zero on all axes.
Fixed AILerp ceasing to work properly if one of the paths it tries to calculate fails.
Fixed a few compatiblity bugs relating to AIPath/RichAI that were introduced in 4.1.0.
Fixed the funnel modifier would sometimes clip a corner near the end of the path.
Fixed AIPath/RichAI would continue searching for paths even when the component had been disabled.
Fixed Linecast for navmesh and recast graphs not working for rotated graphs.
Fixed RVONavmesh component not working properly with grid graphs that had height differences.
Fixed 2D RVO agents sometimes ignoring obstacles.
Fixed RVONavmesh not removing the obstacles it had created when the component was disabled.
Fixed some cases where the funnel modifier would produce incorrect results.
Fixed BlockManager.BlockMode.AllExceptSelector could often produce incorrect results. Thanks Cquels for spotting the bug.
Fixed various bugs related to destroying/adding graphs that could cause exceptions. Thanks DougW for reporting this.
Fixed destroying a grid graph would not correctly clear all custom connections. Thanks DougW for reporting this.
Fixed the MultiTargetPath did not reset all fields to their default values when using path pooling.
Added some additional error validation in the MultiTargetPath class.
Fixed scanning a recast graph that was not using tiles using Unity 2017.1 or later on Windows could block indefinitely. Thanks David Drummond and ceebeee for reporting this.
Improved compatibility with Nintendo Switch. Thanks Noogy for the help.
Fixed GraphUpdateScene would not handle the GameObject's scale properly which could cause it to not update some nodes.
Fixed a regression in 4.0 which could cause the error to be omitted from log messages when paths failed.
Fixed scanning a graph that threw an error would prevent any future scans. Thanks Baste for reporting this.
Added a new get started video tutorial. See Get Started With The A* Pathfinding Project.
The PointGraph.nodeCount property is now protected instead of private, which fixes some compatibility issues.
Improved compatibility with Unity 2017.1, esp. when using the experimental .Net 4.6 target. Thanks Scott_Richmond for reporting the issues.
Fixed DynamicGridObstacle trying to update the graphs even when outside of play mode.
Fixed runtime error when targeting the Windows Store. Thanks cedtat for reporting the bug.
Fixed compilation error when targeting the Windows Store. Introduced in 4.0.3. Thanks cedtat for reporting the bug.
Fixed Unity's scene view picking being blocked by graph gizmos. Thanks Scott_Richmond for reporting the bug.
Fixed the GraphUpdateScene inspector showing a warning for one frame after the 'convex' field has been changed.
Fixed a few compiler warnings in Unity 5.6. Thanks TotalXep for reporting the issue.
Fixed graph drawing could generate large amounts of garbage due to a missing GetHashCode override which causes Mono to have to allocate some dummy objects.
Fixed graph gizmo lines could be rendered incorrectly on Unity 5.6 on mac and possibly on Windows too.
Exposed the GridGraph.LayerCount property which works for both grid graphs and layered grid graphs (for grid graphs it always returns 1).
Made the LayerGridGraph.layerCount field internal to discourage its use outside the LayerGridGraph class.
Fixed exception when destroying some graph types (introduced in 4.0.6). Thanks unfalco for reporting the bug.
Fixed exception in GridGraph.GetNodesInRegion when being called with an invalid rectangle or a rectangle or bounds object that was completely outside the graph. Thanks WillG for finding the bug.
Fixed AIPath/RichAI not rotating to the correct direction if they started in a rotation such that the forward axis was perpendicular to the movement plane.
Renamed AISimpleLerp to AILerp in the component menu as the documentation only refers to it by the name 'AILerp'.
Added a new documentation page and video tutorial (Pathfinding in 2D) showing how to configure pathfinding in 2D games.
Fixed a race condition which meant that if you called RichAI.UpdatePath, AILerp.SearchPath or AIPath.SearchPath during the same frame that the agent was created then the callback for that path would sometimes be missed and the AI would wait indefinitely for it. This could cause the agents to sometimes never start moving.
Fixed adding a new graph while graph updates were running at the same time could potentially cause errors.
Added NavGraph.exists which will become false when a graph has been destroyed.
Fixed TileHandlerHelper could throw exceptions if the graph it was tracking was destroyed.
Fixed TileHandlerHelper not detecting new NavmeshCut or NavmeshAdd components that were created before the TileHandlerHelper component was created or when it was disabled.
TileHandlerHelper no longer logs an error if it is created before a recast/navmesh graph exists in the scene and when one is created the TileHandlerHelper will automatically detect it and start to update it.
Fixed TileHandlerHelper could throw exceptions if the graph it was tracking changed dimensions.
Fixed recast graphs would always rasterize capsule colliders as if they had their 'direction' setting set to 'Y-axis'. Thanks emrys90 for reporting the bug.
The package now contains a 'documentation.html' file which contains an offline version of the 'Get Started' tutorial.
The 4.0 update combined with the Movement Pack caused some compiler errors previously.
Fixed code typo in the Writing Modifiers tutorial as well as made a few smaller improvements to it.
Fixed some cases where the LegacyRVOController would not behave like the RVOController before version 4.0.
Fixed LegacyAIPath not using the same custom inspector as the AIPath component.
Improved code style and improved documentation for some classes.
Reduced memory allocations a bit when using the NavmeshAdd component.
Fixed graph types not necessarily being initialized when scanning the graph outside of play mode.
Fixed LayerGridGraph not reporting scanning progress properly. This caused it to not work well with ScanAsync and when scanning the graph in the editor the progress bar would only update once the whole graph had been scanned.
Removed the DebugUtility class which was only used for development when debugging the recast graph.
Fixed a minor bug in the update checker.
Deduplicated code for drawing circles and other shapes using Debug.Draw* or Gizmos.Draw* and moved this code to a new class Pathfinding.Util.Draw.
Improved how AIPath and RichAI work with rigidbodies.
Added option for gravity to AIPath.
Removed the RichAI.raycastingForGroundPlacement field as it is automatically enabled now if any gravity is used.
AIPath and RichAI now inherit from the same base class Pathfinding.AIBase.
New Features And Improvements
The RVO system has been cleaned up a lot.
The RVOSimulator can now be configured for XZ space or XY space (2D).
Improved gizmos for the RVOController.
Added support for grid graphs to RVONavmesh.
Added a new example scene for RVO in 2D
Added a new example scene showing how to configure hexagon graphs.
Added gizmos for hexagon graphs (grid graphs with certain settings).
Improved behaviour of the AIPath movement script.
The agent should stop much more precisely at the end of the path now.
Reduced the likelihood of the agent spinning around when it reaches the end of the path.
Improved behaviour of the RichAI movement script.
The agent should stop much more precisely at the end of the path now.
Reduced the likelihood of the agent spinning around when it reaches the end of the path.
Added opaqueness slider for the gizmos under Inspector -> Settings -> Colors.
Individual graphs can now be scanned using AstarPath.Scan(NavGraph) and other related overloads.
'Min Area Size' has been removed. The edge cases are now handled automatically.
RaycastModifier now supports multi editing.
Added GraphNode.RandomPointOnSurface .
Added GraphNode.SurfaceArea .
Recast graph scanning is now multithreaded which can improve scan times significantly.
Improved performance of nearest node queries for Recast/navmesh graphs.
Recast graphs can now be rotated arbitrarily.
Navmesh cutting still works!
The RichAI script currently does not support movement on rotated graphs, but the AIPath script does.
Improved performance of navmesh cutting for large worlds with many tiles and NavmeshAdd components.
Recast graphs now use less memory due to the BBTree class now using around 70% less memory per node.
Recast graphs now allocate slightly less memory when recalculating tiles or scanning the graph.
Cell height on Recast graphs is now automatically set to a good value.
Navmesh cutting is now a bit better at using object pooling to avoid allocations.
Navmesh cutting now uses more pooling to reduce allocations slightly.
Added GridGraph.GetNodesInRegion(IntRect). Also works for layered grid graphs.
Layered grid graphs now have support for 'Erosion Uses Tags'.
The ProceduralGridMover component now works with LayerGridGraph as well.
Improved GridGraph.RelocateNodes which is now a lot more resilient against floating point errors.
Added dimetric (60°) to the list of default values for the isometric angle field on grid graphs.
Improved styling of some help boxes in the grid graph inspector when using the dark UI skin.
Moved mesh collecting code for Recast graphs to a separate class to improve readability.
The default radius, height and center for RVOControllers is now 0.5, 2 and 1 respectively.
Renamed GridNode.GetConnectionInternal to HasConnectionInDirection.
Renamed NNInfo.clampedPosition to NNInfo.position.
Renamed AIPath.turningSpeed to rotationSpeed.
Replaced all instances of GraphNodeDelegate with the equivalent type System.Action<GraphNode>.
Moved GetNeighbourAlongDirection to GridNodeBase and made it public.
An overload of the GridGraph.CalculateConnections method has been made non-static.
MonoModifier.OnDestroy is now a virtual function.
AstarPath.IsUsingMultithreading and NumbParallelThreads have been made non-static.
AstarPath.inGameDebugPath is now private.
AstarPath.lastScanTime is now read only.
Removed BBTree.QueryCircle and BBTree.Query since they were not used anywhere.
Removed the Path.searchIterations field because it wasn't very useful even as debug information.
Removed the Path.maxFrameTime field because it was not used.
Removed the Path.callTime property because it was not used.
Removed the ABPath.startHint, ABPath.endHint fields because they were not used.
Removed the ABPath.recalcStartEndCosts field because it was not used.
Removed the Polygon.Subdivide method because it was not used anywhere.
Removed the NavGraph.Awake method because it was not used for anything.
Removed various unused Recast code.
Removed the since long deprecated example script AIFollow.
Removed the AdaptiveSampling algorithm for local avoidance. Only GradientDescent is used now.
Removed empty PostProcess method in NavMeshGraph.
Fixed LayerGridGraphs' "max climb" setting not working properly with rotated graphs.
Fixed LayerGridGraphs' "character height" setting not working properly with rotated graphs.
Fixed LayerGridGraphs assuming there were no obstacles nearby if no ground was found.
Fixed graph updates on LayeredGridGraphs not respecting GraphUpdateObject.resetPenaltyOnPhysics.
Fixed potential memory leak when calling RecalculateCell on a layered grid graph.
Fixed not being able to multi-edit RVOSquareObstacle components.
Fixed Path.immediateCallback not being reset to null when using path pooling.
Fixed AstarWorkItem.init could be called multiple times.
Fixed some documentation typos.
Various other small fixes in the AstarDebugger class.
Fixed GridGraph.GetNearest and NavGraph.GetNearest not handling constraint=null.
Renamed BinaryHeapM to BinaryHeap.
Renamed ExtraMesh to RasterizationMesh.
Refactored TileHandler.CutPoly to reduce code messiness and also fixed some edge case bugs.
Fixed the 'Optimization' tab sometimes logging errors when clicking Apply on Unity 5.4 and higher.
More UWP fixes (pro version only).
Dropped support for Unity 5.1.
New Features and Improvements
Improved inspector for NavmeshCut.
LevelGridNode now has support for custom non-grid connections (just like GridNode has).
Added GridNode.XCoordinateInGrid and GridNode.ZCoordinateInGrid.
Improved documentation for GraphUpdateShape a bit.
Removed EditorUtilities.GetMd5Hash since it was not used anywhere.
Deprecated TileHandler.GetTileType and TileHandler.GetTileTypeCount.
Seeker.StartPath now properly handles MultiTargetPath objects as well.
Removed GridGraph.bounds since it was not used or set anywhere.
Changed how the 'Save & Load' tab looks to make it easier to use.
Removed ConnectionType enum since it was not used anywhere.
Removed NodeDelegate and GetNextTargetDelegate since they were not used anywhere.
Fixed the EndingCondition example script.
Fixed some documentation typos.
Fixed GridNodes not serializing custom connections.
Fixed nodes could potentially get incorrect graph indices assigned when additive loading was used.
3.8.3 through 3.8.5 were beta versions
DynamicGridObstacle now handles rotation and scaling better.
Reduced allocations due to coroutines in DynamicGridObstacle.
Fixed typo in documentation for ProceduralGridMover.floodFill.
New Features and Improvements
SimpleSmoothModifier now has support for multi editing.
Added a new 2D example scene which uses the new AILerp movement script.
Improved GUI for the tag mask field on the Seeker.
All code is now consistently formatted, utilising the excellent Uncrustify tool.
Fixed potential bug when loading graphs from a file and one or more of the graphs were null.
Fixed incorrect documentation for GridNode.NodeInGridIndex. Thanks mfjk for reporting it!
Fixed typo in a recast graph log message (where -> were). Thanks bigdaddio for reporting it!
Fixed SimpleSmoothModifier not always including the exact start point of the path.
Fixed 3 compiler warnings about using some deprecated Unity methods.
A 'Recyle' method is no longer required on path classes (reduced boilerplate).
Removed old IFunnelGraph interface since it was not used by anything.
Removed old ConvexMeshNode class since it was not used by anything.
Removed old script NavmeshController since it has been disabled since a few versions.
Removed Int3.DivBy2, Int3.unsafeSqrMagnitude and Int3.NormalizeTo since they were not used anywere.
Deprecated Int2.Rotate since it was not used anywhere.
Deprecated Int3.worldMagnitude since it was not used anywhere.
Fixed sometimes not being able to use the Optimizations tab on newer versions of Unity.
AIPath now uses the cached transform field in all cases for slightly better performance.
Removed undocumented compiler directive ASTAR_CONSTANT_PENALTY and replaced with ASTAR_NO_TRAVERSAL_COST which can strip out code handling penalties to get slightly better pathfinding performance (still not documented though as it is not really a big performance boost).
Fixed MultiTargetPath could return the wrong path if the target of the path was the same as the start point.
Fixed MultiTargetPath could sometimes throw exceptions when using more than one pathfinding thread.
MultiTargetPath will now set path and vectorPath to the shortest path even if pathsForAll is true.
The log output for MultiTargetPath now contains the length (in nodes) of the shortest path.
Fixed RecastGraph throwing exceptions when trying to rasterize trees with missing (null) prefabs. Now they will simply be ignored.
Removed RecastGraph.bbTree since it was not used for anything (bbTrees are stored inside each tile since a few versions)
Improved performance of loading and updating large recast graph tiles (improved performance of internal AABB tree).
Removed support for the compiler directive ASTAR_OLD_BBTREE.
Rewrote several documentation pages to try to explain concepts better and fixed some old code.
Added an overload of Pathfinding.PathUtilities.IsPathPossible which takes a tag mask.
XPath now works again.
Added AstarData.layerGridGraph shortcut.
Fixed compilation errors for Windows Store. The errors mentioned ThreadPriority and VolatileRead.
This did not happen when the node size was close to 1 and the grid was positioned close to the origin. Which it of course was in all my tests (tests are improved now).
This fixed a TON of bugs. If you relied on the old (buggy) behaviour you might have to change your algorithms a bit. It will now report more accurate hit information as well.
Removed code only necessary for compatibility with Unity 4.5 and lower.
Removed a lot of internal unused old code.
Renamed GridGraph.GetNodePosition to GridGraph.GraphPointToWorld to avoid confusion.
Changed Seeker.traversableTags to be a simple int instead of a class.
GridNode and LevelGridNode now inherit from a shared base class called GridNodeBase.
Removed some methods which have been marked as obsolete for a very long time.
PathModifier and MonoModifier.ApplyOriginal
Some old variants of PathModifier.Apply
Int3.safeMagnitude and safeSqrMagnitude
GraphUpdateUtilities.IsPathPossible (this has been since long been moved to the PathUtilities class)
Point Graphs are now supported when using ASTAR_NO_JSON.
Fixed recast graphs not saving all fields when using ASTAR_NO_JSON.
Fixed recast graphs generating odd navmeshes on non-square terrains.
Recast graphs now show unwalkable nodes with a red outline instead of their normal colors.
Improved compatibility with WIIU and other big-endian platforms.
Fixed null reference exception in the PointGraph OnDrawGizmos method.
Fixed a few example scene errors in Unity 5.
Works in WebGL/IL2CPP (Unity 5.0.0p3). At least according to my limited tests.
Implemented RelocateNodes for recast graphs (however it cannot be used on tiled recast graphs).
Fixed AstarData.DeserializeGraphsAdditive (thanks tmcsweeney).
Removed GridGraph.scans because it is a pretty useless variable.
Removed NavGraph.CreateNodes (and overriden methods) since they were not used.
Made GridGraph.RemoveGridGraphFromStatic private.
Removed NavMeshGraph.DeserializeMeshNodes since it was not used.
Removed unused methods of little use: AstarData.GuidToIndex and AstarData.GuidToGraph.
Removed RecastGraph.vertices and RecastGraph.vectorVertices since they were obsolete and not used.
Removed some old Unity 4.3 and Unity 3 compatibility code.
Fixed RecastGraph bounds gizmos could sometimes be drawn with the wrong color.
Tweaked Undo behaviour, should be more stable now.
Reduced unecessary dirtying of the scene (thanks Ben Hymers).
Fixed RVOCoreSimulator.WallThickness (thanks tmcsweeney).
Improved compatibility with Xbox One.
Fixed RVOController layer field not working when multiple agents were selected.
Fixed grid nodes not being able to have custom connections in the free version.
Fixed runtime error on PS4.
This reduces the huge lag some users have been experiencing since Unity changed their Undo system.
You will need to open the AstarPath components which used cached startup, go to the save and load tab and press a button labeled "Transfer cache data to a separate file".
The JPS algorithm can be used to speed up pathfinding on grid graphs *without any penalties or tag weights applied* (it only works on uniformly weighted graphs). It can be several times faster than normal A*. It works best on open areas.
This can be applied on any static graph, i.e any graph which does not change. It requires a rather slow preprocessing step so graph updates will be really slow when using this. However when the preprocessing is done, it can speed up pathfinding with an order of magnitude. It works especially well in mazes with lots of options and dead ends.
Combined with JPS (mentioned above) I have seen it perform up to 20x better than regular A* with no heuristic optimizations.
Added PointNode.gameObject which will contain the GameObject each node was created from.
Added support for RVO obstacles.
It is by no means perfect at this point, but at least it works.
It took a lot of time working around weird Unity behaviours. For example Unity seems to send undo events when dragging items to object fields (why? no idea).
Dragging meshes to the NavmeshGraph.SourceMesh field works again.
See fix about undo above.
No memory usage increase, just shuffling bits around.
Deprecated compiler directive ASTAR_MORE_AREAS
No memory usage increase, just shuffling bits around. I still don't recommend that you actually use this many graphs.
This can be used to increase the penalty even more for large angles than for small angles (more than it already does, that is).
ASTAR_NO_JSON now works for recast graphs as well.
Added custom inspector for RecastMeshObj, hopefully it will not be as confusing anymore.
Removed some irrelevant defines from the Optimizations tab.
IAgent.Position cannot be changed anymore, instead use the Teleport and SetYPosition methods.
Deprecated the threadSafe paremeter on RegisterSafeUpdate, it is always treated as true now.
Tweaked ProceduralWorld script (used for the "Procedural" example scene) to reduce FPS drops.
In addition to avoiding confusion, this fixes a rare null reference exception which could happen when using the GraphUpdateUtilities.UpdateGraphsNoBlock method.
Fixed typo in RVOSimulator. desiredSimulatonFPS -> desiredSimulationFPS.
Fixed PathUtilies.BFS always returning zero nodes (thanks Ajveach).
Fixed compile error with monodevelop.
Fixed a bug which caused scanning to fail if more than one NavmeshGraph existed.
Fixed the lightweight local avoidance example scene which didn't work previously.
Fixed an exception when updating RecastGraphs and using RelevantGraphSurfaces and multithreading.
Fixed exceptions caused by starting paths from other threads than the Unity thread.
Fixed the Optimizations tab not working when JS Support was enabled.
Fixed some misspelled words in the documentation.
Removed some unused and/or redundant variables.
Improved Windows Store compatibility.
Lots of code cleanups and comments added to various scripts.
Fixed a bug which caused the points field on GraphUpdateScene to sometimes not be editable.
Fixed a runtime error on PS Vita.
Fixed an index out of range exception which could occur when scanning LayeredGridGraphs.
Fixed an index out of range exception which could occur when drawing gizmos for a LayeredGridGraph.
Fixed a number of warnings in Unity 5.
18.104.22.168 (3.6 beta 6, 2015-01-28)
22.214.171.124 (3.6 beta 5, 2015-01-28)
126.96.36.199 (3.6 beta 4, 2015-01-27)
188.8.131.52 (3.6 beta 3, 2014-10-14)
3.5.9 (3.6 beta 2, 2014-10-13)
3.5.8 (3.6 beta 1)
See release notes for 3.6
3.5.2 (2013-09-01) (tiny bugfix and small feature release)
Added isometric angle option for grid graphs to help with isometric 2D games.
Fixed a bug with the RVOAgent class which caused the LightweightRVO example scene to not work as intended (no agents were avoiding each other).
Fixed some documentation typos.
Fixed some compilations errors some people were having with other compilers than Unity's.
Binary heap switched out for a 4-ary heap. This improves pathfinding performances by about 5%.
Optimized scanning of navmesh graphs (not the recast graphs) Large meshes should be much faster to scan now.
Optimized BBTree (nearest node lookup for navmesh/recast graphs, pro version only) Nearest node queries on navmesh/recast graphs should be slightly faster now.
Minor updates to the documentation, esp. to the GraphNode class.
Vuforia test build
Fixed an issue where the recast graph would not rasterize terrains properly near the edges of it.
Added offline documentation (Documentation.zip)
Misc fixes for namespace conflicts people have been having. This should improve compatibility with other packages. You might need to delete the AstarPathfindingProject folder and reimport the package for everything to work.
Removed RVOSimulatorEditor from the free version, it was causing compiler errors.
Made PointGraph.nodes public.
Unity Asset Store forced me to increase version number.
The project no longer references assets from the Standard Assets folder (the package on the Unity Asset Store did so by mistake before).
Fixed a null reference exception when scanning recast graphs and rasterizing colliders.
Removed duplicate clipper_library.dll which was causing compiler errors.
Support for 2D Physics collision testing when using Grid Graphs.
Better warnings when using odd settings for Grid Graphs.
Queued graph updates are no longer being performed when the AstarPath object is destroyed, this just took time.
Fixed a bug introduced in 3.3.11 which forced grid graphs to be square in Unity versions earlier than 4.3.
Fixed a null reference in BBTree ( used by RecastGraph).
Fixed NavmeshGraph not rebuilding BBTree on cached start (causing performance issues on larger graphs).
Includes all changes from the beta releases below
Beta 3.3.14 ( available for everyone! )
Most scripts are now in namespaces to avoid conflicts with other packages.
GridNodes now support custom connections.
Cleanups, preparing for release.
Reverted to using an Int3 for GraphNode.position instead of an abstract Position property, the tiny memory gains were not worth it.
Beta 3.3.13 ( 4.3 compatible only )
Fixed an issue where deleting a NavmeshCut component would not update the underlaying graph.
Better update checking.
Beta 3.3.12 ( 4.3 compatible only )
NodeLink component is now working correctly.
Added options for optimizations to the PointGraph.
Improved TileHandler and navmesh cutting.
Fixed rare bug which could mess up navmeshes when using navmesh cutting.
Beta 3.3.11 ( 4.3 compatible only )
Added an update notification window which pops up when there is a new version of the A* Pathfinding Project.
Lots of UI fixes for Unity 4.3
Lots of other UI fixes and imprements.
Fixed gravity for RichAI.
Fixed Undo for Unity 4.3
Added a new example scene showing a procedural environment.
Fixed a few bugs when updating Layered Grid Graphs causing incorrect connections to be created, and valid ones to be left out.
Fixed a null reference bug when removing RVO agents.
Fixed memory leaks when deserializing graphs or reloading scenes.
Added new tutorial page about recast graphs.
Recast Graph: Fixed a bug which could cause vertical surfaces to be ignored.
Removed support for C++ Recast.
Fixed rare bug which could mess up navmeshes when using navmesh cutting.
Improved TileHandler and navmesh cutting.
GraphModifiers now take O(n) (linear) time to destroy at end of game instead of O(n^2) (quadratic).
RecastGraph now has a toggle for using tiles or not.
Added RelevantGraphSurface which can be used with RecastGraphs to prune away non-relevant surfaces.
Removed RecastGraph.accurateNearestNode since it was not used anymore.
RecastGraph now has support for removing small areas.
Added toggle to show or hide connections between nodes on a recast graph.
PointNode has some graph searching methods overloaded specially. This increases performance and reduces alloacations when searching point graphs.
Reduced allocations when searching on RecastGraph.
Reduced allocations in RichAI and RichPath. Everything is pooled now, so for most requests no allocations will be done.
Reduced allocations in general by using "yield return null" instead of "yield return 0"
Fixed teleport for local avoidance agents. Previously moving an agent from one position to another could cause it to interpolate between those two positions for a brief amount of time instead of staying at the second position.
Nicer RichAI gizmo colors.
Fixed RichAI not using raycast when no path has been calculated.
Fixed stack overflow exception in RichPath
Fixed RichPath could sometimes generate invalid paths
Added gizmos to RichAI
Fixed grid graph updating could get messed up when using erosion.
... among other things, see below
Beta 3.3.5 and 3.3.6
Rewritten graph nodes. Nodes can now be created more easily (less overhead when creating nodes).
Graphs may use their custom optimized memory structure for storing nodes.
Performance improvements for scanning recast graphs.
Guarantees that the character stays on the navmesh
Minor deviations from the path can be fixed without a path recalculation.
Does not use path modifiers at all (for good reasons). It has an internal funnel modifier however.
Simple wall avoidance to avoid too much wall hugging.
Basic support for off-mesh links (see example scene).
Added several methods to pick random points (e.g for group movement) to Pathfinding.PathUtlitilies.
Funnel modifier on grid graphs will create wider funnels for diagonals which results in nicer paths.
If an exception is thrown during pathfinding, the program does no longer hang at quit.
Thread count used is now shown in the editor.
New example scene Door2 which uses the NavmeshCut component.
Fixed spelling error in GridGraph.uniformWidthDepthGrid.
RecastGraph will not rasterize triggers.
Fixed recast not being able to handle multiple terrains.
The list of nodes returned by a ConstantPath is now guaranteed to have no duplicates.
Many recast constants are now proper constants instead of static variables.
Fixed an ArgumentOutOfRange exception in ListPool class.
Much better member documentation for RVOController.
Exposed MaxNeighbours from IAgent to RVOController.
RVOCoreSimulator/RVOSimulator now cleans up the worker threads correctly.
Tiled recast graphs can now be serialized.
Cleaned up recast, put inside namespace and split into multiple files.
ListPool and friends are now threadsafe.
Removed Polygon.Dot since the Vector3 class already contains such a method.
Added Pathfinding.NavGraph.CountNodes function.
Removed GraphHitInfo.success field since it was not used.
Fixed a null reference exception in MultiTargetPath (thanks Dave for informing me about the bug).
GraphUpdateScene.useWorldSpace is now false per default.
StartEndModifier now uses ClosestOnNode for both startPoint and endPoint by default.
RVONavmesh does not work with tiled recast graphs.
Pooling of paths had been accidentally disabled in AIPath.
Added support for serializing dictionaries with integer keys via a Json Converter.
When using a non-positive maxDistance for point graphs less processing power will be used.
Removed unused 'recyclePaths' variable in the AIPath class.
NullReferenceException could occur if the Pathfinding.Node.connections array was null.
Fixed NullReferenceException which could occur sometimes when using a MultiTargetPath (Issue #16)
AlternativePath modifier now correctly resets penalties if it is destroyed.
RecastGraph can now rasterize colliders as well!
RecastGraph can rasterize colliders added to trees on unity terrains!
3.2.3 (free version mostly)
Some documentation updates
Fixed bug which caused compiler errors on build (player, not in editor).
Version number was by mistake set to 3.1 instead of 3.2 in the previous version.
A complete Local Avoidance system is now included in the pro version!
GraphUpdateScene has now many more tools and options which can be used.
Seeker.PostProcess function was added for easy postprocessing of paths calculated without a seeker.
AstarPath.WaitForPath. Wait (block) until a specific path has been calculated.
Path.WaitForPath. Wait using a coroutine until a specific path has been calculated.
Recast graph generation is now up to twice as fast!
Fixed some UI glitches in Unity 4.
Debugger component has more features and a slightly better layout.
Fixed a bug where updating a GridGraph loaded from file would throw a NullReferenceException.
Fixed a bug which could cause error messages for paths not to be logged
Navmesh2.shader defined "Cull Off" twice.
ClosestPointOnTriangle is now spelled correctly.
MineBotAI now uses Update instead of FixedUpdate.
Fixed recast graph bug when using multiple terrains. Previously only one terrain would be used.
Fixed some UI glitches in Unity 4.
NNInfo is now a struct.
GraphHitInfo is now a struct.
Moved IsPathPossible from GraphUpdateUtilities to PathUtilities.
Removed depracated methods AstarPath.AddToPathPool, RecyclePath, GetFromPathPool.
C++ Version of Recast does not work on Windows.
GraphUpdateScene does in some cases not draw correctly positioned gizmos.
3.1.4 (iOS fixes)
More fixes for the iOS platform.
The "JsonFx.Json.dll" file is now correctly named.
Removed unused code from DotNetZip which reduced the size of it with about 20 KB.
3.1.3 (free version only)
3.1.2 (small bugfix release)
Fixed a bug which caused builds for iPhone to fail.
Fixed a bug which caused runtime errors on the iPhone platform.
Fixed a bug which caused huge lag in the editor for some users when using grid graphs.
Recast graph does not work when using static batching on any objects included.
3.1.1 (small bugfix release)
Fixed some example scene bugs due to downgrading the project from Unity 3.5 to Unity 3.4
The color setting "Node Connection" now actually sets the colors of the node connections when no other information should be shown using the connection colors or when no data is available.
Put the Int3 class in a separate file.
Casting between Int3 and Vector3 is no longer implicit. This follows the rule of "if information might be lost: use explicit casts".
Renamed ListGraph to PointGraph. "ListGraph" has previously been used for historical reasons. PointGraph is a more suitable name.
Graph can now have names in the editor (just click the name in the graph list)
Graph Gizmos can now be selectively shown or hidden per graph (small "eye" icon to the right of the graph's name)
Added GraphUpdateUtilities with many useful functions for updating graphs.
Erosion for grid graphs can now use tags instead of walkability
Fixed a bug where using One Way links could in some cases result in a NullReferenceException being thrown.
Vector3 fields in the graph editors now look a bit better in Unity 3.5+. EditorGUILayout.Vector3Field didn't show the XYZ labels in a good way (no idea why)
GridGraph.useRaycastNormal is now enabled only if the Max Slope is less than 90 degrees. Previously it was a manual setting.
The keyboard shortcut to scan all graphs does now also work even when the graphs are not deserialized yet (which happens a lot in the editor)
Added NodeLink script, which can be attached to GameObjects to add manual links. This system will eventually replace the links system in the A* editor.
Added keyboard shortcuts for adding and removing links. See Menubar -> Edit -> Pathfinding
Some features are restricted to Unity 3.5 and newer because of technical limitations in earlier versions (especially multi-object editing related features).
3.1 beta (version number 184.108.40.206 in Unity due to technical limitations of the System.Versions class)
Multithreading is now enabled in the free version of the A* Pathfinding Project!
Better support for graph updates called during e.g OnPostScan.
PathID is now used as a short everywhere in the project
G,H and penalty is now used as unsigned integers everywhere in the project instead of signed integers.
There is now only one tag per node (if not the #define ConfigureTagsAsMultiple is set).
Fixed a bug which could make connections between graphs invalid when loading from file (would also log annoying error messages).
Erosion (GridGraph) can now be used even when updating the graph during runtime.
Fixed a bug where the GridGraph could return null from it's GetNearestForce calls which ended up later throwing a NullReferenceException.
FunnelModifier no longer warns if any graph in the path does not implement the IFunnelGraph interface (i.e have no support for the funnel algorithm) and instead falls back to add node positions to the path.
Added a new graph type : LayerGridGraph which works like a GridGraph, but has support for multiple layers of nodes (e.g multiple floors in a building).
ScanOnStartup is now exposed in the editor.
Separated temporary path data and connectivity data.
Rewritten multithreading. You can now run any number of threads in parallel.
To avoid possible infinite loops, paths are no longer returned with just an error when requested at times they should not (e.g right when destroying the pathfinding object)
Cleaned up code in AstarPath.cs, members are now structured and many obsolete members have been removed.
Rewritten serialization. Now uses Json for settings along with a small part hardcoded binary data (for performance and memory). This is a lot more stable and will be more forwards and backwards compatible. Data is now saved as zip files(in memory, but can be saved to file) which means you can actually edit them by hand if you want!
Added dependency JsonFx (modified for smaller code size and better compatibility).
Added dependency DotNetZip (reduced version and a bit modified) for zip compression.
Graph types wanting to serialize members must add the JsonOptIn attribute to the class and JsonMember to any members to serialize (in the JsonFx.Json namespace)
Graph types wanting to serialize a bit more data (custom), will have to override some new functions from the NavGraph class to do that instead of the old serialization functions.
Changed from using System.Guid to a custom written Guid implementation placed in Pathfinding.Util.Guid. This was done to improve compabitility with iOS and other platforms. Previously it could crash when trying to create one because System.Guid was not included in the runtime.
Renamed callback AstarPath.OnSafeNodeUpdate to AstarPath.OnSafeCallback (also added AstarPath.OnThreadSafeCallback)
MultiTargetPath would throw NullReferenceException if no valid start node was found, fixed now.
Binary heaps are now automatically expanded if needed, no annoying warning messages.
Fixed a bug where grid graphs would not update the correct area (using GraphUpdateObject) if it was rotated.
Node position precision increased from 100 steps per world unit to 1000 steps per world unit (if 1 world unit = 1m, that is mm precision). This also means that all costs and penalties in graphs will need to be multiplied by 10 to match the new scale. It also means the max range of node positions is reduced a bit... but it is still quite large (about 2 150 000 world units in either direction, that should be enough).
If Unity 3.5 is used, the EditorGUIUtility.isProSkin field is used to toggle between light and dark skin.
Added LayeredGridGraph which works almost the same as grid graphs, but support multiple layers of nodes.
Dropped Unity 3.3 support.
Known Bugs: The C++ version of Recast does not work on Windows
The List Graph's "raycast" variable is now serialized correctly, so it will be saved.
List graphs do not generate connections from nodes to themselves anymore (yielding slightly faster searches)
List graphs previously calculated cost values for connections which were very low (they should have been 100 times larger), this can have caused searches which were not very accurate on small scales since the values were rounded to the nearest integer.
Added Pathfinding.Path.recalcStartEndCosts to specify if the start and end nodes connection costs should be recalculated when searching to reflect small differences between the node's position and the actual used start point. It is on by default but if you change node connection costs you might want to switch it off to get more accurate paths.
Fixed a compile time warning in the free version from referecing obsolete variables in the project.
Added AstarPath.threadTimeoutFrames which specifies how long the pathfinding thread will wait for new work to turn up before aborting (due to request). This variable is not exposed in the inspector yet.
Fixed typo, either there are eight (8) or four (4) max connections per node in a GridGraph, never six (6).
AlternativePath will no longer cause errors when using multithreading!
Added Pathfinding.ConstantPath, a path type which finds all nodes in a specific distance (cost) from a start node.
Fixed a bug in MultiTargetPath which could make it extreamly slow to process. It would not use much CPU power, but it could take half a second for it to complete due to excessive yielding
Fixed a bug in FleePath, it now returns the correct path. It had previously sometimes returned the last node searched, but which was not necessarily the best end node (though it was often close)
Using #defines, the pathfinder can now be better profiled (see Optimizations tab -> Profile Astar)
Added example scene Path Types (mainly useful for A* Pro users, so I have only included it for them)
Added many more tooltips in the editor
Fixed a bug which would double the Y coordinate of nodes in grid graphs when loading from saved data (or caching startup)
Graph saving to file will now work better for users of the Free version, I had forgot to include a segment of code for Grid Graphs (sorry about that)
Some other bugfixes
Graph saving to file is now exposed for users of the Free version
Fixed a bug where penalties added using a GraphUpdateObject would be overriden if updatePhysics was turned on in the GraphUpdateObject
Fixed a bug where list graphs could ignore some children nodes, especially common if the hierarchy was deep
Fixed the case where empty messages would spam the log (instead of spamming somewhat meaningful messages) when path logging was set to Only Errors
Changed the NNConstraint used as default when calling NavGraph.GetNearest from NNConstraint.Default to NNConstraint.None, this is now the same as the default for AstarPath.GetNearest.
You can now set the size of the red cubes shown in place of unwalkable nodes (Settings–>Show Unwalkable Nodes–>Size)
Dynamic search of where the EditorAssets folder is, so now you can place it anywhere in the project.
Minor A* inspector enhancements.
Fixed a very rare bug which could, when using multithreading cause the pathfinding thread not to start after it has been terminated due to a long delay
Modifiers can now be enabled or disabled in the editor
Added custom inspector for the Simple Smooth Modifier. Hopefully it will now be easier to use (or at least get the hang on which fields you should change).
Added AIFollow.canSearch to disable or enable searching for paths due to popular request.
Added AIFollow.canMove to disable or enable moving due to popular request.
Changed behaviour of AIFollow.Stop, it will now set AIFollow.ccanSearch and AIFollow.ccanMove to false thus making it completely stop and stop searching for paths.
Removed Path.customData since it is a much better solution to create a new path class which inherits from Path.
Added Curved Nonuniform spline as a smoothing option for the Simple Smooth modifier.
Added Pathfinding.WillBlockPath as function for checking if a GraphUpdateObject would block pathfinding between two nodes (useful in TD games).
Unity References (GameObject's, Transforms and similar) are now serialized in another way, hopefully this will make it more stable as people have been having problems with the previous one, especially on the iPhone.
Added shortcuts to specific types of graphs, AstarData.navmesh, AstarData.gridGraph, AstarData.listGraph
Known Bugs: The C++ version of Recast does not work on Windows
Grid Graphs can now be scaled to allow non-square nodes, good for isometric games.
Added more options for custom links. For example individual nodes or connections can be either enabled or disabled. And penalty can be added to individual nodes
Placed the Scan keyboard shortcut code in a different place, hopefully it will work more often now
Disabled GUILayout in the AstarPath script for a possible small speed boost
Some debug variables (such as AstarPath.PathsCompleted) are now only updated if the ProfileAstar define is enabled
DynamicGridObstacle will now update nodes correctly when the object is destroyed
Unwalkable nodes no longer shows when Show Graphs is not toggled
Removed Path.multithreaded since it was not used
Removed Path.preCallback since it was obsolate
Added Pathfinding.XPath as a more customizable path
Added example of how to use MultiTargetPaths to the documentation as it was seriously lacking info on that area
The viewing mesh scaling for recast graphs is now correct also for the C# version
The StartEndModifier now changes the path length to 2 for correct applying if a path length of 1 was passed.
The progressbar is now removed even if an exception was thrown during scanning
Two new example scenes have been added, one for list graphs which includes sample links, and another one for recast graphs
Reverted back to manually setting the dark skin option, since it didn't work in all cases, however if a dark skin is detected, the user will be asked if he/she wants to enable the dark skin
Added gizmos for the AIFollow script which shows the current waypoint and a circle around it illustrating the distance required for it to be considered "reached".
The C# version of Recast does now use Character Radius instead of Erosion Radius (world units instead of voxels)
Fixed an IndexOutOfRange exception which could occur when saving a graph with no nodes to file
Known Bugs: The C++ version of Recast does not work on Windows
Removed the overload AstarData.AddGraph (string type, NavGraph graph) since it was obsolete. AstarData.AddGraph (Pathfinding.NavGraph) should be used now.
Fixed a few bugs in the FunnelModifier which could cause it to return invalid paths
A reference image can now be generated for the Use Texture option for Grid Graphs
Fixed an editor bug with graphs which had no editors
Graphs with no editors now show up in the Add New Graph list to show that they have been found, but they cannot be used
The Dark Skin is now automatically used if the rest of Unity uses the dark skin(hopefully)
Fixed a bug which could cause Unity to crash when using multithreading and creating a new AstarPath object during runtime
List Graphs can now gather nodes based on GameObject tags instead of all nodes as childs of a specific GameObject.
List Graphs can now search recursively for childs to the 'root' GameObject instead of just searching through the top-level children.
Added custom area colors which can be edited in the inspector (A* inspector –> Settings –> Color Settings –> Custom Area Colors)
Fixed a NullReference bug which could occur when loading a Unity Reference with the AstarSerializer.
Fixed some bugs with the FleePath and RandomPath which could cause the StartEndModifier to assign the wrong endpoint to the path.
Documentation is now more clear on what is A* Pathfinding Project Pro only features.
Pathfinding.NNConstraint now has a variable to constrain which graphs to search (A* Pro only).
This is also available for Pathfinding.GraphUpdateObject which now have a field for an NNConstraint where it can constrain which graphs to update.
StartPath calls on the Seeker can now take a parameter specifying which graphs to search for close nodes on (A* Pro only)
Added the delegate AstarPath.OnAwakeSettings which is called as the first thing in the Awake function, can be used to set up settings.
Pathfinding.UserConnection.doOverrideCost is now serialized correctly. This represents the toggle to the right of the "Cost" field when editing a link.
Fixed some bugs with the RecastGraph when spans were partially out-of-bounds, this could generate seemingly random holes in the mesh
3.0.4 (only pro version affected)
Added option to include or not include out of bounds voxels (Y axis below the graph only) for Recast graphs.
3.0.3 (only pro version affected)
Textures can now be used to add penalty, height or change walkability of a Grid Graph (A* Pro only)
Slope can now be used to add penalty to nodes
Height (Y position) can now be usd to add penalty to nodes
Prioritized graphs can be used to enable prioritizing some graphs before others when they are overlapping
Several bug fixes
Included a new DynamicGridObstacle.cs script which can be attached to any obstacle with a collider and it will update grids around it to account for changed position
Fixed Unity 3.3 compability
Rewrote the system from scratch
Easier to extend the system
x. releases are major rewrites or updates to the system.
.x releases are quite big feature updates
..x releases are the most common updates, fix bugs, add some features etc.
...x releases are quickfixes, most common when there was a really bad bug which needed fixing ASAP.