diff --git a/XNet.Business/MapAgent.cs b/XNet.Business/MapAgent.cs new file mode 100644 index 0000000..05ae889 --- /dev/null +++ b/XNet.Business/MapAgent.cs @@ -0,0 +1,63 @@ +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; + } + } + } +} diff --git a/XNet.Business/XNet.Business.csproj b/XNet.Business/XNet.Business.csproj new file mode 100644 index 0000000..d376023 --- /dev/null +++ b/XNet.Business/XNet.Business.csproj @@ -0,0 +1,14 @@ + + + + net10.0 + enable + enable + + + + + + + + diff --git a/XNet.slnx b/XNet.slnx index 5ef7e88..5de2763 100644 --- a/XNet.slnx +++ b/XNet.slnx @@ -1,3 +1,4 @@ + diff --git a/XNet/Controllers/MapController.cs b/XNet/Controllers/MapController.cs new file mode 100644 index 0000000..c1adad9 --- /dev/null +++ b/XNet/Controllers/MapController.cs @@ -0,0 +1,16 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; + +namespace XNet.Api.Controllers +{ + [Route("api/[controller]/[action]")] + [ApiController] + public class MapController : ControllerBase + { + [HttpGet] + public void MapInit() + { + + } + } +} diff --git a/XNet/XNet.Api.csproj b/XNet/XNet.Api.csproj index 4d4e419..1e3bbfe 100644 --- a/XNet/XNet.Api.csproj +++ b/XNet/XNet.Api.csproj @@ -12,6 +12,10 @@ + + + + True