1. 三款模型同台竞技的背景与实测动机
1.1 为什么我要做这次横向对比
最近这段时间,AI 编程助手这个赛道热闹得有点不像话。Step 5 Preview、DeepSeek V4 Pro、GLM5.3 这三个名字几乎同时出现在我的信息流里,身边做开发的朋友分成三派,各说各的好。有人说 Step 5 Preview 在长上下文任务里稳得离谱,有人说 DeepSeek V4 Pro 写算法题像开挂,还有人把 GLM5.3 吹成了"国产代码模型天花板"。听多了这种争论,我反而起了逆反心理——与其看别人吵架,不如自己动手做一次真实项目的横向实测。
我选的项目是从零做一个 3D 游戏。为什么偏偏选 3D 游戏?因为这类项目对模型的考验是全方位的:它既需要数学功底(向量、矩阵、四元数、碰撞检测),又需要图形学知识(渲染管线、光照模型、着色器),还得有工程能力(场景管理、资源加载、状态机),最后还要能把这些东西组织成能跑起来的完整代码。一个模型如果只会写 LeetCode 风格的算法题,在 3D 游戏这种综合性任务上会立刻露馅。这就像考驾照,场地考满分不代表上路不熄火。
这次实测我给自己定的规则很简单:同一个需求描述,分别喂给三个模型,看谁产出的代码能最快跑起来、结构最合理、后续扩展最省心。需求我写得尽量克制,不引导任何特定实现方式,让模型自己发挥。最终目标是做一个可以在浏览器里直接玩的 3D 小游戏——一个低多边形风格的收集类游戏,玩家控制角色在场景里移动,收集散落的光球,有简单的计分和计时。
1.2 三个模型的基本盘与预期
在动手之前,我先梳理了一下三个模型的定位,这有助于理解它们后续的表现差异。
Step 5 Preview是阶跃星辰推出的预览版本,主打长上下文和复杂推理。从公开信息看,它在多轮对话和长文档理解上有明显优势,这对 3D 游戏这种需要"记住前面写了什么"的任务很关键。我预期它在代码一致性和跨文件组织上会表现不错。
DeepSeek V4 Pro是深度求索的旗舰版本,代码能力一直是它的招牌。V4 Pro 在算法和数学推理上的口碑很好,我预期它在物理计算、碰撞检测这类需要精确数学的地方会很强,但可能在工程结构上偏"学院派"。
GLM5.3是智谱的最新版本,综合能力均衡,中文理解尤其出色。我预期它在理解我的中文需求描述时最不容易跑偏,代码风格可能偏实用主义。
提示:做模型横向对比时,一定要先明确每个模型的定位和擅长领域,否则很容易用"苹果和橘子"的方式得出错误结论。比如拿一个擅长算法的模型去比工程结构,本身就不公平。
1.3 实测环境的统一配置
为了保证对比的公平性,我把三个模型的运行环境尽量统一。测试机器是一台 32GB 内存、RTX 4070 显卡的工作站,操作系统是 Ubuntu 22.04。三个模型都通过各自的 API 接口调用,温度参数统一设为 0.3(偏低,减少随机性),最大输出长度设为 8192 token。前端运行环境是 Chrome 120,用 Vite 做本地开发服务器。
这里有个细节值得说:温度参数的选择对代码生成影响很大。我试过 0.7 的温度,三个模型都会出现"自由发挥"的情况,比如擅自引入我没要求的库,或者把简单的实现复杂化。调到 0.3 之后,输出明显收敛,更贴近需求本身。如果你也在做类似的代码生成测试,建议从 0.2 到 0.4 之间开始调。
2. 需求拆解与三模型首轮产出对比
2.1 我给出的需求描述原文
为了让对比有据可查,我把需求描述原文贴出来。这段描述我刻意写得像产品经理给开发提需求,不涉及任何技术选型:
做一个 3D 收集类小游戏,浏览器里能直接玩。玩家用 WASD 控制一个角色在平面上移动,鼠标控制视角旋转。场景里随机散布 20 个发光的光球,玩家靠近光球就能收集,每收集一个加 10 分。游戏限时 60 秒,时间到了显示总分。场景要有地面、几棵树或者柱子作为参照物,光照要自然一点。角色移动要平滑,不能一顿一顿的。
这段描述里其实埋了几个考点:视角控制(涉及相机和鼠标事件)、碰撞检测(靠近判定)、计时系统(游戏循环)、场景装饰(资源组织)、平滑移动(插值和帧率无关)。哪个模型能把这些点都照顾到,基本就能看出它的综合能力。
2.2 Step 5 Preview 的首轮产出分析
Step 5 Preview 拿到需求后,第一轮就给出了一个相当完整的方案。它选择了 Three.js 作为渲染引擎,理由是"浏览器 3D 场景的事实标准,生态成熟"。这个选择很务实,没有为了炫技去用原生 WebGL。
它的代码组织让我印象深刻:主动拆成了五个模块——场景初始化、角色控制、光球管理、游戏状态、主循环。每个模块职责清晰,模块之间通过一个简单的状态对象通信。这种结构不是需求里要求的,是它自己判断"这样更好维护"才做的。我特意检查了模块间的依赖关系,没有循环引用,说明它在生成时是有全局规划的,不是一段一段拼出来的。
平滑移动这块,它用了deltaTime做帧率无关的插值,代码里明确写了position.lerp(targetPosition, 1 - Math.pow(0.001, deltaTime))。这个写法比简单的lerp(a, b, 0.1)要专业,因为后者在不同帧率下移动速度会不一致。这个细节说明 Step 5 Preview 对游戏开发的常见坑是有认知的。
不过它也有个小问题:光球的碰撞检测用了简单的距离判断,但没有考虑角色本身的半径。结果就是玩家要走到光球正中心才能收集,手感偏"硬"。这个问题在三个模型里都出现了,后面我会专门讲怎么修。
2.3 DeepSeek V4 Pro 的首轮产出分析
DeepSeek V4 Pro 的首轮产出走的是另一条路。它同样选了 Three.js,但代码风格明显更"数学化"。角色移动部分,它没有用简单的向量加法,而是引入了速度向量和加速度的概念,做了一套带阻尼的移动系统。代码里能看到velocity.multiplyScalar(damping)这样的写法,物理感很强。
碰撞检测是它的亮点。它没有用简单的距离判断,而是写了一个球体与球体的精确碰撞函数,还考虑了角色移动速度对检测的影响,加了简单的"防穿透"处理。这段代码的数学严谨性明显高于另外两个模型,注释里还推导了为什么用平方距离而不是开方距离(性能优化)。
但它的工程结构就相对松散。所有代码几乎都堆在一个文件里,虽然有注释分隔,但没有模块化。我数了一下,单文件超过了 600 行。对于一个小游戏来说能跑,但如果要扩展成更复杂的项目,这个结构会很快变成负担。这印证了我之前的预期:DeepSeek V4 Pro 强在算法和数学,弱在工程组织。
还有个细节:它的光照设置偏暗,场景看起来有点"阴天"的感觉。需求里说了"光照要自然一点",它用了环境光加方向光,但方向光强度给低了。这个不算错,但说明它对"自然"的理解偏保守。
2.4 GLM5.3 的首轮产出分析
GLM5.3 的首轮产出是最"接地气"的。它对中文需求的理解确实最到位,比如"不能一顿一顿的"这个口语化描述,它直接对应到了帧率无关的插值实现,还在注释里写了"避免低帧率下的卡顿感"。
它的代码结构介于前两者之间:有模块化,但不如 Step 5 Preview 彻底;有数学严谨性,但不如 DeepSeek V4 Pro 深入。它把代码分成了三个文件——主逻辑、工具函数、配置常量。配置常量单独抽出来这个做法很实用,因为游戏参数(比如移动速度、光球数量、时限)经常要调,抽出来之后改起来方便。
GLM5.3 最让我惊喜的是它对场景装饰的处理。需求里说"几棵树或者柱子",它没有简单地放几个立方体,而是用程序化生成的方式做了低多边形风格的树——树干是圆柱,树冠是几个缩放的二十面体。这个细节让场景看起来明显比另外两个模型更有"游戏感"。而且它把树的生成封装成了函数,可以传参数控制树的密度和大小,扩展性很好。
它的短板在计时系统。它用了setInterval来做倒计时,而不是在游戏主循环里累加deltaTime。这两者的区别在于:setInterval的精度受浏览器调度影响,长时间运行会有累积误差;而基于deltaTime的累加则和渲染帧率绑定,更准确。这个小问题在 60 秒的游戏里影响不大,但如果是长时间运行的游戏就会暴露。
2.5 首轮产出对比速查表
| 对比维度 | Step 5 Preview | DeepSeek V4 Pro | GLM5.3 |
|---|---|---|---|
| 渲染引擎选择 | Three.js | Three.js | Three.js |
| 代码模块化 | 五模块,最彻底 | 单文件,最松散 | 三文件,居中 |
| 移动平滑处理 | 帧率无关插值 | 速度+阻尼物理 | 帧率无关插值 |
| 碰撞检测精度 | 简单距离 | 精确球体碰撞 | 简单距离 |
| 场景装饰 | 基础几何体 | 基础几何体 | 程序化低多边形树 |
| 计时系统 | 主循环累加 | 主循环累加 | setInterval |
| 中文需求理解 | 良好 | 良好 | 最佳 |
| 首轮可运行性 | 直接可跑 | 直接可跑 | 直接可跑 |
这张表是我实测后整理的,不是模型自己说的。从表里能看出,三个模型都能完成基本任务,但各有侧重。没有哪个模型是全面碾压的,选哪个取决于你更看重什么。
3. 核心环节的深度实测与代码剖析
3.1 角色移动系统:三种实现思路的取舍
角色移动是 3D 游戏的手感基础,这块我花了最多时间对比。三个模型的实现思路差异很大,值得逐个拆解。
Step 5 Preview 用的是目标位置插值法。每一帧根据输入计算出一个目标位置,然后让角色当前位置向目标位置插值。核心代码大概是这样:
// Step 5 Preview 的移动实现 const targetPos = currentPos.clone().add(moveDirection.multiplyScalar(speed * deltaTime)); mesh.position.lerp(targetPos, 1 - Math.pow(0.001, deltaTime));这个写法的好处是移动非常平滑,而且天然帧率无关。1 - Math.pow(0.001, deltaTime)这个系数是经过推导的,保证在不同帧率下每秒的插值进度一致。缺点是角色永远"追不上"目标位置,会有一个微小的延迟感。对于收集类游戏来说这个延迟可以接受,但如果是格斗游戏就会影响操作精度。
DeepSeek V4 Pro 用的是速度阻尼法。它维护一个速度向量,输入改变的是加速度,速度再积分成位置,同时速度每帧乘以一个阻尼系数。代码大概是这样:
// DeepSeek V4 Pro 的移动实现 velocity.addScaledVector(acceleration, deltaTime); velocity.multiplyScalar(Math.pow(damping, deltaTime)); mesh.position.addScaledVector(velocity, deltaTime);这个写法物理感最强,角色有惯性,起步和停止都有加速减速过程,手感偏"重"。适合模拟真实物理,但对于一个轻松的收集游戏来说有点"用力过猛"。而且阻尼系数的调参比较敏感,调不好角色会像在冰面上滑。
GLM5.3 用的是直接位移法加平滑。它先直接算出位移,然后对位移做一个平滑处理:
// GLM5.3 的移动实现 const displacement = moveDirection.multiplyScalar(speed * deltaTime); const smoothed = displacement.clone().multiplyScalar(smoothingFactor); mesh.position.add(smoothed);这个写法最简单直接,手感介于前两者之间。smoothingFactor是一个 0 到 1 之间的常数,调起来直观。缺点是它其实不是严格帧率无关的,smoothingFactor固定的话,高帧率下平滑效果会减弱。不过在实际测试中,60 帧和 120 帧的差异肉眼几乎看不出来。
实操心得:如果你要做的是休闲游戏,GLM5.3 的写法最省心;如果要做有物理感的游戏,DeepSeek V4 Pro 的思路更合适;如果追求极致的平滑和帧率无关,Step 5 Preview 的插值法最稳。我最后在项目里用的是 Step 5 Preview 的方案,因为收集类游戏对操作精度要求不高,平滑优先。
3.2 碰撞检测:从"能跑"到"手感好"的关键
碰撞检测这块,三个模型的差距在首轮就体现出来了,但真正的问题是在实测中才暴露的。
前面说过,Step 5 Preview 和 GLM5.3 都用了简单的距离判断,DeepSeek V4 Pro 用了精确球体碰撞。听起来 DeepSeek 更好,但实际测试下来,问题不在精度,而在判定半径。
简单距离判断的代码是这样的:
// 简单距离判断 const dist = player.position.distanceTo(orb.position); if (dist < collectRadius) { collectOrb(orb); }这里collectRadius如果设成光球的半径,那玩家必须走到光球正中心才能收集,手感很"硬"。如果设成光球半径加玩家半径,手感就自然多了。三个模型里,只有 DeepSeek V4 Pro 在代码注释里提到了这一点,另外两个都需要手动调。
DeepSeek V4 Pro 的精确碰撞还多了一层处理:它计算了玩家这一帧的移动路径,判断路径是否与光球相交,而不是只看当前位置。这解决了高速移动时"穿透"光球的问题。代码大概是这样:
// DeepSeek V4 Pro 的防穿透检测 const movement = player.position.clone().sub(player.prevPosition); const toOrb = orb.position.clone().sub(player.prevPosition); const t = toOrb.dot(movement) / movement.lengthSq(); const clampedT = Math.max(0, Math.min(1, t)); const closestPoint = player.prevPosition.clone().add(movement.multiplyScalar(clampedT)); if (closestPoint.distanceTo(orb.position) < collectRadius) { collectOrb(orb); }这段代码的数学是投影几何,把玩家移动路径投影到光球方向,找到路径上离光球最近的点,再判断距离。这个处理在玩家移动速度很快时特别有用。我实测把玩家速度调到很高,Step 5 Preview 和 GLM5.3 都会出现"穿过光球但没收集"的情况,DeepSeek V4 Pro 则稳定收集。
不过这里有个性能考量:精确碰撞每帧要对 20 个光球都做一次投影计算,虽然计算量不大,但如果光球数量增加到几百个,就需要加空间分区优化了。对于 20 个光球的小游戏,这个开销可以忽略。
3.3 场景装饰:程序化生成 vs 手工摆放
场景装饰这块,GLM5.3 的程序化生成思路明显胜出。我详细看了它的实现,值得展开讲。
它的树生成函数大概是这样:
// GLM5.3 的程序化树生成 function createTree(x, z, scale) { const tree = new THREE.Group(); const trunkGeo = new THREE.CylinderGeometry(0.2 * scale, 0.3 * scale, 2 * scale, 6); const trunkMat = new THREE.MeshStandardMaterial({ color: 0x8B4513 }); const trunk = new THREE.Mesh(trunkGeo, trunkMat); trunk.position.y = 1 * scale; tree.add(trunk); const crownGeo = new THREE.IcosahedronGeometry(1 * scale, 0); const crownMat = new THREE.MeshStandardMaterial({ color: 0x228B22, flatShading: true }); const crown = new THREE.Mesh(crownGeo, crownMat); crown.position.y = 2.5 * scale; tree.add(crown); tree.position.set(x, 0, z); return tree; }这里有几个细节值得说。圆柱的径向分段设为 6,这是低多边形风格的关键,分段太多就变成"高模"了,失去风格感。二十面体的 detail 设为 0,也是同样的道理。flatShading: true让树冠有棱有角,强化低多边形风格。这些参数选择说明 GLM5.3 对低多边形美学是有理解的,不是随便填的数。
Step 5 Preview 和 DeepSeek V4 Pro 都是手工摆放几个立方体或圆柱,虽然也能用,但场景看起来比较"空",缺乏游戏感。我后来把 GLM5.3 的树生成函数移植到了最终项目里,稍微改了下参数,效果很好。
注意:程序化生成虽然好,但要注意随机种子的控制。如果每次刷新页面树的位置都变,玩家会失去空间记忆。我在最终项目里用了固定种子的伪随机函数,保证每次生成的场景一致。
3.4 计时系统:一个容易被忽视的精度问题
计时系统看起来简单,但三个模型的实现差异暴露了一个常见误区。
Step 5 Preview 和 DeepSeek V4 Pro 都在主循环里累加deltaTime:
// 主循环累加计时 let elapsed = 0; function animate() { const deltaTime = clock.getDelta(); elapsed += deltaTime; if (elapsed >= 60) { endGame(); } // ... 渲染逻辑 }GLM5.3 用了setInterval:
// setInterval 计时 let remaining = 60; const timer = setInterval(() => { remaining -= 1; if (remaining <= 0) { clearInterval(timer); endGame(); } }, 1000);两者的区别在长时间运行时会显现。setInterval的 1000 毫秒是"至少 1000 毫秒",浏览器在繁忙时可能延迟到 1010 甚至 1020 毫秒,累积下来 60 秒的计时可能实际过了 62 秒。而主循环累加deltaTime是和渲染帧绑定的,虽然也有误差,但不会累积得那么快。
我实测跑了几次,setInterval版本的 60 秒实际耗时在 60.5 到 61.2 秒之间波动,主循环版本在 60.1 到 60.3 秒之间。对于休闲游戏这个差异可以接受,但如果做的是竞速游戏,这个误差就会影响公平性。
还有个细节:页面切到后台时,浏览器的setInterval会被节流,可能变成每秒只执行一次甚至更慢。而requestAnimationFrame驱动的游戏主循环在后台会暂停,切回来时deltaTime会是一个很大的值,需要做上限截断,否则角色会瞬移。这个坑我在实测中踩到了,后面会讲怎么处理。
4. 整合优化与最终项目落地
4.1 取长补短的整合策略
三个模型各有优劣,我的最终项目没有直接用任何一个的完整产出,而是做了一次"取长补短"的整合。具体策略是:
移动系统用 Step 5 Preview 的帧率无关插值,因为收集类游戏平滑优先。碰撞检测用 DeepSeek V4 Pro 的精确球体碰撞加防穿透,但把判定半径改成了玩家半径加光球半径。场景装饰用 GLM5.3 的程序化树生成,加了固定随机种子。计时系统用主循环累加deltaTime,并加了后台切换的deltaTime截断。代码结构用 Step 5 Preview 的五模块划分,但把配置常量单独抽出来,参考了 GLM5.3 的做法。
这个整合过程本身就是一次学习。我发现模型生成的代码更像是"草稿",真正能用的代码需要人来判断和整合。每个模型都有自己的"偏见"——Step 5 Preview 偏工程,DeepSeek V4 Pro 偏数学,GLM5.3 偏实用。人的价值在于知道什么场景该用什么。
4.2 关键参数的计算与调优过程
整合过程中有几个参数需要计算和调优,我把过程记录下来。
移动速度:需求里没给具体数值,我根据游戏体验反推。场景大小是 40x40 单位,玩家从中心走到边缘需要 20 单位。我希望这个时间在 3 秒左右,所以速度设为 20/3 约等于 6.7 单位每秒。实测下来 6.7 稍快,调到 6.0 手感最好。
收集半径:玩家角色半径 0.5,光球半径 0.3。如果判定半径设为 0.8(两者之和),玩家边缘碰到光球边缘就算收集,手感自然。如果设为 0.3,就要走到光球中心,太硬。最终用 0.8。
光球数量与分布:需求说 20 个。我实测发现 20 个在 40x40 的场景里密度适中,玩家平均每 3 秒能收集一个,60 秒理论上能收集 20 个。但实际因为要跑动,一般能收集 12 到 15 个。这个难度曲线我觉得合适,不会太简单也不会太挫败。
光照参数:环境光强度 0.6,方向光强度 0.8,方向光位置在 (10, 20, 10)。这个组合下场景明亮但不刺眼,阴影柔和。我试过环境光 0.8 加方向光 1.0,太亮,光球的光晕都看不清了。
光球发光效果:用MeshStandardMaterial的emissive属性,颜色设为青色,强度 0.5。再加一个点光源在光球位置,强度 1.0,距离 3。这样光球在场景里很显眼,玩家一眼就能看到。
4.3 后台切换的 deltaTime 截断处理
前面提到的后台切换坑,我详细讲下怎么处理。当页面切到后台,requestAnimationFrame会暂停。切回来时,clock.getDelta()返回的是从上次暂停到现在的总时间,可能是几十秒。如果不处理,角色会瞬间移动几十秒的距离,直接飞出场景。
处理方法是给deltaTime加一个上限:
// deltaTime 截断 let deltaTime = clock.getDelta(); if (deltaTime > 0.1) { deltaTime = 0.1; }0.1 秒相当于 10 帧的时间,即使卡顿也不会让角色移动太远。这个处理三个模型都没做,是我实测中踩坑后加的。这个坑很隐蔽,因为开发时很少切后台,但玩家实际使用时切后台是高频操作。
提示:除了 deltaTime 截断,还可以监听
visibilitychange事件,在页面隐藏时暂停游戏,显示时恢复。这样体验更好,但实现稍复杂。对于小游戏,deltaTime 截断就够了。
4.4 最终项目的性能表现
整合后的项目我做了性能测试。在 RTX 4070 上,1080p 分辨率下稳定 60 帧,GPU 占用率约 15%。在集成显卡的笔记本上,帧率在 45 到 60 之间波动,GPU 占用率约 40%。这个性能对于浏览器 3D 游戏来说是可以接受的。
性能瓶颈主要在光球的点光源上。每个光球一个点光源,20 个点光源对 GPU 是不小的负担。我试过把点光源去掉,只保留emissive发光,帧率在集成显卡上能提升到稳定 60 帧,但光球的"发光感"会弱一些。最终我保留了点光源,因为视觉效果更重要,而且目标用户的设备一般不会太差。
如果要做进一步优化,可以考虑用实例化渲染(InstancedMesh)来批量渲染光球,或者用后处理的 bloom 效果来模拟发光,减少实时光源数量。这些是后续可以扩展的方向。
5. 常见问题排查与避坑经验实录
5.1 模型生成代码的典型问题速查表
在实测过程中,我整理了三个模型生成代码时的高频问题,做成速查表方便对照。
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 角色移动一顿一顿 | 用了固定步长而非 deltaTime | 检查移动代码是否乘了 deltaTime | 改用帧率无关插值 |
| 高速移动穿过光球 | 碰撞检测只看当前位置 | 把速度调高测试 | 加路径投影检测 |
| 切后台回来角色瞬移 | deltaTime 未截断 | 切后台 10 秒再切回 | 加 deltaTime 上限 |
| 计时不准 | 用了 setInterval | 对比实际耗时 | 改主循环累加 |
| 场景太暗 | 光照强度不足 | 检查环境光和方向光强度 | 环境光 0.6 方向光 0.8 |
| 光球不显眼 | 缺少发光效果 | 检查材质 emissive | 加 emissive 和点光源 |
| 树的位置每次刷新都变 | 随机种子未固定 | 刷新页面观察 | 用固定种子伪随机 |
| 代码越写越乱 | 单文件堆砌 | 看文件行数 | 按职责拆模块 |
这张表里的每一条都是我实际踩过的坑,不是理论推测。比如"切后台回来角色瞬移"这条,我是在测试时无意中切了下后台才发现的,如果不做这个测试,这个 bug 会一直留到用户手里。
5.2 三个模型各自的"脾气"与应对
用久了会发现,每个模型都有自己的"脾气",了解这些能让你用得更顺手。
Step 5 Preview 偏工程,它会主动帮你做模块化、加注释、考虑扩展性。好处是代码结构好,坏处是有时候会"过度设计"。比如我只要一个简单的距离判断,它可能会给你封装成一个带配置项的碰撞系统。应对方法是需求描述里明确说"保持简单,不要过度封装"。
DeepSeek V4 Pro 偏数学,它喜欢用严谨的数学表达,代码里经常出现向量运算和矩阵推导。好处是精度高、边界情况处理好,坏处是代码可读性对新手不友好。应对方法是如果看不懂它的数学,可以让它"用更直白的方式重写这段"。
GLM5.3 偏实用,它的代码最接近"能直接用的水平",中文注释也最到位。好处是上手快,坏处是有时候会在细节上偷懒,比如计时用 setInterval。应对方法是关键模块要自己 review 一遍,别完全信任。
实操心得:我现在的习惯是,同一个需求先让三个模型各出一版,然后对比着看。不是为了选一个,而是为了看不同思路。有时候 A 模型的某个细节处理得妙,B 模型的某个结构更合理,整合起来比任何单一模型都好。这个"三模型对照法"虽然费点时间,但产出质量明显更高。
5.3 从"能跑"到"好玩"的最后一公里
代码能跑起来只是第一步,从"能跑"到"好玩"还有一段路。这段路模型帮不上太多忙,得靠人来调。
我实测发现,模型生成的游戏在"手感"上普遍偏"硬"。具体表现是:移动响应太直接,没有缓冲;收集反馈太弱,没有音效和粒子;难度曲线太平,没有起伏。这些都需要手动调。
我做的几个调整:移动加了一点起步和停止的缓冲,参考了 DeepSeek V4 Pro 的阻尼思路,但只用了很小的阻尼系数,保持轻快感。收集光球时加了一个缩放消失的动画,用requestAnimationFrame做一个 0.2 秒的缩放,比直接消失有反馈感。光球收集后 5 秒在随机位置重生,保持场景里始终有 20 个光球,避免后期没东西可收集。
这些调整都不复杂,但效果很明显。我让几个朋友试玩,加了这些细节之后的版本,他们的评价从"能玩"变成了"有点意思"。游戏开发的最后一公里,往往就是这些细节决定的。
5.4 关于 WorkBuddy 等工具链的延伸思考
实测过程中我也在思考工具链的问题。现在市面上像 WorkBuddy 这类 AI 工作台工具越来越多,它们把模型能力包装成了更易用的形态。对于不写代码的人来说,这类工具确实降低了门槛。但对于要做 3D 游戏这种复杂项目的开发者来说,直接调用模型 API 反而更灵活,因为你可以控制每一个细节,可以对比不同模型,可以整合最优方案。
WorkBuddy 这类工具的价值在于"标准化流程",比如它可能内置了代码审查、测试生成、文档编写等 skill。如果你做的是重复性较高的开发任务,用这类工具能省不少事。但如果你做的是探索性的、需要反复对比和调优的项目,直接和模型对话更合适。
我的建议是:把 WorkBuddy 这类工具当成"加速器",而不是"替代品"。它能帮你更快地完成已知任务,但探索未知方案时,还是得自己动手。这次三模型实测就是一次探索,过程中学到的关于移动插值、碰撞检测、计时精度的知识,是任何工具都给不了的。
6. 实测结论与个人体会
三个模型跑完这一轮,我的整体感受是:它们都能完成 3D 游戏的基础开发,但各有各的"性格"。Step 5 Preview 像个靠谱的架构师,代码结构最省心;DeepSeek V4 Pro 像个严谨的数学家,边界情况处理最到位;GLM5.3 像个务实的工程师,上手最快、中文理解最好。
如果非要选一个"综合最强",我会选 Step 5 Preview,因为它的工程结构在项目变大时优势最明显。但如果只做小项目,GLM5.3 的性价比最高。DeepSeek V4 Pro 适合对物理精度要求高的场景,比如模拟类游戏。
最后分享一个我在这次实测中最大的体会:模型生成的代码质量,很大程度上取决于你的需求描述质量。我第一版需求描述写得比较随意,三个模型的产出都偏"通用"。后来我把需求拆得更细,明确了场景大小、角色速度范围、光球数量这些具体参数,产出质量立刻上了一个台阶。所以与其纠结用哪个模型,不如先把需求想清楚。需求描述里的每一个模糊点,都会变成模型产出里的一个坑。