前言:
这篇文档写了很久了,今天有群里朋友询问,干脆贴出来一起学习下吧。
一、在服务器中使用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(该目录下有多个编辑器,可以根据场景地图的需求进行选择,常用的为Terrain和MeshCompiler,MeshCompiler默认的有,表示添加当前场景中存在MeshFilter组件的物体进入导航系统中)
然后,把我们创建的Terrain的资源文件New Terrain.asset绑定到TerrainCompiler上。
4. 在NavMeshBuild中设置Build的参数,在Input Configuration中点击Add添加新建的TerrainCompiler作为Processors的列表成员。
Build参数类似Unity3d在Bake时候的参数,下图中的参数,是官网中生成navmesh文件的参数。具体详细设置可以参考官网文档http://www.critterai.org/projects/cainav/doc/
最后点击Buile和Bake,开始将当前Processors列表中加入的所有成员,包括Compiler和Filter生成navmesh文件
5. 在Build和Bake后,选中CAIBakeNavMesh,点击Save,导出为navmesh文件,此时会生成两个相应的文件,例如xinshoucun.navmesh和srv_xinshoucun.navmesh,其中srv_开头的文件用于服务端寻路,另一个是用于客户端使用该插件寻路。我们在服务器使用的为srv_xinshoucun.navmesh文件。
6. 至此,navmesh文件生成,如果是在场景中,除了MeshFilter和Terrain,有其他的实体需要在导航的过程中参与,可以使用ComponentFilter来做
例如:在使用Component Filter:Tag后,项目中会出现TagInputFilter,选中之后,在Tags下,可以选择当前场景中所有的GameObject或者Prefabs的标签,选定指定的标签。
在加入了Filter后,在NavMeshBuild的时候,要在Processors列表中加入TagInputFilter,再执行以上的Build和Bake的操作,即可将该标签下的物体加入导航系统中。
7. 如果是用客户端寻路,在生成完毕后,建议删除Unity3d项目中Assets\Plugins下关于CAINav的文件,否则启动游戏可能会造成无法导出游戏的错误,原因未知,官网中没有说明。我们使用服务器导航,可以忽略此步骤。
下一篇: 客户端导出NavMesh信息后,服务器的使用