前言:
上篇已经讲述了Unity3d的客户端NavMesh导航信息的导出,现在一起看下怎么在服务器使用,因为我们使用的服务器引擎是KBEngine,以此为例
1.将生成的srv_xinshuocun文件放到服务器的资源目录下,确保在cell/Space使用addSpaceGeometryMapping()函数加载几何映射的时候能读取到该文件。
例如,在kbengine_unity3d_demo中,加入导航的时候,根据resPath的配置(spaces/kbengine_unity3d_demo),将srv_xinshoucun.navmesh文件放入到该文件夹下,服务器启动的时候,即可加载到该文件。
2.加载几何映射的addSpaceGeometryMapping()函数中参数中,最后一个字典,表示给实体设置不同的layer参数,针对不同的layer,可以使用不同的navmesh文件进行导航。即同一个场景中可以使用多个navmesh进行导航,如果不使用最后的参数,默认会读取该文件夹下的所有navmesh文件。
spaceID | uint32,空间的ID,指定在哪个空间操作 |
mapper | 目前填None |
path | 包含几何数据的目录路径 即srv_文件路径 |
shouldLoadOnServer | 可选的boolean参数,指定是否在服务端上加载几何。默认为True |
params | 可选的PyDict参数,指定不同layer所使用的navmesh,例如: |
3.在服务端使用导航的时候,生成的实体,必须在在有效的导航区域内,即在NavMesh的地表上,如果在范围之外,导航会出错。
4.在addSpaceGeometryMapping()加载过有效的navmesh文件,并且当前的实体在有效的导航区域的时候,实体的canNavigate()函数会返回True,说明当前是在Space中可以使用导航。
5.如果canNavigate()返回为True,可以导航,在服务器端使用navigate()函数,来让当前的实体向一个目标点移动,成功或者失败都会调用回调函数,类似于没有导航时候用的moveToPoint()函数。