大家好,

我一直在 Unity 中使用 AI 助力工作流来构建一个游戏。看到一些人在这个子版块中做出的惊人事情让我受到了极大的启发。

使用 Gauntlet 方法(这个方法在这个帖子中被讨论过)https://www.reddit.com/r/aigamedev/comments/1vjv3z8/i_left_claude_code_running_for_24h_it_built_a_3d/,我开始从反对 Gacha 心态来构建一个游戏。

这个想法

这个游戏的名字叫做 No Bad Parts。客户给你一个荒谬的设计说明,你从一个小型可重用的零件目录中选择零件,点击 Run,物理引擎决定你是工程师还是危险分子。第一个设计说明是“将蛋放入篮子里而不破碎”,第二个设计说明是“将茶杯抬到阳台上而不洒水”。

反对 Gacha 的部分并不是“没有营利”。它是结构性的。Gacha 问“我得到了什么?”这个问“我可以用什么来做什么?”所以没有稀有度等级,没有传奇木板,没有统计上优于其他零件的零件。有零件家族(木板、轮子、弹簧、齿轮、滑轮、绳索),你可以调整零件的大小、材料、连接方式和目的。进度解锁物理词汇,而不是更强大的装备。深度来自理解,而不是拉扯。

目前的状态

可玩的垂直片段,两个设计说明,约 [N] 个 Gauntlet 会话。构建模式中有放置、拖拽、旋转和重叠预防功能。运行模式中有真实物理引擎。快速重置。一个 20 个零件的目录。连接器(卡环、弹簧、橡胶带、绳索)、齿轮的 meshing、电缆驱动的滑轮、蓝图保存和加载功能,使得一个工作的装置成为一个可保存和可变异的设计。

使用 2D 物理的第一次运行

我是如何运行它的

基本上和上面提到的帖子一样。每个会话中有一个大型提示,一个目标加上约束,然后让它运行而不打断。两件事情我添加了使得一个多会话项目大大不同:

  1. 每个会话更新的 STATE_HANDOFF.md 文件,每个会话读取上一个会话的最后动作。这是整个连续性机制的原因,原因是第四个会话仍然可以找到第一会话编写的代码。
  2. 将验证门限写入提示中,作为通过或失败的数字,而不是感觉。“运行 baseline 三次从重置开始并报告载荷的最终位置到四位小数”是一个门限。“确保它工作”不是。

有趣的转弯

我想要用实际的绳索和索具来实现拉索和索具的设计,真实的电缆在负载下。Box2D 不能给我提供这个,所以我运行了三个单独的调查会话:一根绳索资产评估、一个物理快速试验和一个比例门限。结论是保持 Box2D 的游戏完整,并在 XY 平面上使用 PhysX 构建一个平行的实现,使用 Filo 进行电缆。所以现在是一个 2.5D 游戏,3D 求解器,平面锁定。

这个迁移已经完成并与记录的 2D 基准线进行了比较。相同的结果,时间在 2% 之内,最大 Z 畸变 0.000,最大偏心倾斜 0.0000 度,连续三次从重置开始的载荷在相同的位置到四位小数的精度。

一些花费了实际时间并可能会节省别人的时间的事情:

  • 增强的确定性不是可选项。 如果关闭,它会从 10 次 10 次相同的运行中降低到 1 次 10 次不同的运行,差异 1494 个单位。 如果打开,则死于相同的位置。
  • isKinematic 不能意味着“静止”。 PhysX 构建模式使所有部分成为静止的,所以每个部分都读取为静止的,并且连接器目标排序在静默中会降低。没有错误。只是一个暗示错误的游戏,这是当一个代理在键盘上敲击键时的最坏的失败模式。
  • GameObject.CreatePrimitive()带有一个材料,无法在 URP 下渲染, 静默。每个生成的地形块都存在并正确地碰撞,但无法被看到。
  • 对于一个滑轮,LinkType.Pinhole,永远不要使用 Rolling 滚动会将电缆锁定到身体上,使每个腿独立约束,负载不会穿过滑轮,载荷永远不会在任何质量比率下升起。

总的来说,这是一个工作流程的教训:一个代理会给你一个看起来完成的东西,但它在一种不显示在控制台错误中Quietly 错误的方式上是错误的。唯一的防御措施我找到的就是让它产生你可以与之前的数字进行比较的数字。

粗糙的地方

  • 2.5D 构建渲染为原始的平面颜色。作者的 2D 艺术不会被保留,3D 艺术的独立任务是我的故意未开始的工作。
  • 蓝图回忆不保留点击设计的绳索和滑轮链条。它存储类型、位置和旋转,所以回忆的绳索会回到邻近捕获。会话重置时会生存,而不是保存和加载。
  • 两个设计说明。这是一个片段,而不是一个游戏。

我想得到的输入

  1. 奖励目标:聪明的解决方案:确定性的每个设计说明物理条件,或者一个 LLM 在玩家构建的东西上评判它?我有一个硬性规则:模拟是权威的,AI 无法验证成功,我无法看到 LLM 路线如何解决这个问题。
  2. 如何从物理传感器中检测玩家理解了一个原理(杠杆、阻尼、时间)而不变成作业?进度解锁应该是玩家展示理解的结果,而不是玩家完成作业。这是一个我没有好的答案的问题。
  3. 多会话上下文:一个手动传递文档仍然是什么?还是有更好的东西出现了?

第一个设计说明在 2.5D 中

第二个设计说明在 2.5D 中

我很高兴在工作流程或物理方面提供更多的细节。