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
类中提供了相关的取值方法来读取各个数据块中的具体信息。