c# - 将带有路径查找的单击移动添加到我当前在 Unity 中的 2D 项目

标签 c# unity-game-engine path-finding

我目前有一个带有正交相机的 2D 场景,我可以使用 WASD 键移动我的播放器,这很棒。我也想添加点击移动的功能,但我有点迷失了方法。我已经阅读/观看了一些教程,一切似乎都围绕着导航/网格系统。

我的问题是,我当前的地面和墙壁场景上有 Sprite 渲染器和/或 BoxColliders,并且我不能在同一个游戏对象上有 Sprite 渲染器和网格渲染器。这是我所拥有的内容的快速屏幕截图:

enter image description here

现在我明白我可以轻松地创建一个点击来移动

Camera.main.ScreenToWorldPoint(Input.mousePosition);

并使用

朝该位置移动
Vector3.MoveTowards(transform.position, target, speed * Time.deltaTime);

现在对我来说的挑战和我想要的知识是,如果我有类似屏幕截图中的内容,如果我在房子下方并单击我的角色将行走的房子上方,我如何添加某种路径查找系统绕过房子才能到达那里?

我是否需要编辑当前的地面 Sprite ?我有一个想法,我会创建额外的游戏对象,添加一个网格过滤器和网格渲染器, Material 为“无”,并将它们像拼图一样放置在我的场景周围,这将代表我希望玩家移动的区域。

我认为这种方法可行吗?是不是太多了?有没有更简单的方法?

最佳答案

您可以使用“NavMeshAgent”来移动您的玩家。 “NavMeshAgent”组件附加到游戏中的移动角色,以允许其使用 NavMesh 导航场景。

一旦你烘焙了 NavMesh,就很容易使用它 -

navMeshAgent.SetDestination(target);

引用- Video Tutorial to create and use nav mesh , Unity Script reference , Navigation and Path Finding

按照以下步骤学习如何烘焙导航网格 -

  1. 创建一个 3D 立方体并将其缩放至 (20,1,20) 以使其成为地板(也可将其重命名为 Floor)。
  2. 创建另一个 3D 立方体,将其放置在地板内并在 Y 轴上将其缩放 5(重命名为 house)。
  3. 复制第 2 步中的立方体并更改其位置,使其不与其他房屋重叠。
  4. 转至窗口 > 导航。这将打开导航面板,并选择对象选项卡。
  5. 选择层次结构中的地板对象。然后点击“静态导航”复选框。
  6. 系统会弹出一个窗口,询问是否为 child 启用静态导航,点击"is"。
  7. 转到导航面板中的“烘焙”选项卡,然后点击底部的“烘焙”按钮。
  8. 您应该能够看到生成的蓝色导航网格。

相同的屏幕截图 - enter image description here

关于c# - 将带有路径查找的单击移动添加到我当前在 Unity 中的 2D 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43726775/

相关文章:

c# - ASP.NET GridView : Get the PageIndex from the selected Row

c# - 如何将十六进制字符串转换为有符号整数?

c# - 在 Visual Studio 中调试 5 节点群集的 Azure Service Fabric 应用程序

ios - 如何使用 Facebook API 选择好友 ID?

artificial-intelligence - 隐形游戏 AI 求解器

c# - 使用 HTMLTextWriter 呈现服务器端控件会使控件失去标准功能(即单击事件处理程序)

c# - unity3d 中的套接字出现问题

ios - Unity iOS 创建文件类型启动您的应用程序并获取文件路径

javascript - A* 在 HTML5 Canvas 中开始寻路

iphone - 由 json 文件 iphone 制作的单层的 A* 寻路算法