先设定一条要检查的赛道

下面用一个模拟示例说明,所有尺寸和车速都是为了演示设定的数值。玩家输入:“夜晚的山路赛道,12个弯,中间有一段跳台,终点在山顶观景台,支持12辆车同时比赛。”生成结果是一条约2.8公里的环形山路,主直道约400米,第一弯是右手发卡弯。

在乐鱼体育的做法里,AI拿到这条赛道后,按照车辆行驶的顺序检查,而不是按“地图、碰撞、规则”这种模块顺序。原因很简单:玩家读报告时,脑子里想的是“第几个弯出了问题”,而不是“碰撞模块报了哪一条错误”。

发车格主直道与第一弯路线中段跳台与特殊路段终点与计时换车再跑一圈

发车格:12辆车真的放得下吗

第一项检查在比赛开始之前。12个出生位要逐个确认:车辆外形是否完全落在路面上,与护栏、路肩石、观众席的碰撞体是否有重叠,相邻两个出生位之间是否留出足够的横向间距。山路赛道的路面往往比场地赛道窄,本例中路面宽度只有11米,按两列发车时,第11、12号位最容易被挤到路边的排水沟上。

另一个容易漏掉的问题是出生朝向。生成模型有时会让发车格沿着路面切线摆放,但如果起点刚好位于一段弯道上,车头会略微偏向护栏,开局一给油就擦墙。AI需要检查每辆车车头方向与路线方向的夹角,超过一定角度就提示调整。

第一弯:整场比赛最容易出事的地方

第一弯要单独检查,因为这里是所有车辆唯一一次挤在一起进弯的地方。

AI会估算主直道末端的最高车速,再按这条赛道允许的最快车型计算需要多长的制动距离。本例主直道末端车速约230公里每小时,如果第一弯前可用的制动区只有90米,而最快车型从这个速度减到过弯速度需要约120米,那么即使最熟练的玩家也会冲出弯道。报告应该写清楚两个修改方向:延长主直道末端的缓冲区,或把第一弯改成半径更大的弯。

第一弯出口还要检查缓冲区。发车后的前几秒一定会有碰撞和冲出,弯道外侧如果紧贴悬崖或墙体,冲出的车辆没有回到赛道的空间,整场比赛在第一分钟就会失去一半参赛者。

路线中段:死路和“看起来是路”的地方

进入中段后,重点是路线的连通性。AI把可行驶路面看作一张图,检查从起点到终点是否只有预期中的路线相连,同时寻找三类问题:

  • 死路:一段路面和主路相连,但另一端被山体或护栏封死,车辆开进去以后没有足够空间掉头。生成模型在山路上尤其容易留下这种“半截岔路”。
  • 视觉路面:看起来是一条小路,实际上没有可行驶的碰撞表面,车辆开上去会直接穿过地面掉落。
  • 意外捷径:两段相邻的弯道之间只隔着一片没有护栏的草坡,车辆可以直接切过去,一圈省下十几秒。

对死路的处理要问作者意图。有些作者就是想放一条岔路增加迷惑性,这没有问题,但岔路末端必须留出掉头空间,或者设置一个自动回到主路的重生点。

碰撞:外观和物理必须是同一回事

碰撞检查的原则只有一条:视觉上是什么,物理上就应该是什么。本例中需要重点看三处:

  1. 悬崖边护栏:确认每一段护栏都有碰撞体,而且碰撞体没有断档。护栏只有模型没有碰撞,比完全没有护栏更危险。
  2. 跳台落点:按不同车速模拟起跳,计算落地位置是否都在路面上。如果只在很窄的车速区间内能安全落地,就要标出这个区间。
  3. 隧道与桥洞:检查顶部高度,车辆在跳台或坡顶腾空后进入隧道时,车顶是否会撞上隧道上沿。

终点与计时:让完整一圈被正确记下来

一圈能跑完,不等于一圈能被记下来。AI需要从计时系统的角度再过一遍:

  • 检查点是否按行车顺序排列,间隔是否足够密,能覆盖前面发现的所有潜在捷径。
  • 每个检查点的判定区域是否横跨整个路面,贴着内线或外线通过都会被识别。
  • 起点线和终点线的关系:环形赛道起终点通常重合,需要确认第一次冲线开始计时、之后每次冲线记一圈,而不是一开始就记为第一圈完成。
  • 最后一圈结束时,比赛状态能否切换为结束,排名能否按完成时间正确生成。

检查的方法是让测试代理实际跑一个完整比赛,而不只是一圈,因为“最后一圈之后发生什么”只有跑满圈数才能验证。这一步属于自动游戏测试的范畴,测试代理的驾驶风格也应该有快有慢。

换一辆车,再跑一圈

前面的检查都通过以后,还要做最后一件事:换车。赛道生成时,AI默认用的是一辆中等性能的参考车,但玩家会开各种车上来。

本例建议至少用三类车各跑一个完整比赛:低动力但抓地好的车,检查长上坡是否会让它慢到无法完成跳台;高动力的车,检查第一弯制动区和跳台落点是否仍然安全;操控偏滑的车,检查连续弯道的护栏是否足够。如果某一类车在固定位置反复失败,而另外两类没有问题,就属于车辆适配问题,可以让作者选择修改赛道,或者在赛道说明里限定车型。

上面这些检查全部跑完,也只能说明赛道“能跑”。玩家亲自试玩仍然是发布前不可省略的一步:自动检查告诉你第三个弯的出弯速度会让轻型车冲出护栏,试玩告诉你这个弯开起来是紧张还是憋屈。合理的顺序是生成 → 自动验证 → 自己试玩 → 按报告修改 → 再验证 → 发布,每轮修改都会留下一个新版本,改坏了可以回到上一版。

报告应该怎么写,玩家才改得动

检查结果最终要变成玩家能直接操作的报告。乐鱼体育采用的是按行车顺序排列的格式:

位置问题 严重程度 建议修改
发车格11、12号位 车辆右后轮压在排水沟上 阻止发布 发车格整体后移15米或改为单列错位发车
第一弯 最快车型制动距离不足约30米 阻止发布延长直道末端缓冲区,或增大弯道半径
第6弯岔路 死路末端无法掉头 警告增加掉头空间或设置重生点
跳台仅时速140至170公里可安全落地 警告 延长落地区,或在说明中标注控速
第10弯与第11弯之间 草坡可切弯,节省约12秒 阻止发布 增加检查点或护栏

“阻止发布”的问题必须修完,“警告”的问题由作者决定是否保留。更完整的发布流程,可以参考AI UGC平台如何保证赛道真的能玩。

拿到报告以后,玩家可以这样改

最后给玩家一个修改顺序建议:先处理发车格和第一弯,因为它们决定比赛能否正常开始;再处理捷径和计时,因为它们决定成绩是否可信;死路和跳台这类警告项放在最后,结合自己想要的难度决定。每改完一处,都让AI重新从发车格开始检查一遍,而不是只检查改动的那一段,因为延长一段缓冲区,可能会改变下一个弯的入弯速度。