一个NPC冲浪选手的一年

先看一个设计示例。NPC“周屿”,二十二岁,港口城市本地人,主项冲浪,所属一家海岸俱乐部,年初在区域排名第十四。

  • 一到三月:冬季涌浪大,他每周下水五天,重点练大浪里的起乘和底部转向,参加两场俱乐部内部赛,一胜一负。
  • 四月:在一场海岸公开赛里第一次遇到玩家,半决赛输了,赛后他的记忆里多了一条:“对手喜欢等浪组里的第三道浪。”
  • 五到六月:夏季浪小,他跟着俱乐部去南边海湾集训,排名升到第九。
  • 七月:一次训练中撞上礁石,脚踝轻伤,停训三周,错过了一场重要比赛,排名回落到第十二。
  • 九月之后:伤愈复出,在秋季赛里再次遇到玩家,这次他提前卡住了第三道浪的位置,赢了。

这一年里,周屿没有一天是站在固定坐标等待玩家的。他在训练、比赛、旅行、受伤、恢复,排名随之起落。玩家即使三个月没去海边,回来时也会发现他变了。这就是我们希望在im体育里实现的NPC运动员职业生涯。

能力曲线:进步要有来源

NPC的能力不应该是一个固定数值,也不应该跟着玩家等级自动上涨。我们的设计是把运动能力拆成若干维度,以冲浪为例:划水速度、起乘时机、选浪判断、转向技术、体能。每个维度的成长都要有来源:训练时长、比赛经验、教练与俱乐部条件、年龄阶段。

成长曲线的形状也有讲究。年轻选手进步快但波动大,老将技术稳定但体能逐渐下降;每个人有自己的天花板,不是所有NPC最终都会变成顶尖选手。这样一来,同一个区域的NPC群体会自然形成层次:有正在崛起的新人,有处在巅峰的主力,也有逐渐转去做教练的老队员。

NPC变强的方式也必须真实:更好的路线和选浪、更合理的判断、针对玩家习惯调整、适应天气和海况、更少失误。它们不应该偷看玩家的输入,也不应该在比赛里获得额外速度。

伤病与状态:让NPC有“今天不在状态”的时候

真实运动员会疲劳、会受伤、会状态起伏,NPC也应该如此。我们给每个NPC维护几项短期状态:体力、伤病、信心。连续比赛会累积疲劳;高风险动作失败有一定受伤概率,伤病会让NPC停训或降低某些维度的能力;连胜会提升信心,让他更愿意选择冒险路线。

状态的恢复同样需要时间。受伤的NPC回归后,往往先参加低级别比赛找回手感,信心在一两场好成绩后才慢慢回升。玩家如果恰好在这段时间遇到他,会发现他比记忆中谨慎,这种变化本身就是一段可以被读出来的经历。

这些状态直接影响NPC的决定。一个脚踝有伤的冲浪选手,面对一场大浪赛事的邀请可能会拒绝,这类决定也会进入动态赛事的参赛者邀请环节。玩家因此会遇到“宿敌这周不在报名名单上”的情况,并能在世界里找到原因。

宿敌关系:从一场比赛到一段历史

宿敌(Rivalry)不能靠剧本指定,它应该从交手历史中长出来。我们的规则是:两名选手在一定时间内多次交手,胜负接近,且至少有一场关键比赛(决赛、排名交换)时,关系才会升级为宿敌。

宿敌关系会改变NPC的行为:他会更关注玩家的比赛结果,主动报名玩家参加的赛事,赛前研究玩家的习惯,赢了以后在俱乐部里提起这件事。周屿第二次赢玩家,就是因为他记住了“第三道浪”这个习惯,并在秋季赛里提前占位。这是学习玩家,不是作弊:他知道的只是公开比赛里能观察到的东西。

俱乐部让关系网更大。周屿的俱乐部队友会知道他和玩家的恩怨,玩家在另一个项目里遇到这位队友时,对方可能带着几分敌意或好奇。NPC自己的训练目标和生活安排怎样影响这些关系,可以参考NPC的生活与目标

记忆的边界:记什么、忘什么

NVIDIA ACE推出的“自主游戏角色”,比如PUBG Ally和inZOI里的Smart Zoi,代表了行业里让NPC具备感知、规划和行动能力的方向,并在GDC 2026前后强调已经进入实际游戏集成。不过体育NPC的重点不只是对话和日常行为,更需要一个可靠的运动能力模型:他在浪上、雪上、滑板上到底能做到什么。

记忆同样需要边界。在im体育AI的设计里,NPC长期记住的是结构化的信息:比赛结果、排名变化、对玩家风格的少量判断、宿敌关系、俱乐部归属和重要经历。每场比赛的逐帧细节不会保留,只沉淀成几条摘要。时间久远、影响不大的记忆会逐渐淡化,比如一场三年前的友谊赛。

这样做一方面控制存储和计算,另一方面也更像真实的人:没有人会记得每一道浪,但都会记得输掉的那场决赛。在im体育的世界里,NPC运动员的职业生涯,最终就是由这些被记住的比赛串起来的。