Questions tagged «navmesh»

2
如何为图块网格生成导航网格?
我实际上还没有开始为此编写程序,但是我想看看我将如何去做。 假设我有一块瓷砖,所有尺寸都是相同的,有些是可穿越的,有些不是。我将如何从该网格创建多边形的导航网格? 我的想法是取出不可遍历的图块,并从那里的边缘延伸线以制成多边形……这就是我到目前为止所要做的。有什么建议吗?

6
使AI彼此走不同的路
我有一个自上而下的2d游戏,其中AI在地图的边缘生成,并向中心移动。 我正在使用A *和节点网格进行寻路。 现在,AI会在地图边缘的某个点生成,并且都采用相同的路径,这是到达中心的最短路径。 现在,我希望它们变得更加令人惊讶和有趣,并且彼此走不同的路。 我可以立即想到两个实现此目的的想法,但想知道人们是否经常使用其他方法或更好的方法? 当一个敌人生成并生成一条通往中心的路径时,暂时增加该路径上所有节点的成本,然后随着时间的推移逐渐降低它们的成本。然后,稍后产生的敌人AI将被迫走更宽的道路。 上面的方法将导致AI走上越来越宽的道路,而且仍然非常可预测。因此,我想我还将在地图周围引入许多中间目标节点。当AI产生时,他们会随机选择一个中间目标,并先到达那里,然后再前往地图中心。将此与上述增加成本的方法结合起来可能看起来不错? 人们发现哪种方法最能使AI改变他们所走的道路,令人信服和令人惊讶?

1
A *导航网格路径查找
因此,我一直在这个名为Greenfoot的框架中制作这款自上而下的2D Java游戏,并且我一直在为您要战斗的家伙开发AI。我希望他们能够现实地环游世界,因此我很快意识到,除其他事项外,我需要某种寻路。 我已经制作了两个A *原型。一个是基于网格的,然后我制作了一个与航路点一起使用的栅格,因此现在我需要找到一种方法,从障碍物/建筑物的二维“图”获取可以作为路径的节点图。实际的寻路似乎很好,只是我的打开和关闭列表可以使用更有效的数据结构,但是如果需要的话,我会解决的。 我打算出于所有原因在ai-blog.net上使用导航网格。但是,我面临的问题是,A *认为从多边形中心/边开始的最短路径不一定是通过节点的任何部分的最短路径。为了获得更好的主意,您可以查看我在stackoverflow上提出的问题。 关于可见度图,我得到了很好的答案。从那以后,我已经购买了《计算几何:算法和应用程序》这本书,并进一步阅读了该主题,但是我仍然偏爱导航网格物体(请参阅Amit关于路径查找的注释中的 “ 管理复杂性 ” )。(作为附带说明,如果第一个和最后一个不被遮挡,也许我可以使用Theta *将多个航路点转换为一条直线。或者每次我移回最后一个航路点之前,查看是否可以从这个) 因此,基本上我想要的是一个导航网格物体,一旦将其通过漏斗算法(例如,来自Digesting Duck的那个),我将获得真正的最短路径,而不是仅是从节点到节点的最短路径,但不是实际的最短距离,因为您可以穿过一些多边形并跳过节点/边。 哦,我也想知道您建议如何存储有关多边形的信息。对于航路点原型示例,我只是将每个节点作为一个对象,并存储了可以从该节点访问的所有其他节点的列表,我想这对多边形不起作用吗?以及如何判断多边形是可打开/可穿越的还是实心的?如何存储组成多边形的节点? 最后,作为记录:即使确实已有其他解决方案,我也希望自己从头开始编写此程序,并且我不打算在此游戏以外的任何其他程序中使用此代码,所以这无关紧要它将不可避免地是劣质的。

2
尽管使用了Time.deltaTime,但移动似乎与帧速率有关。
我有以下代码来计算在Unity中移动游戏对象所需的转换LateUpdate。据我了解,我对的使用Time.deltaTime应使最终的翻译帧速率独立(请注意CollisionDetection.Move(),仅用于进行射线广播)。 public IMovementModel Move(IMovementModel model) { this.model = model; targetSpeed = (model.HorizontalInput + model.VerticalInput) * model.Speed; model.CurrentSpeed = accelerateSpeed(model.CurrentSpeed, targetSpeed, model.Accel); if (model.IsJumping) { model.AmountToMove = new Vector3(model.AmountToMove.x, model.AmountToMove.y); } else if (CollisionDetection.OnGround) { model.AmountToMove = new Vector3(model.AmountToMove.x, 0); } model.FlipAnim = flipAnimation(targetSpeed); // If we're ignoring gravity, then just …

4
人们将如何为3D世界生成导航网格?
我正在尝试找到此问题的解决方案。我正在尝试以一种锁定为x,y地板坐标的顶点网格的形式构建导航网格,并以3D空间的正方形的形状。但是我在尝试找出解决方法时遇到了问题。 我尝试查看Recast库。这是一种非常健壮的方法,但是随着较大的地图和开放空间,它显然会变慢。我也不知道它们如何通过高度图为世界空间生成顶点和边缘。 我的下一个想法是做虚幻引擎3曾经做过的事情。 https://udn.epicgames.com/Three/NavigationMeshReference.html 使用光线投射生成网格。我不知道如何停止射线广播。 所以...我的下一个选择是包装盒,可能是包装盒。创建一个细分的体积,其大小为2的幂。将框与网格对齐,然后向下射矩形棱镜作为射线。如果它落在作为地面一部分的几何图形上,并且矩形未相交,则在此处保留正方形。并继续向下直到达到音量范围。为了检查是否需要链接边,我想我可以检查一下两对顶点之间的坡度是否在可行走坡度之内,如果为真,请合并它们。 我的主要问题是...这似乎不是最佳选择。不用考虑,多层过程的估计过程为O(N ^ 3)。哪个会变得很讨厌。 最后一点是用于自动创建这些正方形的矩形组。我不太确定该怎么做。虚幻实现通过斜率将它们分开。但是,我试图保持网格格式。因此,这并非完全必要。问题仍然在于创建较大的矩形图块以将路径查找过程拆分为每个图块的基础。磁贴不能太大也不能太小。 所以问题是... 生成此网状导航网格的有效方法是什么?制作图块的好方法是什么?
11 c++  tiles  navmesh 

2
导航网格中的“视线”路径
我想计算导航网格中的视线。 考虑下图,黄线仅是A *的结果,红线是使用黄线作为输入的“视线”算法的结果。现在,设备可以直接移动而无需“曲折”。 计算该“视线”的算法是什么?

3
如何在运行时的动态环境中生成二维导航网格?
因此,我已经掌握了如何使用A *进行路径查找,并且能够在网格上使用它。但是,我的游戏世界很大,我有很多敌人向玩家移动,而玩家是移动的目标,因此网格系统对于寻路太慢。我需要通过使用导航网格来简化节点图。 我掌握了网格“如何工作”的概念(通过顶点和/或多边形边缘中心找到一条路径)。 我的游戏使用在运行时程序性生成的动态障碍。 我不太了解如何拍摄一个有多个障碍物的飞机,并以编程方式将可步行区域划分为用于导航网格的多边形,如下图所示。 我从哪里开始?我怎么知道何时已经定义了一个可行走区域,或更糟糕的是,当我意识到我需要在算法“遍历”地图时细分一个先前定义的可行走区域时? 如果有问题,我正在nodejs中使用javascript。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.