如何根据元素的类型做出不同的响应?
我想到的第一件事是检查网格的类型,但它不适用于像按钮(平面+文本+点击框(这样的复杂对象。
const squares = new Group();
const circles = new Group();
const spheres = new Group();
// skip meshes initialization
squares.add(squareMesh);
circles.add(circleMesh);
spheres.add(sphereMesh);
// skip raycaster initialization
const intersections = raycaster.intersectObjects([
squares,
circles,
spheres,
], true);
const intersectedElement = intersections[0];
例如:
如果Button
,则更改文本的颜色
如果Sphere
,则将其缩放两倍
解决此问题的一种方法是将自定义数据存储在Object3D.userData中。您可以自由定义满足您需求的数据结构。交叉测试后的评估代码可能如下所示:
const intersectedElement = intersections[0];
const object3D = intersectedElement.object;
if ( object3D.userData.objectType === 'Button' ) {
// change the color of the text
}