Building Height Mesh for Accurate Character Placement
Building Off-Mesh Links Automatically
Some use cases for Off-Mesh Links can be detected automatically. The two most common ones are: Drop-Down and Jump-Across.
Drop-Down links are created to drop down from a platform.
Jump-Across links are created to jump across a crevice.
In order to find the jump locations automatically, the build process walks along the edges of the NavMeshA mesh that Unity generates to approximate the walkable areas and obstacles in your environment for path finding and AI-controlled navigation. More info See in Glossary and checks if the landing location of the jump is on NavMesh. If the jump trajectory is unobstructed an Off-Mesh link is created.
Let’s set up automatic Off-Mesh Link generation. If you’re not familiar with NavMesh baking, take a look at Building a NavMesh.
First, the objects in the SceneA Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces. More info See in Glossary where the jump can start from needs to be marked. This is done my checking Generate Off-Mesh Links option in the Navigation Window under Objects tab.
The second step is to setup the drop-down and jump-across trajectories:
Drop-Down link generation is controlled by the Drop Height parameter. The parameter controls what is the highest drop that will be connected, setting the value to 0 will disable the generation.
The trajectory of the drop-down link is defined so that the horizontal travel (A) is: 2*agentRadius + 4*voxelSize. That is, the drop will land just beyond the edge of the platform. In addition the vertical travel (B) needs to be more than bake settings’ Step Height (otherwise we could just step down) and less than Drop Height. The adjustment by voxelA 3D pixel. More info See in Glossary size is done so that any round off errors during voxelization does not prevent the links being generated. You should set the Drop Height to a bit larger value than what you measure in your level, so that the links will connect properly.
Jump-Across link generation is controlled by the Jump Distance parameter. The parameter controls what is the furthest distance that will be connected. Setting the value to 0 will disable the generation.
The trajectory of the jump-across link is defined so that the horizontal travel (C) is more than 2*agentRadius and less than Jump Distance. In addition the landing location (D) must not be further than voxelSize from the level of the start location.
Now that objects are marked, and settings adjusted, it’s time to press Bake and you have will have automatically generated off-mesh links! When ever you change the scene and bake, the old links will be discarded and new links will be created based on the new scene.
Trouble Shooting
Things to keep in mind if Off-Mesh links are not generated at locations where you expect them to be:
Drop Height should a bit bigger than the actual distance measured in your level. This ensures that small deviations that happen during the NavMesh baking process will not prevent the link to be connected.
Jump Distance should be a bit longer than the actual distance measured in your level. The Jump Distance is measured from one location on a NavMesh to another location on the NavMesh, which means that you should add 2*agentRadius (plus a little) to make sure the crevices are crossed.