首页 > 解决方案 > 可以将场景对象实例存储为场景的属性吗?

问题描述

这是一个关于 javascript 和 three.js 编码风格约定的问题。我更喜欢使用最新的 ES-whatever 约定。

我想知道是否不是照常做:

var scene = new THREE.Scene();
var cube = new THREE.Mesh(new THREE.BoxGeometry(1,1,1), new THREE.MeshBasicMaterial(0xffffff))
scene.add(cube)

可以将网格对象(和其他对象,可能是灯光甚至相机)存储为场景对象的属性:

const scene = new THREE.Scene(); // or var, but that's not my question
scene.cube = THREE.Mesh(new THREE.BoxGeometry(1,1,1), new THREE.MeshBasicMaterial(0xffffff))
scene.add(scene.cube)

我喜欢在命名空间下引用所有 three.js 对象的想法scene——这让我以后更容易访问它们。我知道我可以将它与 .name 和 .getObjectByName 一起使用,但这需要更多代码并且对我来说似乎更混乱。

标签: javascriptthree.js

解决方案


Object3D 派生对象上有一个名为 .userData 的字段,您可以存储应该保存/序列化的内容。但就直接在对象上存储道具而言..它可以工作..但如果您最终覆盖某些内容或稍后使用您的属性名称的三个版本可能会出现问题...

编辑:在阅读了这里的其他帖子之后,他们提出了一些好的观点,我还想在那里抛出你可以继承内置的三个对象并制作你自己的自定义类型来拥有你的东西。那可能更整洁。


推荐阅读