每个方块都是实心的——除了不是的时候
我们的客户端网格生成器有一条铁律:凡是不是空气的方块,都要渲染,而且都有碰撞。就这样。这种简化让网格生成又快又简单——直到有个功能偏偏要打破这条规矩。
能量闸门。我们想给能量护栏做一道闸门:一层闪闪发光的薄膜,玩家和友好的 NPC 可以直接走过去,野生动物却过不去。也就是说,一个看得见、但对一部分人来说并不是墙的方块。这恰恰是我们的架构没有设想过的。
解决办法分成两半。在客户端,网格生成器有了第一个刻意设置的例外:闸门方块会被渲染,但不计入碰撞网格——玩家直接走过去就行。真正的逻辑在服务器上运行:生物的移动系统每走一步都会检查路上有没有能量屏障。野生动物和敌人会转身离开,同伴和玩家则可以通过。这个检查必须加进全部三套移动系统——野生动物、同伴、星球敌人——否则就会有一种生物不“认识”这道闸门。
诚实的脚注:会飞的生物可以直接从护栏上方滑翔而过。这不是 bug,而是有文档记录的限制——护栏就是拦不住任何会飞的东西。这样刻意留下的缺口,我们宁愿写下来,也不愿藏起来。
留给我们的启示:像“所有非空气都是实心的”这样的架构规则之所以有价值,正是因为它们很简单。但你得知道那个唯一的例外住在哪里——以及它为什么住在那里。
留言