XNet/XNet.Business/MapAgent.cs
2025-12-11 10:44:23 +08:00

64 lines
2.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
}
/// <summary>
/// 加载Babylon.js RecastJSPlugin生成的NavMesh数据
/// </summary>
/// <param name="navmeshBytes">JS端导出的二进制字节数组</param>
/// <returns>构建好的DtNavMesh</returns>
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;
}
}
}
}