问题标签 [navmesh]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1508 浏览

c# - 游戏 AI 的随机游走 + 探索算法。场景图块

我正在尝试提出一种在基于场景图块的游戏中随机行走的算法。walker 需要能够随机导航,直到探索完所有图块或找到下一个级别。

到目前为止,如果演员踩到它,我已经探索了瓷砖。

然后它找到到下一个图块中心的路径。

但是它失败的地方是它经常认为它已经完成了探索,或者没有剩下的瓷砖了。

有没有地方可以寻找一些例子,好像我要粘贴源代码会很长。

0 投票
1 回答
808 浏览

javascript - 导航网格寻路(在多边形中)

我正在用 JavaScript 开发一个点击式冒险游戏,我需要有关整个运动机制的帮助。

从我收集到的关于这个主题的信息来看,似乎有两个主要主题——导航网格和 A* 寻路算法。但是,在我的一生中,我找不到这些组合的 JS 实现。

我发现的所有 A* 实现都是基于网格的。

基本上,我正在寻找的是一种在大多边形内导航的方法。

我希望我有一定的意义,我不确定我自己是否完全理解它。

0 投票
1 回答
1489 浏览

mesh - 在 Ogre 中加载地形并使用 Recast/Detour 创建导航网格

我是使用 Ogre 的新手,尤其是 Recast/Detour,我需要一些帮助。

我正在 Ogre 中加载地形,并使用 Recast/Detour 在其顶部创建导航网格。我想加载更复杂的地形,因为到目前为止,我只能加载据我所知不能包含其他对象(如建筑物等)的 .mesh 文件。我有两种方法可以做到这一点:

1) 使用 Blender 将 .obj 文件导出为 .scene 文件。然后使用第三方 .scene 加载器,例如 DotScene,将它们加载到 Ogre 中。然后我必须弄清楚如何让 Recast 在整个场景之上创建导航网格。

2) 或者使用 Ogre 的新地形加载系统,我还没有阅读太多内容。

因此,如果您从事过使用 Ogre 和 Recast/Detour 的项目,您是如何完成地形的加载和导航网格的创建的?

编辑:我找到了第三个选项,它可以让我保留当前的解决方案,但也可以加载复杂的地形。我想出了一种使用 Blender 将 Ogre 网格组合成一个巨大的网格文件的方法。我仍然可以将地形加载为 .scene,但导航网格创建过程不适用于以这种方式加载的实体,而加载的巨型网格可以使用我已经拥有的相同功能。

0 投票
1 回答
1150 浏览

unity3d - 在统一 3d 中导入的 3d 模型上无法正确设置 NavMeshAgent

我正在尝试在统一 3d 中在导入的 3D 模型上设置 NavMeshAgent,但无法围绕我的 3d 模型正确设置 navMeshAgent。如果我扩展半径,它会覆盖比 3d 对象更多的无用部分。

0 投票
2 回答
2598 浏览

unity3d - Unity 中的导航网格是什么?

我想了解NavMeshUnity3d 的现状。为什么使用它?它为游戏开发者提供了哪些功能?

0 投票
2 回答
3452 浏览

c# - 将网格转换为图形以进行导航

旁注:我不确定这个问题是否属于游戏开发堆栈交换站点 - 但是,我觉得它属于这里,因为虽然上下文是游戏,但我希望实现的算法本身与应用程序无关。此外,我不是在寻找一种高级技术,因为我觉得我已经建立了一种,而是我正在寻求针对某个问题的更具体的帮助。无论如何,对于这个问题:

嘿大家!

我正在开发一个多人游戏,该游戏要求服务器可以为服务器控制的实体执行寻路。服务器是一个直接的 C# 应用程序,客户端使用 Unity 游戏引擎。在服务器上使用 Unity 不是一种选择。此外,我想完全避免使用本机库。

我已经检查了 Detour 的寻路功能,尽管它们确实有 C# 端口,但我宁愿自己实现实际的寻路位;因为这个过程足够简单,我希望它可以根据我的需要进行定制,以便它可以很好地与服务器上的现有组件配合使用。

