在Scrap Mechanic中实现控制器循环动作,本质上就是让机械结构自动持续运转,免去每次手动触发的繁琐操作。无论是双足机器人交替迈步、自动炮塔往复扫描,还是折叠机构反复收放——这些需要持续运行的机械行为,都依赖于控制器脚本中的循环逻辑设计,或借助外部信号回路自主运转,单次脉冲信号根本无法驱动这类周期性动作。

具体该如何设置?目前主流的实现方案有两种:其一是利用脚本内置的LOOP循环指令,其二是通过外部模块搭建自反馈闭环系统。下面逐一详解两种方案的操作步骤。
利用脚本内置LOOP指令实现真正循环控制
第一步,右键点击已放置好的【控制器】,在弹出的菜单中选择“Edit Program”进入代码编辑界面。
第二步,将默认模板中的所有代码全部删除,手动输入以下基础循环结构:
LOOP
output[0] = 1
wait(0.5)
output[0] = 0
wait(0.5)
END LOOP
第三步,按下Ctrl+S保存代码并关闭编辑器,随后按E键打开控制器属性面板,确保“Run on Startup”选项已勾选。此时控制器通电后便会自动执行该循环程序,实现每秒交替开关output[0]一次。这一设置非常适合驱动电机启停、LED闪烁等简单节拍类动作,效果稳定可靠。
注意事项:LOOP与END LOOP必须成对匹配使用,若遗漏END LOOP,控制器将报错并亮起红灯,且无法再次打开编辑器——只能拆除后重新放置,操作较为繁琐,务必仔细核对。
通过外部信号搭建闭环实现伪循环机制
方案一:Timer+Comparator自反馈回路搭建
放置一个Timer模块,将其设置为Pulse脉冲模式,周期设定为1.0秒。将Timer的Output输出端连接至Comparator的A输入端,Comparator的B端设为0.5阈值。Comparator的输出信号接入控制器的Input[0]端口。再将控制器的output[0]输出经过一个Inverter反向器处理后,连接回Timer的Reset复位端。这样一来,每次输出触发后Timer都会被自动复位,从而形成稳定的节拍信号——相当于利用硬件搭建了一个闭环循环系统。
方案二:Counter溢出自动归零实现周期循环
接入一个Counter计数器模块,将Clock时钟输入连接到Battery电源和Pulse Generator脉冲发生器(频率设为5Hz)。将Counter的上限值设为9(即计数范围0至9共10个档位),并勾选启用【Reset on overflow】溢出复位功能。Counter的输出端直接连接至控制器的Input[0]端口。当计数值达到10时系统自动清零,输出信号呈现连续递增后归零的周期性变化,适用于驱动多步骤顺序动作。
【若Counter未勾选“Reset on overflow”选项,第10次计数后输出值将跳变为-2147483648,直接导致下游比较器烧毁——这个常见错误已让不少玩家踩坑,务必注意。】
在循环中嵌入条件判断机制避免系统死锁
仅掌握基础循环还不够,有时需要让循环响应外部状态变化,而非无脑重复执行。在LOOP内部加入if条件判断语句即可实现智能控制:
LOOP
if input[0] == 1 then
output[0] = 1
wait(0.3)
output[0] = 0
wait(0.3)
else
wait(0.1)
end
END LOOP
这段代码的逻辑是:仅当input[0]端口接收到高电平信号时,output[0]才会执行循环开关动作;否则每隔0.1秒空转一次,既节省电力又避免误触发。在实际部署中,input[0]可以连接按钮、传感器或陀螺仪信号源——如此一来,循环动作便能真正依据环境状态进行智能响应,而非机械式空转。
至此,控制器便会按照预设的逻辑持续执行循环动作。两种方法各有适用场景:脚本循环方式适合简单节奏控制,外部回路方案则更适合需要精确时序或硬件交互的复杂应用——根据实际项目需求灵活选用即可。
