A*算法 vs Unity NavMesh:为你的游戏选择合适的路径寻找
发布: (2026年2月15日 GMT+8 10:27)
5 分钟阅读
原文: Dev.to
Source: Dev.to
什么是 A*?
A*(A星)是一种搜索算法,用于在网格或图中找到两点之间的最短路径。

什么是 Unity NavMesh?
NavMesh 是 Unity 内置的导航系统。

何时使用 A* 算法
- ✅ 2D 基于网格的游戏 – 适用于自上而下的瓦片地图游戏,如《口袋妖怪》《火焰纹章》。
- ✅ 自定义寻路 – 需要对算法或网格拥有完全控制权。
- ✅ 无 Unity 引擎(自定义引擎) – 从零构建。
- ✅ 动态或程序化世界 – 在运行时生成地图并需要自定义解决方案。
- ✅ 低多边形 / 小型世界 – 简单网格 = 快速的 A* 计算。
何时不使用 A*(改用 NavMesh)
- 🚫 3D 地形或复杂几何 – A* 无法理解 3D 网格表面。
- 🚫 需要代理特性 – 没有内置的代理半径/高度、障碍规避。
- 🚫 大地图上的性能瓶颈 – 基于网格的 A* 随着网格尺寸增大而变慢。
- 🚫 想要在 Unity 中自动寻路 – Unity NavMesh 会自动完成繁重的工作。
何时使用 Unity NavMesh
- ✅ 3D 游戏(FPS,冒险) – 开箱即用,支持地形、楼梯、坡道。
- ✅ 你在使用 Unity – 内置,高度优化,兼容 Agents 和 Obstacles。
- ✅ 需要动态寻路 – NavMesh 可通过 NavMesh Surface 或 Carving 更新。
- ✅ 需要基于 Agent 的 AI – 能处理不同尺寸/行为的多个 AI 单位。
何时不应使用 NavMesh(改用 A*)
- 🚫 2D 游戏 – NavMesh 主要用于 3D 导航(对 2D 的支持很 hack)。
- 🚫 完全动态的世界 – 运行时无法即时重新烘焙 NavMesh。
- 🚫 自定义游戏引擎 – NavMesh 是 Unity 专用的。
- 🚫 六边形或不规则网格 – NavMesh 本身不原生支持自定义形状的瓦片系统。
NavMesh 演示项目
TL;DR 摘要
- Top‑down 2D tile game → A*
- 3D Adventure/FPS → NavMesh
- Procedural dungeons → A*
- RTS / MOBA (3D with units) → NavMesh
- Custom logic / AI testing → A*
- Unity 3D project with terrain → NavMesh
处理 3D 游戏中的动态环境
如何在 3D 游戏中处理动态环境,使 NavMesh 必须在运行时即时更新?
Unity 内置的 NavMesh 系统并不适合高度动态的环境,但根据游戏需求有变通办法和更好的解决方案。
为什么 NavMesh 在动态世界中受限
- NavMesh 烘焙不是实时的;它需要时间,无法每帧重新烘焙。
- 带有 carving 的 NavMeshObstacle 只支持简单的物体规避。
- 大规模的变化(地形变形、新平台)处理效率低下。
典型的动态场景会暴露这些限制:
- 移动平台
- 变化的地形
- 建筑物生成/销毁
动态 3D 世界实时导航的最佳方案
- ✅ 带 carving 的 NavMesh – 适用于门、箱子、小障碍物等小幅度变化。
- ✅ NavMeshComponents 包 – 当只有环境的部分区域会变化时使用。
- ✅ A Pathfinding Project(Aron Granberg)* – 最适合完全动态的 3D 世界。
- 支持网格、NavMesh 和点图类型。
- 实时更新与图重新计算。
- 优化良好,广泛用于独立和 AAA 项目。
- 免费版
- Unity Asset Store 上的付费版