你们好,今天我们要讨论一些关于飞行机器人的改进。我们修复了一些被反馈了很多次的问题,所以我希望这次会得到大家的认可 :)。
易玩性 vs 华而不实的功能
"我知道你们很期待新内容的发布,而仅仅是提高游戏的易玩性并不会让人们感到兴奋。
如果想在游戏中添加内容、机制和系统,就并不简单,总是存在太多的风险。但通过提高游戏的易玩性,我们减少了小麻烦和烦恼,从而有效地创造了额外的心理空间,可以在游戏中享受更多乐趣。 这就像在买新玩具之前打扫房间一样。
所以说清楚一点,我们做出并呈现这些改变的原因并不是因为我们不想做出新的华而不实的功能,我们只是想让新的东西令人愉快,而不会有太多的负担要处理 。
但别担心,我们下周会展示一些新东西!"
对机器人执行任务进行优化
物流和施工机器人已经出现了一段时间,其核心是相当简单的。例如,物流机器人可能会被告知从一个箱子中拿起一个物品,然后将其运送到另一个箱子中。到目前为止一切顺利,但在异星工厂中,通常会有不止一个物品需要转移 —— 那么当游戏需要将 500 个物品从一个盒子转移到另一个盒子时,游戏会做什么呢?
旧的工作方式
"在异星工厂 1.1 中,游戏保留了所有闲置机器人的列表,包括那些隐藏在机器人指令平台中的机器人,当需要处理任务时,它会从该列表中选择最近的闲置机器人。因此,如果要将 500 个物品从提供者的箱子转移到请求者那里,游戏将找到距离提供者箱子最近的第一个空闲机器人,并安排其进行转移。该机器人现在已经有了任务,因此将从空闲机器人列表中删除。
但我们还有 499 个其他物品需要转移(为简单起见,忽略机器人容量奖励)。物流网络将会对所有其他物品重复前面的步骤 - 找到下一个最近的空闲机器人,分配其转移下一个物品的任务,依此类推,直到机器人负责箱子中的 500 件物品中的每一件。
这种策略的问题在于,虽然前几个机器人可能位于距离提供者箱子很近的机器人指令平台中,但当轮到最后一个物品时,网络可能必须使用工厂另一端的机器人,因为附近没有更接近的闲置机器人来完成这项任务。最终的结果是,第一批机器人会到达箱子那里,拿走物品并运送到目的地,然后充电并在机器人指令平台小睡 —— 传送单个物品就是这些机器人的全部任务,剩余的物品已经分配给其他机器人。之后,来自工厂较远地区的机器人将缓慢进入并转移剩余的物品。"
完整视频的链接在下面:cdn.factorio.com/assets/img/blog/fff-369-logistics-before.mp4
施工机器人的情况类似,并且在使用便携式机器人指令平台时尤其明显。假设玩家想要移除工厂里的一堆树。个人机器人指令平台最多可以拥有 25 个施工机器人,因此玩家的个人机器人最多可以砍伐 25 棵树。所有剩余的树木将被分配给来自主网络的机器人,玩家必须等待它们到达,树木才会消失 —— 即使玩家的个人机器人就在那里,没有事情可做!
完整视频的链接在下面:
https://cdn.factorio.com/assets/img/blog/fff-369-construction-before.mp4
新的工作方式
"仅从空闲机器人列表中选择机器人来执行任务显然不是最佳策略。将任务分配给当前忙碌但在附近的机器人可能是更好的选择,即使新任务可能必须等到机器人完成其他任务才能开始执行,这需要对物流网络代码进行两项主要更改。
第一个变化是允许机器人分配多个任务。大部分代码都是在假设机器人只负责一项工作的情况下编写的,但经过一些代码重构后,机器人现在拥有一个任务队列。
其次,我们需要一种方法来选择机器人来执行任务。每个任务都有一个起始位置,例如解构顺序需要从解构机器人实体开始。到目前为止,选择过程很简单 —— 只需选择距离该点最近的空闲机器人即可。但现在,当我们还可以选择具有一个或多个排队任务的机器人时,这个过程变得有点复杂。
选择机器人的新指标是到达时间。对于空闲机器人,其到达时间就是到起始位置到目标位置的距离除以其速度。对于一个忙碌的机器人,我们可以查看它的任务队列,找出机器人完成任务后将在何时何地结束,然后将那个位置添加到新任务的起始位置。为一项任务选择机器人时,我们会选择第一个到达的机器人,即使它在此之前必须处理其他事情。
值得指出的是,到达时间的计算只是一个估计。例如,我们简化了充电时间的影响。敏锐的玩家无疑会注意到选择不同的机器人可能会更有效的情况。但从大局来看,似乎并不是很引人注目。
让我们看看新系统如何处理我们前面的两个示例。第一批机器人的任务是转移所有物品,这导致它们在请求者和提供者之间来回移动。"
完整视频的链接在下面:
cdn.factorio.com/assets/img/blog/fff-369-logistics-after.mp4
对于砍伐树,玩家的每个机器人所做的不仅仅是针对一棵树。来自主网络的机器人仍然会提供帮助,但这一次是因为它们可以帮助更快地完成整个工作。
完整视频的链接在下面:
https://cdn.factorio.com/assets/img/blog/fff-369-construction-after.mp4
表现
"对于小型工厂来说,拥有一份所有工作中的机器人的简单列表并在每次新任务到来时进行检查可能会很好,但如果数千个机器人飞来飞去,它会很快消耗电脑性能。为了缓解这种情况,我们实施了不同的解决方案。
每当机器人的任务队列更新时,它都会计算其最终位置估计,即其最终位置和完成时间。现在,每个地图块都存储预计完成该块的所有工作中的机器人的列表。当机器人更新其最终位置时,它会将自己注册到该机器人列表中。因此,当为一项任务搜索机器人时,游戏现在会从任务起始位置所在的区块开始搜索,并以向外螺旋的方式继续搜索。
将工作中的机器人分块存储并进行螺旋式搜索,性能将会大大提高,即使是拥有数千台繁忙机器人的工厂也运行良好。"
优化其他方面
在过去的两年里,我们在开发扩展的同时,也积累了更多的功能和变化,使机器人感觉更智能,工作得更好。
机器人指令平台任务
在某些情况下,你需要确保一些机器人指令平台里始终有机器人来执行任务。例如,如果你有一个带有补给箱的小补给点,你希望周围的物流机器人能够快速清空垃圾并补充补给品。但当所有材料都在那里时,这是相当烦人的,但你却被困在那里等待,因为由于自然的机器人迁移模式,该地区的机器人指令平台非常空。
完整视频的链接在下面:
https://cdn.factorio.com/assets/blog-sync/fff-374-robot-requests-before.mp4
它可以通过请求者的箱子、插入器、电路网络等来解决……但我们决定采用更平滑的方法。您现在可以直接在机器人指令平台 GUI 内设置机器人的物流任务。机器人将从其他机器人指令平台派遣一些过来满足任务需求(需要注意的是,机器人不会被仓库或提供者的箱子中取出)。
有了这个新功能,我们可以将补给点附近的所有机器人站设置为始终有 100 个可用的物流机器人。一旦到达上线,我们的需求就会在创纪录的时间内得到满足,之后你可以看到机器人到达,将机器人指令平台的机器人恢复到 100 个。
完整视频的链接在下面:
https://cdn.factorio.com/assets/blog-sync/fff-374-robot-requests-after.mp4
另一个很好的用途是我们可以使用机器人指令平台任务从网络中删除某些机器人。也许我们有一些具有较高质量的工人机器人模组,我们可以要求低质量的机器人执行任务并用过滤器插入器将其移除,随着时间的推移,将较差的机器人从流通中移除。
更好的机器人充电模式
"当工作机器人的能量不足时,它们需要找到附近的机器人指令平台来充电,但它们需要聪明一点。例如,如果它们总是选择最近的机器人机场,那么在一些机器人指令平台会出现排队和交通拥堵,而另一些则完全空无一人。
对此,我们使用非常简单的模式,不仅考虑机器人港口的距离,还考虑目前有多少其他机器人正在那里充电。通常情况下,这种方法“足够好”,但时不时你可能会遇到一些不方便的情况,它们仍然聚集在一些机器人指令平台上,而忽略了其他稍微远一点的机器人指令平台。"
完整视频的链接在下面:
https://cdn.factorio.com/assets/blog-sync/fff-374-charging-heuristic-before.mp4
在某些极端情况下,这实际上可能是一个很大的问题,因为等待充电的机器人仍然使用能量进行悬停,因此会损失更多能量,在正反馈循环中,所有加入队列的机器人在等待时都会降至 0 能量。一般来说,玩家看着机器人并认为“这些机器人太笨了......”。
我们可以做得更好......令人惊讶的是,在这种情况下,只需对模式逻辑进行一点小小的改进,问题就可以得到很大帮助。在决定在哪个机器人场充电时,机器人没有考虑当前正在前往该机器人场的机器人,而只考虑已经在队列中的机器人,并且没有考虑机器人场开放了多少个免费充电点。通过将这两个额外参数添加到方程中,机器人的分布得到了很好的改善。
完整视频的链接在下面:
https://cdn.factorio.com/assets/blog-sync/fff-374-charging-heuristic-after.mp4
缓解机器人在湖泊上行走的问题
"这个问题已经存在很长一段时间了,机器人在寻路方面相当愚蠢,并试图飞越没有物流网络覆盖的区域。这是因为出于性能原因,我们根本不进行任何寻路。机器人只是直线飞行到工作位置。
其中一个主要问题是机器人有可能陷入无限循环。这是因为它们飞过未覆盖的区域,耗尽电池,然后返回充电并重试。显然这样一来,它们永远不会成功。"
完整视频的链接在下面:
https://cdn.factorio.com/assets/blog-sync/fff-374-robot-path-before.mp4
这个问题对我们来说足够烦人,以至于我们确实出有效的解决方案。 我们找到的解决方案是在机器人快要耗尽能量时做出一个聪明的选择。通常机器人只会选择最近的机器人指令平台之一,这在正常情况下没问题,但在这种情况下会导致机器人掉头返回而导致任务失败。
所以我们改变了选择逻辑,让机器人在更接近目的地的机器人指令平台充电。 这意味着,即使机器人可能会以低能量飞行更长时间,它也始终能够朝着目标取得一些进展,并最终完成任务。
完整视频的链接在下面:
https://cdn.factorio.com/assets/blog-sync/fff-374-robot-path-after.mp4
这不是一个完美的解决方案,但也许可以修复问题。
#pc游戏# #单机游戏# #steam游戏# #游戏推荐# #多人游戏# #异星工厂# #太空时代# #基地建设# #自动化# #沙盒# #资愿管理# #星期五报道#
更多游戏资讯请关注:电玩帮游戏资讯专区
电玩帮图文攻略 www.vgover.com