You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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会无法找到目标对象。

修复步骤及代码

  1. 确保场景加载完成后再查找元素:通过Scene.root.onFirstFrameLoaded()事件等待场景初始化完成,再异步获取对象。
  2. 导入缺失的模块:添加CameraTexture的导入,否则无法引用相机纹理。
  3. 清理计时器订阅:延迟完成后取消计时器的订阅,避免不必要的性能消耗。

修改后的完整代码:

// 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:46:05