驱动《魔兽世界》的隐形兔子(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 绑定过深,且被夸大了。
  • 还有几个人提到,需要强力广告拦截才能把这篇文章读下去。