导航技术文档-1
发布时间:2017-02-23 来源:文档文库
小
中
大
字号:
导航技术
一、基本概念
UE4的导航底层是RecastNavigation的深度修改。 KBE的导航底层是RecastNavigation的原始版本
Areas(区域一般用来定义移动代价的。代价影响寻路。举个例子,穿越被标记为沼泽的区域时的代价花费可能比穿越标记为草地的区域的代价要高。
Flags(标志位可以用来控制一个节点的可行走属性。举个例子,一个作为'门'的多边形,在门关闭的时候,可以给这个多边形设置一个特殊的标志位,以表示它是不可通过的。或者设置一个特殊的标志位,只允许特定类型的角色通过。 多个导航层是指一张地图具有多个导航区域。但是只能使用其中一个区域进行导航。
二、简述UE4和KBE支持导航的情况
UE4目前支持Areas和多个导航层的概念。 UE4目前不支持导航数据导出和Flags概念,本项目通过修改UE4底层代码将其支持,所以需要用特制的UE4版本来导出导航。特制UE4路径:\\172.16.6.214\software\UE4。
KBE目前支持Areas、Flags和多个导航层的概念的。
三、多个导航层导出步骤
1、设置Supported Agents 打开“项目设置”“导航系统”,增加Supported Agents,Supported Agents数量就是层的数量,假定层的数量是N,如下图:
注意,由于UE4有BUG,NavAgentRadius、NavAgentHeight、NavAgentStepHeight其中一个参数,设置的时候,需要N层都相互相差>5cm,不然不会显示N层级。因为当三个参数设置误差在5cm内的时候,UE4会认为此二层为一个层。
2、铺设导航块 在体积框中使用NavMeshBoundsVolume进行铺设,在NavMeshBoundsVolume的
SupportedAgents属性,可以选择是属于哪个层的。如下图
3、生成导航 其实在铺设导航块的时候,UE4已经在自动生成导航了。也可以通过“构建”“构建路径”来生成。生成完导航后,会有N个RecastNavMesh,RecastNavMesh就是层的导航数据,可以设置RecastNavMesh的EnableDrawing使其显示出来。
4、导出导航数据 点击导出插件的ExportData按钮,导航数据就会生成在UE4Editor.exe的根目录下,导航的名称按照“层级.navmesh”来命名,如下图:
注意:导航按钮插件的启用通过“编辑”“Plugins”“Other”,将其中ExportData插件设置为Enable,然后重启客户端才能看到
四、Areas(区域导出
1、铺设Nav Modifier Component (导航修改器组件) 在体积框中使用Nav Modifier Component进行铺设,在其AreaClass属性的“+”号按钮增加新的区域
注意:UE4在此有BUG,需要重新启动UE4编辑器,增加的新的区域类型才能生效
2、Areas(区域类型属性 通过AreaClass属性的放大镜按钮,可以打开相应的Areas区域类型属性。 DefaultCast属性:travel cost multiplier for path distance FixedAreaEnteringCost属性:进入的权重。(entering cost)
SupportedAgents属性:表示此导航修改器对那层起作用 AreaFlags属性:区域的标志位
五、服务器导航
1、导航文件放置
导航放置路径为\server_trunk\res\spaces,可以为每张地图新建一个文件夹。如下图:
此文件夹里面就放置本项目导出的导航数据
2、服务器代码加载导航数据 加载导航函数:
def addSpaceGeometryMapping( spaceID, mapper, path, shouldLoadOnServer, params : 具体功能查看KBEngine API path路径为mash的根目录,比如上个图片的path路径为: path = “spaces\cun_lun_A1Navmesh”
服务器会对path路径下的mavmesh的文件名进行从小到大排序,依次赋予层级,层级