Unity 内置了对 Recast/Detour 的支持。这很好,因为我可以在 Unity 中使用 Recast 来生成导航网格;然后使用我自己的寻路在服务器上使用它。问题是我似乎找不到合适的方法来根据 Unity/Recast 创建的网格生成图形。

我需要做的是在内存中创建一个图形,其中每个节点都是网格中的一个三角形,图形的每条边连接两个彼此相邻的三角形。

我能够从 Unity 的 API 中提取的唯一数据是生成的网格的顶点和三角形索引,因此我需要重新构建自己的图形。我的第一个实现只是为每个三角形创建一个节点,如果该三角形与另一个三角形共享另外两个点,则在它们之间创建一个链接 - 形成我的图形的边缘。

虽然这对大多数网格都很有效,但它不够用,因为似乎 Unity 正在吐出可以在区域(多边形)之间具有连接(边)的网格,即使它们不共享两个顶点。这是 Unity 将其生成的导航网格覆盖到我的关卡几何上的示例(Unity 确实将三角形合并为凸多边形,而我的代码没有 - 但是,无论哪种情况,问题仍然存在)

统一导航网格

在此示例中,我生成的图形需要连接由白线分隔的多边形(我找不到任何解释为什么它在 Unity 中呈现为白色的文档)但无法这样做,因为它们只共享一个顶点。

我想知道是否有一种有效的算法来检测这些情况。我正在考虑做的是让多边形被认为是连接的:

认为这应该可行,但我没有找到有效地做到这一点的方法。此外,我在“isPointInLine”实现方面遇到了一些麻烦,因为显然我的数学技能比我想象的要生疏。

无论哪种方式,必须有一个更简单的解决方案;但是我在网上找不到任何东西可以将我指向那个方向......这就是为什么我问你们好人是否有什么我可以做的事情来有效地将生成的导航网格转换为连接的多边形图。无论是帮助我实现 isPointInLine 还是为我指明一个更明智的算法的方向,我都会感激不尽。

0 投票
0 回答
163 浏览

c# - 统一 3D 中的 KVO 或其他属性观察模式

当我的对象上的一个属性发生更改时,我试图调用一个函数。除了不断轮询效率低下的属性外,我似乎无法找到使用 Unity 3D 中的 C# 脚本执行此操作的方法。

具体来说,我使用 NavMeshAgent 对象的 isOnOffMeshLink 属性来决定何时播放和停止特定动画。

任何帮助表示赞赏。

编辑: isOnOffMeshLink 是只读属性,动画将在运行时播放

0 投票
2 回答
5790 浏览

unity3d - Unity NavMesh 障碍物

我尝试在 Unity 中创建 RTS 游戏,但我遇到了寻路问题。我使用 NavMesh 进行寻路,效果很好:单位避免静态对象。但单位不会互相躲避。有一个名为 NavMesh Obstacle 的组件可以让单元避开非静态对象,但正如我所见,它不适用于 NavMesh 代理,因为单元试图避开自身。那么单位如何相互避开呢?

0 投票
2 回答
7931 浏览

unity3d - Unity NavMesh 让多个敌人走不同的路径

我正在开发一个游戏,我有多个敌人都朝着同一个目标移动。我遇到的问题是所有的敌人都走相同的路径到达这个目标,这导致了敌人的不切实际的“聚集”。我的问题是:我怎样才能让它们分散一点以产生拥挤效果?我目前正在使用 Unity 的内置 NavMesh 系统。我知道必须有一种方法来惩罚一个敌人使用的路径来鼓励其他敌人采取替代路径,但我只是不知道如何实现它。任何帮助表示赞赏!(另外,我最了解 C# 中的代码,但我可以在一定程度上理解 JavaScript)

0 投票
1 回答
1128 浏览

3d - 如何制作用于寻路的导航网格?

我了解导航网格的工作原理,但我如何实际创建它们。

我的猜测是选择具有给定约束集的随机顶点,例如恒定的 z 轴值使其平面化,选择不小于顶点之间指定的最小间距的随机点,以便网格具有有限区域等。

如您所见,我对如何实现这一点知之甚少。创建导航网格对我来说似乎更手动。在 3D 环境中创建凸面网格的有效方法是什么?