更新 10/03
好的,所以我发现了问题所在。C# 是一种有趣的古老语言..我改变了
int navMeshCount = navMesh.GetPath(ref start, ref end, routePolys, navMeshRoute, false);
至
var navMeshCount = navMesh.GetPath(ref start, ref end, routePolys, navMeshRoute, false);
最后我让寻路值起作用!
当我调试 routeNavMesh 数组时,我需要的值会填满。
http://i.imgur.com/QgH8UL6.png [有问题的调试屏幕截图]
一旦我完成,我会再次更新。
在让导航网格工作时遇到一些主要问题,特别是我无法让它进行任何寻路或让它以任何有用的方式响应我的 vector3 输入。
我正在研究 sunburn 引擎,它位于 XNA 4.0 之上,因此所有 XNA 功能仍然可用。
最近 Recast Navigation from digesting Duck 的博客被移植到 c# 中,我用它为我的关卡创建了导航网格。这是我一直试图遵循的教程/指南的链接:http: //xboxforums.create.msdn.com/forums/p/109484/647991.aspx
我不知道如何在 getpath 段上传递开始和结束值,这些是世界空间或对象空间中的值还是什么?如果我执行 vector3 值并将它们作为起始值和结束值输入(然后将它们设置在数组上的某个位置),我不会得到一个显示路径查找的值数组,我只是在 navmeshroute 中得到这两个逐字记录值大批。
这是我尝试运行路径的地方,它在我的更新中。
routePolys = new ushort[dtStatNavMesh.MAX_POLYS];
navMeshRoute = new Vector3[dtStatNavMesh.MAX_POLYS];
if (ks.IsKeyDown(Keys.L))
{
if (!runOnce)
{
start = new Vector3(0, 0, 0);
end = new Vector3(1000, 0, 1000);
ppos = x;
navMeshRoute[0].X = start.X;
navMeshRoute[0].Y = start.Y;
navMeshRoute[0].Z = start.Z;
navMeshRoute[count].X = end.X;
navMeshRoute[count].Y = end.Y;
navMeshRoute[count].Z = end.Z;
int navMeshStart = 0;
navMesh.GetPath(ref start, ref end, routePolys, navMeshRoute, true);
Console.WriteLine("navMeshPC" + navMesh.getPolyCount());
int navMeshCount = navMesh.GetPath(ref start, ref end, routePolys, navMeshRoute, true);
while (navMeshStart < navMeshCount)
{
routeNode = navMeshRoute[navMeshStart++];
}
Console.Out.WriteLine("NMc : " + navMeshCount);
}
}