让挂载电台给指挥车发送消息
分开发送、筛选和接收,把协作逻辑拆成清晰的小职责
先建立明确的父子关系
电台是独立单位,通过 attachment_radio 出现在指挥车上,电台可以用 parent 找到所属车体,父级引用依赖实际挂载关系,单独创建一辆普通车辆并不会自动得到这段关系
[attachment_radio]
x: 0
y: -3
onCreateSpawnUnitOf: rwa07Radio
showAllActionsFrom: true
isUnselectable: true
canBeAttackedAndDamaged: false消息只携带这次需要的数据
电台按钮不直接改车体的记忆,只发一个带 v07signal 标签的消息和数值 pulse,标签说明消息用途,数据说明本次发生了什么,把两者分开能减少以后扩展时的歧义
[action_sendSignal]
text: 发出联络信号 / Send a signal
buildSpeed: 0
sendMessageTo: parent
sendMessageWithTags: v07signal
sendMessageWithData: pulse=1接收方决定如何回应
接收动作只订阅自己的标签,再把事件里的 pulse 加到计数,eventData 只在这次事件中读取,想长期保存的信息要写进 memory,回退值 0 让缺少数据的消息不增加计数
[hiddenAction_receiveSignal]
autoTriggerOnEvent: newMessage(withTag='v07signal')
setUnitMemory: signals=memory.signals + eventData(name='pulse',type='number',default=0)
showMessageToPlayer: Signal count: %{memory.signals}避免消息互相回发
先保持单向链路,电台发出一次,车体记录一次,若以后要增加确认消息,使用另一个标签,并让确认动作停止在接收方,不要让两个 newMessage 动作无条件互相发送同一个标签
动手练习
把 pulse 改为 2,再发三次消息,先预测计数变化再观察