using DotRecast.Detour; using System; using System.Collections.Generic; using System.Text; namespace XNet.Business { public class MapAgent { public MapAgent() { } public void Init() { DtMeshData navData = new DtMeshData(); DtNavMesh navMesh = new DtNavMesh(); } /// /// 加载Babylon.js RecastJSPlugin生成的NavMesh数据 /// /// JS端导出的二进制字节数组 /// 构建好的DtNavMesh private static DtNavMesh LoadBabylonNavmesh(byte[] navmeshBytes) { try { // 初始化NavMesh参数(使用Detour默认参数) DtNavMeshParams navMeshParams = new DtNavMeshParams { orig = new DotRecast.Core.Numerics.RcVec3f(0, 0, 0), // 场景原点(需与JS端烘焙时一致) tileWidth = 16, // Tile宽度(RecastJSPlugin默认16) tileHeight = 16, // Tile高度(RecastJSPlugin默认16) maxTiles = 1024, // 最大Tile数量(根据场景调整) maxPolys = 65536 // 最大多边形数量(根据场景调整) }; // 创建空的DtNavMesh DtNavMesh navMesh = new DtNavMesh(); navMesh.Init(navMeshParams, 6); // RecastJSPlugin的getNavmeshData返回的是单个Tile数据(大部分场景) // 读取Tile数据(Detour Tile格式) int tileRef = 0; // Tile索引(默认0,多Tile场景需循环解析) // 添加Tile到NavMesh DtMeshData dtMeshData = new DtMeshData(); //if (!status.Succeeded()) //{ // Console.WriteLine($"添加Tile失败,状态码:{status}"); // return null; //} return navMesh; } catch (Exception ex) { Console.WriteLine($"解析NavMesh失败:{ex.Message}"); return null; } } } }