

本软件包是对现有代理导航系统的扩展,提供基于流场/速度场的人群路径规划替代方案。该系统以 DOTS 为核心进行开发,因此充分利用了 Unity 最新的技术栈,例如 SIMD 数学库、Jobs 系统、Burst 编译器以及 Entity Component System(ECS)。此外,还支持混合模式,使其能够在面向对象编程(OOP)中与 GameObject 一起使用。
本软件包的核心支柱:
- 与 Unity 无缝集成: 与现有 Unity 技术体系和谐融合,同时支持 Mono 和 DOTS。
- 直观且精简的用户体验: 提供简洁清晰的使用流程,确保与 Unity 的使用习惯完美契合。
- 开箱即用的高性能表现: 通过并行化与优化代码设计,默认即可实现高性能运行。
- 清晰的代码架构: 遵循整洁编码原则,采用清晰的架构设计。
采用多层 API 结构,便于进行底层交互与扩展。 - 可扩展且模块化的代码库: 以可扩展性和模块化为核心构建,使功能扩展更加便捷,同时尽量减少对原有包的改动。
我可以在非 ECS/DOTS 代码中使用它吗?
可以。该软件包提供混合工作流程(Hybrid Workflow),可将 GameObject 与 Entities 同步,因此也可以在面向对象编程(OOP)模式下使用。当然,需要注意的是,在这种模式下性能可能会略有下降。
我可以在 ECS 中使用它吗?
可以。本软件包基于 ECS 构建。
该导航系统适用于哪些游戏类型?
本软件包非常适合塔防游戏、战斗模拟、大规模 RTS,以及任何偏向大规模人群单位的游戏类型。据传,类似的解决方案曾被用于《Supreme Commander 2》。
我可以扩展功能吗?
可以。本软件包在设计时就考虑到了可扩展性,因为每款游戏在 AI 导航方面都有独特需求。该解决方案高度模块化,允许轻松添加或移除现有行为。不过,若要高效扩展功能,需要具备一定的 ECS 知识。
它是确定性的吗?
所有系统均在 Fixed Update(固定更新)中运行。理论上,在 Intel/AMD 平台上(使用 Burst 编译器)应当是确定性的。然而,由于导航计算仍使用浮点数,因此无法保证在所有平台上都完全确定性一致。
该软件包与 Agents Navigation 有何区别?
这是其扩展包,提供了一种基于流场(Flow Field)的替代路径查找方案。此外,基础代理导航中的所有现有功能都可以与本软件包无缝配合使用,甚至可以将人群代理与 NavMesh 代理混合使用。
什么是 Flow Field(流场)?它与传统基于 NavMesh 并带避让的寻路相比如何?
Flow Field 是一种基于网格的图结构。其关键区别在于:代理的转向速度(steering velocity)不是针对每个代理单独计算,而是针对每个网格单元进行计算。
主要区别如下:
- 性能开销计算方式不同:
性能成本随“网格大小 × 组数量”增长,而不是单纯随代理数量增长。因此,在代理数量巨大的情况下,能够以更低的性能成本支持大规模人群。 - 路径与避让一体化:
路径规划与避让是结合在一起的,大大降低了代理因局部避让(local avoidance)而卡住的情况。 - 共享目标机制:
每个代理组必须共享相同的目标位置。这意味着当组数量过多时,性能可能会迅速下降。 - 大规模人群表现更自然:
在庞大人群中,整体流动效果更好、更自然。但与此同时,个体代理的独立性会降低,更倾向于服从群体流动,而非自身独立路径。
依赖项
- Minimum Unity 2022.3/Tuanjine 1.6.5
- Package com.unity.entities
- Package com.projectdawn.navigation
仅通过 Discord 提供英文支持。
本软件包需要 Agents Navigation 才能使用!!!
