大家好,
下面我将要介绍我刚刚完成的一个功能。 这个想法我已经想了好几年了。 我一直觉得这个功能太过硬核而不应该被游戏收录,但我认识到我低估我们的玩家了,这是一个我经常犯的错误,于是我自己又试了一下,并决定立马在这里分享给大家。
动机
最普遍激励我做这件事的例子是火车卸货站。 通常情况下,我都会在蓝图中进行整体设置:铁轨、火车停靠站、避免污染从而被筛选出来的机械臂等。 这很好,但每次构建蓝图时,我都需要针对目标项目重新配置所有过滤插入器,还要更改停靠站的名称,非常繁琐。
星期五报道#392 - 蓝图参数化-视频01
建立一个又一个站点是一个漫长而枯燥的过程。
对此在 1.1 版本中有两种解决方法:
⚙ 使用信号网络,但感觉有点矫枉过正(稍后详述),而且目前也无法通过信号网络设置火车站名字。
⚙ 为每个项目设计一个特定的蓝图,这听起来像是一场噩梦。
蓝图参数化
这自然引出了我们想要的定义: 我们希望有一个蓝图,它没有特定的项目配置,而是通用的,并允许您在每次构建时对其进行不同的配置。 问题是,除非我们只在乎这一特定功能,否则如何在不增加不必要的界面杂乱的情况下实现它?
重新配置现有蓝图
拼图的第一块是重新配置现有蓝图的工具。 为简单起见,让我们以这样配置的常量运算器为例:
当我们绘制蓝图时,现在就可以访问用于重新配置的主要新工具了。
这个界面里第出现的第一个也是最简单的用法是将蓝图中出现的某些东西或数字全部改为其他内容。比如我想把蓝图中所有使用 [X] 信号的地方都改成 [Y],只需在界面中更改数值并确认即可。蓝图就这样被重新配置了。
更改蓝图中的所有东西也是一样。
实际上,实体中的所有设置和数字都可以通过这项功能重新配置。比如:被筛选出的机械臂、装配器配方、信号网络设置、运算器的配置、物流需求区、背包筛选器,甚至格式文本图标。
最后一个例子可以用来更改列车停靠站的名称,只要你在其中添加格式文本部分即可。
这已经是一个进步了,因为在建造之前,你可以随时将蓝图重新配置为不同的项目,但这仍然不够好。
参数
第一步是为物品、配方、流体和实体定义特殊 ID称之为参数。
这些在“参数化”中产生的参数没有任何意义,它们只是用于蓝图的通用配置。通常情况下,在游戏中蓝图配置菜单之外的任何地方都无法选择它们,但对于高级用户而言,有一个界面设置可以让这些参数在任何地方都可用。
因此,回到最初的蓝图,我们可以这样重新配置它:
在这里,我将 3 个 ID 都指定为参数,并将两个项目中使用的数字 5 也指定为参数。填写其名称不是必要的,但有助于用户在构建蓝图时知道下一步需要什么。
每当您尝试以这种方式构建蓝图时,都会出现一个小对话框,要求您为这个特定的蓝图实例填写参数:
我十分注重细节,所以当参数被指定时,您甚至可以预览是您的构建是如何变化的。
星期五报道#392 - 蓝图参数化-视频02
参数被选择,则Alt 图标也会随之更新。
一旦按下确认键,蓝图就会按照所需的配置创建。
星期五报道#392 - 蓝图参数化-视频03
利用这些参数从而轻而易举地设置站台
从属参数
到这里已经很有用了,但我觉得还是不够好。为什么呢?因为有时参数是相互关联的,而迫使蓝图用户总是正确填写这些参数并不算是一种很好的方式。
我说的从属关系是什么意思?比方说,我有一个蓝图是需要 3 种原料(参数 1、2、3)来制作物品,并需要从火车网络中获取原料。
当然,我可以制作一个大型装置,其中有 3 个输入站,每个输入站的参数设置为其中一个输入,还有一排组装机,参数设置为制作所需的物品(参数 0)。
但是,每当我想构建这个蓝图时,我就必须记住并手动填充所需物品的 3 种成分,这不仅会拖慢我的构建速度,而且还有出错的可能性。
这就是为什么可以自动将参数配置成为另一个参数的组成成分,而不是直接填入的原因。
参数 1、2、3 被设置为参数 0 的组成成分,因此在构建该蓝图时,只需输入参数 0 的值,其余值将自动填写。
从属数字
有了数值配置,从属关系的设置方式就更方便了,因为数学关系则是天然存在的!
让我们看看这个例子:
我们有一个蓝图,其中有 3 个数值:100、101 和 200。但出于某种原因,我们只想让用户修改 100 的装置数值,但第二个数值比该装置数值大 1,第三个数值是第一个数值的两倍。
这就是为什么每个参数化的数值都可以分配一个变量,其值可以在数学公式中用于所有后续的从属数字。
因此,在本例中,如果您(在构建蓝图时)将 100 填成 10,那它将自动将 101 设置为 11,而将 200 设置为 20。
结论
有人曾多次将 《异星工厂》与编程相提并论,而这只是一部分类比而已。几乎所有蓝图参数化都可以通过电路网络逻辑来完成,因此看起来这样的类比几乎是有些多余的。
在编程中,编译时函数执行与运行时函数执行是并行的。基本上,如果在编译程序时就已经知道了计算结果,那么每次通过运行程序时得到计算结果的操作就太没必要了,还不如直接将数字放入程序中。这就好比我们知道,这种设置总是会过滤掉铁齿轮,所以为了简化构建过程而围绕它制作一个电路网络逻辑,感觉有点太浪费了。
我很想听听您对这项功能的反馈意见。是否有些太过了?是否可以理解该功能?您迫不及待地想要使用该功能吗?请通过常用社交渠道告诉我们吧。
#steam游戏# #开发日志# #自动化# #基地建设# #异星工厂 资讯#