Scrap Mechanic控制器循环动作设置详解
在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秒。将其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]可连接按钮、传感器或陀螺仪信号——使循环动作真正受环境控制,而非单纯空转。
至此,控制器会根据设定的逻辑持续运行循环动作。两种方法各有侧重:脚本循环适合简单节拍控制,外部回路适用于需要精确时序或硬件交互的场景。根据具体机械需求选择即可。
