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

如何在使用Threebox时仅保留一个THREE实例?

如何在使用Threebox时仅保留一个THREE实例?

嗨,这个问题我之前也碰到过!其实Threebox本身就提供了解决方案,有两种思路可以帮你消除这个多实例警告,只保留一个THREE实例:

方案一:让Threebox复用你导入的THREE实例

你可以在初始化Threebox的时候,直接把自己导入的THREE实例传给它,这样Threebox就不会再加载它自带的Three.js版本了。修改你的初始化代码如下:

import * as THREE from 'three';

// 初始化Threebox时,在配置项中指定使用我们自己的THREE实例
(window as any).tb = new Threebox(this, gl, { 
  defaultLights: true,
  THREE: THREE // 这行是关键,告诉Threebox用我们已有的实例
});

这样配置后,Threebox会直接复用你导入的THREE对象,不会再引入新的实例,那个烦人的警告就会消失,你也能继续用自己导入的THREE来做射线检测等操作。

方案二:直接使用Threebox内置的THREE实例

如果你不想自己单独导入Three.js,也可以直接从初始化后的Threebox实例中获取它自带的THREE对象,这样就完全不需要自己再import了:

// 先正常初始化Threebox,不用提前import THREE
(window as any).tb = new Threebox(this, gl, { defaultLights: true });

// 从Threebox实例中取出内置的THREE对象
const THREE = (window as any).tb.THREE;

// 接下来就可以用这个THREE来做你需要的操作,比如射线检测
const raycaster = new THREE.Raycaster();

这种方式下,整个项目里只会存在Threebox自带的那一个THREE实例,自然不会有多实例的冲突。

额外小提示

如果你用的是Webpack、Vite这类打包工具,最好确保项目里只存在一个Three.js版本——可以检查package.json,让Threebox依赖的Three.js版本和你项目中使用的版本保持兼容,这样打包工具也会自动帮你合并重复的依赖,进一步避免这类问题。

备注:内容来源于stack exchange,提问作者offlineanton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 15:58:10