From 57900bdc8bbf27644fdef46bb140569f69e46ae5 Mon Sep 17 00:00:00 2001
From: wuyanchen <307378529@qq.com>
Date: Thu, 11 Dec 2025 10:44:23 +0800
Subject: [PATCH] `
---
XNet.Business/MapAgent.cs | 63 ++++++++++++++++++++++++++++++
XNet.Business/XNet.Business.csproj | 14 +++++++
XNet.slnx | 1 +
XNet/Controllers/MapController.cs | 16 ++++++++
XNet/XNet.Api.csproj | 4 ++
5 files changed, 98 insertions(+)
create mode 100644 XNet.Business/MapAgent.cs
create mode 100644 XNet.Business/XNet.Business.csproj
create mode 100644 XNet/Controllers/MapController.cs
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