NavMeshLoader中的parse函数根据传入的二进制数据,解析并生成导航网格数据。
NavMeshLoader.parse(data)
data: ArrayBuffer类型,二进制数据NavMesh: NavMesh类型,导航网格数据const loader = new NavMeshLoader();
const xhr = new XMLHttpRequest();
xhr.open("GET", "myNavMesh.bin", true);
xhr.responseType = "arraybuffer";
xhr.onload = () => {
const navmesh = loader.parse(xhr.response);
// navmesh包含导航网格数据
}
xhr.send();
parse函数接受一个二进制数据缓冲区,首先解析头部信息,然后通过读取二进制数据中的各个数据块信息,生成导航网格数据。
头部信息总共占用16个字节,包含以下字段:
magicNumber: 需要为"NVMESH11",8字节。version: 版本号,1个字节。navmeshCount: 导航网格数量,4个字节。数据块是二进制数据中的重要组成部分,包含了该导航网格的各种关键信息。解析器会根据已知的NavMeshDataBlockType枚举值确定并解析不同的数据块。
目前所支持的数据块枚举值及其含义如下:
POSITION: 顶点坐标数据块。INDEX: 三角形面片数据块。POLY: 多边形数据块,包含各多边形的顶点索引。MESHEDGE: 多边形网格边缘数据块。VERTEX: 多边形顶点数据块,包含每个多边形的中心点位置。DETAILMESH: 细节网格数据块。DETAILTRI: 细节网格三角形面片数据块。BVH: 用于加速路径查询的BVH树数据块。解析完各个数据块之后,NavMesh类的实例就被创建了。NavMesh包含了所有导航网格所需的数据,其中NavMesh类中提供了相关的取值方法来读取各个数据块中的具体信息。