Spark AR中无法将脚本变量传递至Patches补丁的问题
问题根因
警告提示已经把核心问题说的很明确了:脚本向Patches传值时,要求补丁编辑器内必须存在名称完全匹配、类型完全对应的From Script接收补丁,否则脚本发出去的值没有接收端,自然不会有响应。
除此之外你的代码还有一个类型不匹配的问题:你定义的是仅含x、y属性的二维对象,却调用了对应四维向量的setVector方法,就算建了补丁类型不对也收不到值。
修复步骤
- 配置Patches端接收补丁
- 打开Patches补丁编辑器,在空白区域右键,选择添加
From Script补丁 - 选中刚添加的补丁,在右侧属性检查面板中,将输出端口的名称修改为
scale,注意名称大小写必须和代码里的参数完全一致,Spark AR对名称大小写敏感 - 将该端口的输出类型修改为
Vector2,不要使用默认的Vector类型
- 打开Patches补丁编辑器,在空白区域右键,选择添加
- 修正脚本代码
将对应传值方法替换为匹配Vector2类型的setVector2,修正后完整代码如下:
const Patches = require('Patches'); (async function () { const scale = { x: 0.5, y: 0.5 }; // 方法名、参数名必须和补丁端配置完全对齐 await Patches.inputs.setVector2('scale', scale); })();
- 验证效果
保存脚本后回到编辑器,将From Script补丁输出的scale端口连接到需要控制的对象缩放属性上,控制台的警告会消失,值可以正常传递生效。
避坑说明
Spark AR脚本向Patches传值必须严格遵守对齐规则,否则都会触发同类警告:
- 代码里调用的set方法、代码里传的参数名、Patches端From Script补丁的端口名、补丁端口的类型四者必须完全匹配
- 不同类型对应的set方法参考:
- 布尔值:
setBoolean(),补丁类型选Boolean - 单数值(比如透明度、旋转角度):
setScalar(),补丁类型选Number - 二维值(比如2D缩放、屏幕坐标):
setVector2(),补丁类型选Vector2 - 三维值(比如3D位置、旋转):
setVector3(),补丁类型选Vector3 - 四维值(比如颜色、四维向量):
setVector4(),补丁类型选Vector4/Color
- 布尔值:
- 所有Patches传值操作必须放在异步函数中用
await调用,不要直接在全局作用域执行,会因为模块加载时序问题导致传值失败。
内容的提问来源于stack exchange,提问作者Mystery04
相关产品推荐
相关产品推荐

