问题标签 [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 投票
1 回答
577 浏览

c++ - 使用导航网格图和寻路算法 A*

我正在使用由三角形组成的导航网格图。为了找到从起点到目标点的最短路径,我考虑了 A* 算法。虽然我想进行粗略的初步搜索以找到从开始到目标的路径,但需要大量计算变得非常麻烦。

在从目标(g)和启发式(h)计算适应度(f)时,大多数教程告诉您通过当前位置和目标之间的距离差来计算“h”,然后找到给出最小值的网格/三角形F'。对于像半圆这样的路径,起点和目标在直径的相对边缘,最小的“f”将朝向目标方向,这将导致死胡同。希望你明白我在说什么。因此,“f”的最小值并不总是正确的。因此,您可能需要计算每个相互连接的三角形并检查直到它导致目标。

有没有更好的方法来计算启发式?navmesh 有更好的寻路算法吗?

0 投票
0 回答
743 浏览

algorithm - 使用 A* 算法避免死胡同

我正在使用 A* 算法在导航网格图中找到框和可移动字符之间的最短路径。盒子是为了跟随角色。在此处输入图像描述

如果角色在障碍物或房间后面(例如),那么盒子会通过最短距离,如图所示。有没有办法防止盒子形式通过这条路径并在房间里走动。

由于我必须避免在寻找点之间的路径时向后移动,因此首先检查封闭列表中的任何条目以查看它是否已经存在。假设您到达了一个角落,那么所有可以将您带回角落的网格都已经存在于封闭列表中,您会被困在那里作为死胡同。如果考虑下图中的房间宽度较小,则可以看到这种情况。如果盒子一开始没有在房间内移动,这个问题可能已经解决了。

可以使用光线追踪或转向吗?找到这个问题,但答案不明确。 A* 用于寻找最短路径并避免将线作为障碍物

0 投票
1 回答
761 浏览

unity3d - 我可以使用 Unity 3D navmeshes 进行第一人称导航吗?

我开发了一些应用程序,允许用户以第一人称探索内部环境,并且为了在处理与墙壁和物体的所有碰撞时获得平稳行走,我的脚本变得越来越复杂,所以,

假设我知道导航网格主要用于计算移动代理的路径,我想知道:有没有办法利用导航网格在第一人称中导航?还是只是浪费 CPU 时间?

谢谢你的任何建议。

0 投票
1 回答
2234 浏览

unity3d - Unity 3d 导航网格烘焙

我的问题是关于 NavigationMeshes,我准备了一个基于网格的地图生成器。我可以生成一个由分为墙壁和地板的立方体组成的地图。

在生成这个之后,我可以将它保存为预制件,稍后在导航菜单中我可以烘焙网格,但接下来是我想将它保存为带有已经烘焙的导航网格的预制件。当我这样做并从场景中删除地图时,它会消失,但烘焙的网格仍然存在。要在另一个地方再次将地图放在现场,我必须再次烘烤。主要思想是使用烘焙网格生成“x”级别,然后根据我想要的级别实例化它们。那可能吗?谢谢你的时间。

编辑:烘焙一些示例导航网格后,出现了一个与我正在处理的场景相同的文件夹,里面有导航网格文件。现在这是我编辑的问题。我可以为每个不同的地图烘焙几个不同的导航网格,然后在加载此类地图后在代码中使用正确的导航网格,这样它们就可以很好地配合?

0 投票
1 回答
2229 浏览

unity3d - 两个 NavmeshAgent 不会相互碰撞

关于问题:

我有一个播放器,它附加了两个脚本(PlayerControllerEntity),一个RigidBody(isKinematic 检查,无重力)NavMeshAgentSphereCollider.

然后我有两个完全相同的敌人,它们也附加了两个脚本(EnemyAI,,Entity),一个RigidBody(相同),NavMeshAgentSphereCollider

现在的问题是,我可以通过它们,它们也可以相互通过。这是我绝对想摆脱的东西。要同时移动敌人和玩家,我只需使用 agent.destination。我也将它们放在不同的层上,因此是“敌人”和“玩家”并标记以检测它们之间的碰撞。不幸的是,这似乎没有帮助。

这是我的问题。如何解决?感谢您的时间和建议,希望他们能引导我找到解决方案。

0 投票
2 回答
1072 浏览

c# - 跟踪游戏对象变换 - 为什么使用 FindGameObjectWithTag 不起作用?

我正在学习一个教程(确切地说是生存射击游戏),并且我正处于实现 NavMesh 的阶段。他们的原始脚本是这样的:

到目前为止没有什么特别的。我按下播放键,奇怪的是敌人(我现在场景中只有一个)只到达玩家的初始位置(0,0,0),而不是在玩家移动时跟随它。我意识到玩家的位置在_player场上没有更新,它保持在0,0,0.

我尝试了一种不同的方法:我将 Player 的游戏对象拖放到 UI 中的属性上(我先将属性设为 public,然后将其更改为GameObject)。在这种情况下,它可以完美运行:

在这个阶段,我想知道:

方法是否FindGameObjectWithTag复制对象而不是返回对GameObject? 为什么它在第一个实例中不起作用。顺便说一句,我使用 Unity 5。

0 投票
1 回答
171 浏览

unity3d - Unity:当我在我的 rts 游戏中点击攻击建筑物时,如何让多个特工围绕建筑物

我试图在建筑物周围启动几个点进行攻击。但这种方式不够灵活,因为代理可能有不同的半径,因此攻击点不应该那么均匀。

有什么好主意吗?

0 投票
1 回答
3013 浏览

algorithm - 如何通过 2D 网格有效地实现光线投射?

我正在实现一个导航网格寻路系统,我需要能够在网格中的两个点之间进行光线投射,并获得光线穿过的所有边的列表。显然,我需要能够测试单个线的交叉点,但我希望有一种有效的方法来选择哪些线实际上需要检查,而不是蛮力迭代整个网格中的每个边缘。有谁知道我会怎么做?

0 投票
0 回答
411 浏览

c# - Unity3D NavMesh 提供像运动一样的生涩

我实例化了NavMeshAgent附加到它们的游戏对象。他们的目的地是可以在地图上移动的玩家,地图上有一个烘焙的 NavMesh。

我遇到的问题是,在这些敌方游戏对象中的一些被实例化后,它们有时会停顿片刻,给出一个生涩的动作,就好像它们正在计算玩家移动时的路径。

有没有办法解决这个问题?还是我必须在地图上有一个更简单的 NavMesh?

我在 Update() 中设置了敌人的目的地,我也在 FixedUpdate() 中尝试过,但这没有区别:

0 投票
1 回答
125 浏览

c# - Unity3D NavMashAgent 不移动 -C# 代码

我不知道这是问这个问题的正确地方。因为这是一个游戏开发相关的问题。我在这里发布了这个问题(gamedev.stackexchange.com - https://gamedev.stackexchange.com/questions/109190/navmashagent-not-moving)但仍然没有回应。并且还在 Unity 论坛 ( http://answers.unity3d.com/questions/1075904/navmashagent-not-moving-in-unity3d-5.html ) 上发帖。任何人来帮助我。

我会再次在这里发布我的问题

我试图将多维数据集移动到检查点。FindClosestTarget() 方法给出最近的检查点。当 Cube 击中 CheckPoint 时,ChackPoint 将被设置为非活动状态。当发生碰撞时,再次调用 FindClosestTarget() 并获取新的最近检查点。事情是立方体不动。它看着最近的检查点但不动。