One use of accessing the Navigation Mesh Rig in code is to generate a Navigation Mesh outside of the editor.
using RAIN.Navigation.NavMesh;
using System.Threading;
using UnityEngine;
public class NavmeshGenerator : MonoBehaviour
{
[SerializeField]
private bool _test = false;
[SerializeField]
private int _threadCount = 4;
// This is just to test the runtime generation
public void Update()
{
if (_test)
{
GenerateNavmesh();
_test = false;
}
}
// This will regenerate the navigation mesh when called
public void GenerateNavmesh()
{
NavMeshRig tRig = GetComponent<NavMeshRig>();
// Unregister any navigation mesh we may already have (probably none if you are using this)
tRig.NavMesh.UnregisterNavigationGraph();
tRig.NavMesh.StartCreatingContours(tRig, _threadCount);
while (tRig.NavMesh.Creating)
{
tRig.NavMesh.CreateContours();
// This could be changed to a yield (and the function to a coroutine) although as
// of RAIN of 2.1.4.0 (fixed since then), our navigation mesh editor has issues with it
Thread.Sleep(10);
}
tRig.NavMesh.RegisterNavigationGraph();
}
}