如何对射线投射做出不同的反应? (VR)

时间:2018-12-14 16:03:45

标签: three.js virtual-reality oculusgo

如何根据元素的类型做出不同的反应?

我想到的第一件事是检查网格的类型,但是它不适用于按钮(平面+文本+ Hitbox)之类的复杂对象。

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则将其缩放两次

1 个答案:

答案 0 :(得分:3)

解决此问题的一种方法是将自定义数据存储在Object3D.userData中。您可以自由定义满足您需求的数据结构。交集测试后的评估代码如下:

const intersectedElement = intersections[0];
const object3D = intersectedElement.object;

if ( object3D.userData.objectType === 'Button' ) {

    // change the color of the text

}