我在 Unity 中制作一款猫咪破坏游戏,每栋房子的家具都根据种子程序化生成。生成器会放置家具,然后放置所有摆件,让物理引擎稳定下来,最后移除任何嵌入其他物体的物品。每次它不得不打破规则时,都会记录下来。以下是今天早上“大房间”种子中的几个例子:

  • 衣帽架:门旁 +0.98 处被拒(位于休息区)
  • 粉色画布:办公室桌子 030 的墙上没有空间——挂在别处
  • 大黄色花盆:离墙 0.13 米放置以容纳植物
  • 门因厨房线(5.9 米)和电视柜(4.1 米)重绘了 4 次

以及其中一个种子的摘要行:

种子 14:12.0×10.0 米,120 件物品(1 件掉落),8 件墙面物品,0 处重叠,0 件倾倒,0 件未放置——干净

一个房间只要最多有两处重叠、没有倾倒、没有未放置的家具、并且最多掉落 max(3, 物品数/30) 件小物件,就算干净。丢一个杯子没问题,但丢吉他就太显眼了。独立式家具会占据距离所有已放置物品最远的合适位置(最多从 24 个候选中选择),这就避免了钢琴被挤在休息区而房间中央空荡荡的情况。

这些记录最终成了整个项目最有用的部分。当某个种子看起来不对劲时,它们通常能说明原因。每栋房子会附带 20 个经过人工检查的种子。

如果你想看房间,这里有免费 Windows 演示版:https://corbygamesstudio.itch.io/give-him-a-break