几个日子前,我在r/vibecoding上发布了Node Control(nodecontrol.gg),这是2026 vibe jam期间由我编写的一个竞争性多人.io领土游戏。 我们的帖子关注的是整体的构建体验,它的回应远远超过了我的期望。
我想发表一篇博客 article,深入探讨技术方面,集中关注网编(netcode),因为这才是我真正困扰的地方,这也许是最值得分享的教训了。
因此,这里是我的Aigamedev编程 netcode 心理分析。
设定
Node Control是一个实时多人IO游戏,客户端和服务器一直在和对方交互,服务器是有权颇且有界限的,60秒钟一次就是。网格是被切成六边形的,六边形 tile 表示有明显的个体特性,和理论上是存在的叠加多个 boost 机制。
当我在本地做出最后的手续时,自己的游玩体验非常不错。而将其推入生产环境,让玩家感觉完全不错。
虽然,我有一点儿手势灵敏性,我的鼠标键盘输入需要在大幅匹配网页显示上显示输出,我就会有很大的眩晕头痛。自己的游戏会让自己头痛,真的是令人难以接受。
仅在发布上出现的四个问题
1. 方向改变的瞬间反弹。 我会 boost 向上,快速的向下+右移动,我的角色旋转。然后,我的角色会瞬间返回向上的地方。然后,角色最后会变向下右。 人工智慧 机制认为这是“可接受”的……
2. 平稳的位置振荡。 长时间的直线加速有一个低振幅的抖动,即使我不输定位输入。
3. 服务器 tick 速度太粗糙。 我开始以每秒40次,因为当我在地面测试时,它的确比较接近。 一旦我上了线,一旦我发现完全不可接受了。在每秒40次的情况下,每次 tick 都会推进moveProgress的0.44个tile 在最高速度下。 这意味着在每个broadcast(广播)之间有明显的差异。这是任何差异在调整和调整时产生的剧烈重整。
4. 多国联通路由。 ICMP echo request 回合了50ms的RTT(回声抖动时间)。真正的app RTT是超过100ms的。Fly的边上是对应ping的最靠近的 Pop(点——位聚合点),而不是正在运行游戏的机器。
为什么这些难以解决
人工智慧机制能处理很多任意任务,但上面这些问题是一个特殊类型不同的问题。每种问题的解决方案并不复杂(约50行代码),但是人工智慧机制就是找不到解决方案。
反弹。 我需要自己编写数学实现。条件是latency × speed > threshold意味着client端和server端在输入相同时会因为延迟而产生不同的分区和immediate决策。
人工智慧机制从来没有建议出过这种框架,它始终建议的是症状级别的解决方案,如降低混合因子、隔离序列ID、缓存前一步转向,每种解决方案都是自信满满的,并且又不正确。
振荡。 人工智慧机制无法感受到问题本身。它执行了我所要求的每种变体,但它无法告诉我是否新版本的build体验有了改善。这是一个只能我完成的闭环,诊断工作需要数十个测试会话。
失败的实验。 我尝试了采用四种架构上的错误改变。 AI机制每次都进行了精确的实现。 但是它们不能认出“等一下,这是一个坏主意”
最昂贵的那一个改变是将服务端的预排队方向状态广播给客户端端。 但是这会使游戏在tile边界位置出现路径分离的问题,所以我的不得不切换回之前的分支。
架构限制和如何穿过它
在boost加速时,服务器和客户端都无法在方向输入上进行匹配的排队和立即执行决策。 无论再多的代码调试,都无法找到解决方案。
要么两端都做排队的(带来50-80ms的输入延时),或者客户端立即执行,而服务端做排队(导致一种在服务端做快进,在客户端做顿挫)。
其他要消除这个问题的解决方案都存在缺陷:
- 降低加速速度会改变玩法,而加速是最喜欢的机制。
- 回滚网编,哪怕对单个tile移动来说也算是比较低效。
- 重写运动来非六边形tiles系统会是全新框架。
然而,这些都不存在。
最终实际上起作用的还是降低延迟。 很明显我是可以在localhost上获取立即响应的,因为我只启动了一个服务端。所以我尝试了尽可能快的服务端响应。 我在美国的东西和西部、欧盟和阿州部署了多个Fly地区。 我在客户端使用了无国界路由,以便每个玩家都直接连对最靠近的服务端。 我也允许手动指定服务端,因为我无法使用自动连接的同时,玩家又无法和朋友玩游戏。并且,在我体验了无国界路由之后,我发现会有时会被连接到错误地方。
这样,平均回程时间从100ms一下子暴降到20-50ms(取决于你在哪)。 队列延迟仍然存在,但是在延迟时间降低到这个水平后,就会变得十分地小。这对于我来说是最重要的,没有再次出现眩晕头痛。
给开发者提的建议
- 人工智慧机制优点在于,它能够迅速实现。 但是你需要掌握建筑和/或诊断。尤其是对于“感受到的体验”的问题时,强调。
- 不信任人工智慧机制有关体验问题的自信。 每种错误的主意都是正是如此自信的,也是错误的,信号丧失了。
- 当人工智慧机制提议相同类型的解决方案两次,而问题继续存在时,你有可能已在解决方案空间的错误区域。 回想一下要要干什么
来一起聊
如果你想体验以上这些问题,你就可以在https://nodecontrol.gg体验。
当我在r/vibecoding上发布消息时,我才意识到我不需要设立Discrod和Reddit。 回应是成功的,我就决定继续参与这个项目,并且现在都存在。
如果你想跟随项目,或者寻求关于这个游戏或各种基础知识的信息和问题,或者寻求关于编程或者游戏设计(我的领域)的信息,就来这里:
*Discrod:https://discord.gg/GzXGnxMD7
* Reddit: r/nodecontrol
评论 (0)