Meta Spark AR:通过脚本实现相机纹理的帧延迟加载
Spark AR脚本错误:undefined is not a function 解决方法
第39行的报错本质是Scene.root.find('row_1')返回了undefined,导致你调用getMaterial()时触发“undefined is not a function”。尽管你确认场景中存在row_1平面,但Spark AR的场景元素加载是异步过程,脚本启动时场景可能还未完成初始化,同步调用find会无法找到目标对象。
修复步骤及代码
- 确保场景加载完成后再查找元素:通过
Scene.root.onFirstFrameLoaded()事件等待场景初始化完成,再异步获取对象。 - 导入缺失的模块:添加
CameraTexture的导入,否则无法引用相机纹理。 - 清理计时器订阅:延迟完成后取消计时器的订阅,避免不必要的性能消耗。
修改后的完整代码:
// load in modules const Scene = require('Scene'); const Time = require('Time'); const CameraTexture = require('CameraTexture'); // 导入相机纹理模块 const delayTime = 2; let elapsedTime = 0; let timerSubscription = null; // 等待场景第一帧加载完成后执行逻辑 Scene.root.onFirstFrameLoaded().subscribe(async () => { // 异步查找平面对象 const plane = await Scene.root.findFirst('row_1'); const material = plane.getMaterial('material0'); // 启动计时器 timerSubscription = Time.ms.interval(16).subscribe(() => { elapsedTime += Time.deltaTime; if (elapsedTime >= delayTime) { // 应用相机纹理到材质 material.mainTexture = CameraTexture; // 取消计时器订阅,停止后续执行 timerSubscription.unsubscribe(); } }); });
关键修改说明
Scene.root.onFirstFrameLoaded():确保脚本在场景完全初始化后执行元素查找,避免因异步加载导致的对象未找到问题。await Scene.root.findFirst('row_1'):异步查找目标平面,保证能获取到有效的对象实例。- 新增
CameraTexture导入:解决原代码中CameraTexture未定义的潜在错误。 - 计时器订阅取消:延迟逻辑执行完成后停止计时器,优化性能。
内容的提问来源于stack exchange,提问作者Cosimo wiSe
相关产品推荐
相关产品推荐

