Unity3d的NavMesh信息导出与服务器端(KBEngine)的使用(一)

前言:

    这篇文档写了很久了,今天有群里朋友询问,干脆贴出来一起学习下吧。

一、在服务器中使用Recast Navigation进行导航的时候,可以使用Unity场景中的NavMesh信息,导出静态导航网格,提供给客户端或者服务器使用。

二、借助CritterAI插件,在Unity中生成.navmesh静态导航文件。CritterAI下载地址

1. 解压unity3d_nav_critterai-master.zip文件,在项目中,把unity3d_nav_critterai文件夹下相应Unity版本中的Assets放入到Unity3d项目中的Assets文件夹下。


2. 此时的Unity3d的编辑器中会出现CritterAI

点击CritterAI->Create NMGen Assets->Navmesh Build : Standard进行初始化CAI文件,

 

初始化完成后,项目目录中将出现几个文件:

CAIBakedNavmesh.asset

MeshCompiler.asset

NavmeshBuild.asset

如下图所示:

        

3. 如果使用Terrain来做地图导航,场景中新建Terrain,目录中就存在一个对应的New Terrain.asset资源文件,

 

添加一个能生成寻路网格的编辑器CritterAI->Create NMGen Assets->Compiler : Terrain(该目录下有多个编辑器,可以根据场景地图的需求进行选择,常用的为TerrainMeshCompilerMeshCompiler默认的有,表示添加当前场景中存在MeshFilter组件的物体进入导航系统中)

然后,把我们创建的Terrain的资源文件New Terrain.asset绑定到TerrainCompiler上。

 

4. NavMeshBuild中设置Build的参数,在Input Configuration中点击Add添加新建的TerrainCompiler作为Processors的列表成员。

Build参数类似Unity3dBake时候的参数,下图中的参数,是官网中生成navmesh文件的参数。具体详细设置可以参考官网文档http://www.critterai.org/projects/cainav/doc/

 

最后点击BuileBake,开始将当前Processors列表中加入的所有成员,包括CompilerFilter生成navmesh文件

5. BuildBake后,选中CAIBakeNavMesh,点击Save,导出为navmesh文件,此时会生成两个相应的文件,例如xinshoucun.navmeshsrv_xinshoucun.navmesh,其中srv_开头的文件用于服务端寻路,另一个是用于客户端使用该插件寻路。我们在服务器使用的为srv_xinshoucun.navmesh文件。

  

6. 至此,navmesh文件生成,如果是在场景中,除了MeshFilterTerrain,有其他的实体需要在导航的过程中参与,可以使用ComponentFilter来做

例如:在使用Component FilterTag后,项目中会出现TagInputFilter,选中之后,在Tags下,可以选择当前场景中所有的GameObject或者Prefabs的标签,选定指定的标签。

 

在加入了Filter后,在NavMeshBuild的时候,要在Processors列表中加入TagInputFilter,再执行以上的BuildBake的操作,即可将该标签下的物体加入导航系统中。

 

7. 如果是用客户端寻路,在生成完毕后,建议删除Unity3d项目中Assets\Plugins下关于CAINav的文件,否则启动游戏可能会造成无法导出游戏的错误,原因未知,官网中没有说明。我们使用服务器导航,可以忽略此步骤。

下一篇: 客户端导出NavMesh信息后,服务器的使用

猜你喜欢

转载自blog.csdn.net/mango9126/article/details/79390543