我在 ThreeJS 场景中添加了一些对象(使用scene.add(object)
)。我知道对象的名称,只想从 scene.children 中获取它的索引。
我尝试使用scene.children.indexOf("objectName")
,但它返回 -1 索引。有人可以建议我该怎么做吗?
谢谢
我在 ThreeJS 场景中添加了一些对象(使用scene.add(object)
)。我知道对象的名称,只想从 scene.children 中获取它的索引。
我尝试使用scene.children.indexOf("objectName")
,但它返回 -1 索引。有人可以建议我该怎么做吗?
谢谢
var object = scene.getObjectByName( "objectName" );
或递归搜索场景图
var object = scene.getObjectByName( "objectName", true );
或者,您可以按 ID 搜索。
var id = scene.getObjectById( 4, true );
三.js r.60
我相信实际上可以回答您的问题的是我用来清理场景的以下代码:
while (scene.children.length > 0) {
scene.remove(scene.children[scene.children.length - 1]);
}
这样我就不需要通过名称或 ID 访问元素。该对象只是从带有索引的数组中获取,所以它就像scene.children[i]
.
您收到未定义的警报文本,因为您返回的是一个对象而不是value/text
. 你需要提醒类似的事情,scene.getObjectByName( "objectName" ).name
或者scene.getObjectByName( "objectName" ).id
我相信。
相关文档:getObjectById、getObjectByName。来自的重要说明getObjectByName
:
请注意,对于大多数对象,名称默认为空字符串。您必须手动设置才能使用此方法。
这可能就是你得到undefined
. 此外,如果您正在undefined
尝试访问.name
或.id
将引发错误。如果您要取回一个对象,您会在警报中看到类似“[object Object]”的内容。
我通过艰难的方式学到的另一个重要说明是,您需要传递给的值getObjectById
是object.id
,而不是object.uuid
。此外,object.id
本质上只是数组object
中的索引。children
把它们放在一起:
// var object = new THREE.Mesh(...) or similar
object.name = 'objectName';
scene.add(object);
var retrievedObject = scene.getObjectById(object.id);
// or
var retrievedObject = scene.getObjectByName('objectName');
alert(retrievedObject.name);