Unity3d的NavMesh信息导出与服务器端(KBEngine)的使用(一)
2018-02-27 16:58
369 查看
前言:
这篇文档写了很久了,今天有群里朋友询问,干脆贴出来一起学习下吧。
一、在服务器中使用Recast Navigation进行导航的时候,可以使用Unity场景中的NavMesh信息,导出静态导航网格,提供给客户端或者服务器使用。
二、借助CritterAI插件,在Unity中生成.navmesh静态导航文件。CritterAI下载地址
1. 解压unity3d_nav_critterai-master.zip文件,在项目中,把unity3d_nav_critterai文件夹下相应Unity版本中的Assets放入到Unity3d项目中的Assets文件夹下。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/27/3288ea3e2bf12f82a63045f9c761e805)
2. 此时的Unity3d的编辑器中会出现CritterAI,
点击CritterAI->Create NMGen Assets->Navmesh Build : Standard进行初始化CAI文件,
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/27/7b21b67c3ca60b61fb266cd853562daf)
初始化完成后,项目目录中将出现几个文件: CAIBakedNavmesh.asset MeshCompiler.asset NavmeshBuild.asset如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/27/a5fb162f42815f66affd9ee7c6353d47)
3. 如果使用Terrain来做地图导航,场景中新建Terrain,目录中就存在一个对应的New Terrain.asset资源文件,
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/27/3c7a6fce6250178c9780d675601f9eb2)
添加一个能生成寻路网格的编辑器CritterAI->Create NMGen Assets->Compiler : Terrain(该目录下有多个编辑器,可以根据场景地图的需求进行选择,常用的为Terrain和MeshCompiler,MeshCompiler默认的有,表示添加当前场景中存在MeshFilter组件的物体进入导航系统中)
然后,把我们创建的Terrain的资源文件New Terrain.asset绑定到TerrainCompiler上。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/27/732d9ad92e345af0635b1b5e210839ab)
4. 在NavMeshBuild中设置Build的参数,在Input Configuration中点击Add添加新建的TerrainCompiler作为Processors的列表成员。
Build参数类似Unity3d在Bake时候的参数,下图中的参数,是官网中生成navmesh文件的参数。具体详细设置可以参考官网文档http://www.critterai.org/projects/cainav/doc/
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/27/148b567b6b6f42f820d9cf7a64ef66b3)
最后点击Buile和Bake,开始将当前Processors列表中加入的所有成员,包括Compiler和Filter生成navmesh文件
5. 在Build和Bake后,选中CAIBakeNavMesh,点击Save,导出为navmesh文件,此时会生成两个相应的文件,例如xinshoucun.navmesh和srv_xinshoucun.navmesh,其中srv_开头的文件用于服务端寻路,另一个是用于客户端使用该插件寻路。我们在服务器使用的为srv_xinshoucun.navmesh文件。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/27/a824fde63721f97baee002eb3f1edf1a)
6. 至此,navmesh文件生成,如果是在场景中,除了MeshFilter和Terrain,有其他的实体需要在导航的过程中参与,可以使用ComponentFilter来做
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/27/dc58f4967301eaac2481e01f66f33bfe)
例如:在使用Component Filter:Tag后,项目中会出现TagInputFilter,选中之后,在Tags下,可以选择当前场景中所有的GameObject或者Prefabs的标签,选定指定的标签。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/27/53c5615e94586c61b64ab4823729676a)
在加入了Filter后,在NavMeshBuild的时候,要在Processors列表中加入TagInputFilter,再执行以上的Build和Bake的操作,即可将该标签下的物体加入导航系统中。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/27/63073b216a37fcd2873e30d679d97acb)
7. 如果是用客户端寻路,在生成完毕后,建议删除Unity3d项目中Assets\Plugins下关于CAINav的文件,否则启动游戏可能会造成无法导出游戏的错误,原因未知,官网中没有说明。我们使用服务器导航,可以忽略此步骤。
下一篇:客户端导出NavMesh信息后,服务器的使用
这篇文档写了很久了,今天有群里朋友询问,干脆贴出来一起学习下吧。
一、在服务器中使用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信息后,服务器的使用
相关文章推荐
- Unity3d的NavMesh信息导出与服务器端(KBEngine)的使用(二)
- Unity3d开发(十三)导出NavMesh可行走区域信息
- Unity3D - 关于Delegate - SignalSlot信息槽的使用和SendMessage取替
- 使用dbms_stats.export导出统计信息
- 如何使用3dmax导出插件导出模型信息
- Unity3d 寻路NavMeshAgent使用实现
- android端和Struts2服务器端通信,交互信息,参数采用JSON,使用了HttpClient与HttpPost类
- 关于用Max导出Unity3D使用的FBX文件流程注解
- 使用Pushlet来实现服务器端向客户端推送信息
- android端和Struts2服务器端通信,交互信息,参数采用JSON,使用了HttpClient与HttpPost类
- Unity3D - 关于Delegate - SignalSlot信息槽的使用和SendMessage取替
- 使用VC6编写程序导出Outlook联系人信息
- 使用Pushlet来实现服务器端向客户端推送信息
- Unity3D - 关于Delegate - SignalSlot信息槽的使用和SendMessage取替
- Unity3D 导出apk 在真机调试时, 使用光贴图的模型丢失材质的BUG
- 使用Java应用程序导出Mysql 数据库里面的基本表信息
- 在Java中使用HttpURLConnection发送http客户端请求、服务器端返回信息、接受服务器端的信息
- 使用SYSTEMINFO类获取UNITY3D运行设备的各类信息(CPU类型,显卡类型等)
- 采用JSON交互信息的android端和Struts2服务器端通信,使用了HttpClient与HttpPos
- [Unity3D]使用OnGUI函数显示状态栏并且使用触发器修改玩家当前信息