驱动《魔兽世界》的隐形兔子(2017)
现代游戏常依赖隐形 NPC 和其他隐藏实体来驱动法术、过场、任务,甚至商店库存,正如《魔兽世界》的“兔子”以及《Fallout》里的灵体猫和戴着火车头的角色所示。开发者把这些视为务实的捷径:复用现有系统,如寻路和战斗逻辑,而不是为特效单独搭建框架;这也引出了一个问题:这种黑科技何时会越界,变成糟糕设计或技术债。由此,讨论进一步延伸到面向对象继承与实体-组件系统及数据导向设计的比较,争论哪种架构更能处理不断演化的游戏机制、性能约束,以及横切性的游戏逻辑。
隐形“兔子”及类似的游戏黑科技
- WoW 的隐形兔子被拿来与其他“隐藏演员”技巧相比:
- 《League of Legends》中的效果被实现为隐形小兵。
- 《Fallout 4》里的“灵体小猫”负责让电台继续推进,然后被删除。
- 《Fallout 3》中的地铁列车是戴着列车车厢“帽子”的 NPC。
- 《Starfield》以及更早的 Bethesda 游戏使用隐藏宝箱来承载商店库存。
- 模组作者和地图制作者表示,他们在《Warcraft 3》和《Marathon》中也做过同样的事:生成隐形单位来施放法术、发射“脚本化”射击,或切换开关。
- 私服运营者指出,WoW 的兔子在被显示出来时,会作为普通 NPC 模型出现。
- 有人认为这种对 NPC 系统的复用是聪明、意外的好设计;也有人称其为由引擎限制催生的糟糕设计,但承认对已发售游戏来说,“它能工作”才是最重要的。
ECS vs OOP 与组合式设计之争
- 许多评论者认为,像隐形兔子这样的模式源于僵硬的 OOP 层级;他们认为实体-组件系统(ECS)和组合式设计更适合游戏。
- ECS 被描述为:实体 = ID,组件 = 数据,系统 = 对组件集合进行操作的函数。它被视为以数据为中心,并偏向组合而非继承。
- 一些人说,继承式“本体论”(例如深层类型层级)如今普遍被视为错误,除了异常或 IO 之类的狭窄用途。
- 也有人反驳:继承在某些领域仍然很好用(GUI、库层级),而且 ECS 也存在冗长或重构痛苦的问题。
ECS 的实际挑战与光谱
- 多个人指出 ECS 的定义很松散,从“把游戏状态放进关系型数据库”到强调缓存友好的“结构数组(struct of arrays)”都算。
- 一个关键未解问题是横切关注点:当系统需要多个组件时(例如物理、渲染和逻辑都共享位置/速度),如何既保持数据局部性又不失灵,被认为很难或尚未解决。
- 文中提到了一些真实的 ECS 引擎(例如 Rust 或开源游戏中的实现),但也有人仍觉得纯 ECS 在复杂实体(如 Boss)面前会失效。
数据库与游戏状态
- 一些评论者尝试或考虑把所有游戏状态放进 SQLite 或内存数据库中,本质上把 ECS 当作查询系统来用。
- 这种做法因灵活而受欢迎(任务/条件逻辑更容易写),但也被承认几乎是在“重新发明数据库”。
WoW 中的隐形任务与状态追踪
- 据称 WoW 使用隐藏任务来追踪一次性状态(已拾取的宝箱、已看过的对话、已解锁内容)。
- 插件可以揭示这些完成记录;它们会以让玩家困惑的方式,抬高任务数成就的计数。
Meta:Kotaku 与阅读体验
- 有人不喜欢 Kotaku,认为它肤浅、耸动、广告太多;也有人认为它的坏名声与 GamerGate 绑定过深,且被夸大了。
- 还有几个人提到,需要强力广告拦截才能把这篇文章读下去。