Class NavmeshPrefab Extends VersionedMonoBehaviour
Stores a set of navmesh tiles which can be placed on a recast graph.
This component is used to store chunks of a RecastGraph to a file and then be able to efficiently load them and place them on an existing recast graph. A typical use case is if you have a procedurally generated level consisting of multiple rooms, and scanning the graph after the level has been generated is too expensive. In this scenario, each room can have its own NavmeshPrefab component which stores the navmesh for just that room, and then when the level is generated all the NavmeshPrefab components will load their tiles and place them on the recast graph, joining them together at the seams.
Since this component works on tiles, the size of a NavmeshPrefab must be a multiple of the graph's tile size. The tile size of a recast graph is determined by multiplying the RecastGraph.cellSize with the tile size in voxels (RecastGraph.editorTileSize). When a NavmeshPrefab is placed on a recast graph, it will load the tiles into the closest spot (snapping the position and rotation). The NavmeshPrefab will even resize the graph to make it larger in case you want to place a NavmeshPrefab outside the existing bounds of the graph.
Usage
Attach a NavmeshPrefab component to a GameObject (typically a prefab) that you want to store the navmesh for.
Make sure you have a RecastGraph elsewhere in the scene with the same settings that you use for the game.
Adjust the bounding box to fit your game object. The bounding box should be a multiple of the tile size of the recast graph.
In the inspector, click the "Scan" button to scan the graph and store the navmesh as a file, referenced by the NavmeshPrefab component.
Make sure the rendered navmesh looks ok in the scene view.
In your game, instantiate a prefab with the NavmeshComponent. It will automatically load its stored tiles and place them on the first recast graph in the scene.
If you have multiple recast graphs you may not want it to always use the first recast graph. In that case you can set the applyOnStart field to false and call the Apply(RecastGraph) method manually.
Accounting for borders
When scanning a recast graph (and by extension a NavmeshPrefab), a margin is always added around parts of the graph the agent cannot traverse. This can become problematic when scanning individual chunks separate from the rest of the world, because each one will have a small border of unwalkable space. The result is that when you place them on a recast graph, they will not be able to connect to each other. One way to solve this is to scan the prefab together with a mesh that is slightly larger than the prefab, extending the walkable surface enough so that no border is added. In the image below, this mesh is displayed in white. It can be convenient to make this an invisible collider on the prefab that is excluded from physics, but is included in the graph's rasterization layer mask. Now that the border has been removed, the chunks can be placed next to each other and be able to connect.
Loading tiles into a graph
If applyOnStart is true, the tiles will be loaded into the first recast graph in the scene when the game starts. If the recast graph is not scanned, it will be initialized with empty tiles and then the tiles will be loaded into it. So if your world is made up entirely of NavmeshPrefabs, you can skip scanning for performance by setting A* Inspector -> Settings -> Scan On Awake to false.
You can also apply a NavmeshPrefab to a graph manually by calling the Apply(RecastGraph) method.
Inner Types
Public Methods
Applies the navmesh stored in this prefab to the first recast graph in the scene.
Applies the navmesh stored in this prefab to the given graph.
Saves the given data to the serializedNavmesh field, or creates a new file if none exists.
Scans the navmesh using the first recast graph in the scene, and returns a serialized byte representation.
Scans the navmesh and returns a serialized byte representation.
Scans the navmesh asynchronously and returns a promise of a byte representation.
Rounds the size of the bounds to the closest multiple of the tile size in the graph, ensuring that the bounds cover at least 1x1 tiles.
Moves and rotates this object so that it is aligned with tiles in the first recast graph in the scene.
Moves and rotates this object so that it is aligned with tiles in the given graph.
Public Static Methods
Rounds the size of the bounds to the closest multiple of the tile size in the graph, ensuring that the bounds cover at least 1x1 tiles.
Public Variables
If true, the tiles stored in this prefab will be loaded and applied to the first recast graph in the scene when this GameObject is created.
Bounding box for the navmesh to be stored in this prefab.
Reference to the serialized tile data.
Private/Protected Members
Handle serialization backwards compatibility.
Handle serialization backwards compatibility.
Start is called before the first frame update.