在官方的Demo2(drop_plank)中主要演示的是动态加载NavMesh。
首先还是一样,我们需要布置好场景,然后设置好NavMeshAgent。和之前不一样的是,这次不在场景中设置NavMeshSurface进行烘托(Bake),因为NavMeshSurface适用于场景不在改变的情况,提前烘托好寻路的网格。但是在demo2中,场景的都是一块块分开的。只有在游戏运行的时候,通过添加平板来连接起来。这个时候需要使用NavMeshBuilder。
首先,我们在场景中能行走的物体(方块和木板)添加NavMeshSourceTag脚本。其主要内容就是将场景中添加了NavMeshSourceTag的物体的MeshFilter都存放在一个静态数组当中。在Collect方法中,创建一个NavMeshBuildSource数组,对应存放的MeshFilter,供后面使用。
[DefaultExecutionOrder(-200)]
public class NavMeshSourceTag : MonoBehaviour {
// Global containers for all active mesh/terrain tags
public static List<MeshFilter> m_Meshes = new List<MeshFilter>();
public static List<Terrain> m_Terrains = new List<Terrain>();
void OnEnable() {
var m = GetComponent<MeshFilter>();
if(m != null) {
m_Mes