Как по-разному реагировать на лучевое литье?(ВР) - PullRequest
0 голосов
/ 14 декабря 2018

Как я могу реагировать по-разному, зависит от типа элемента?

Первое, что приходит мне в голову, это проверить тип меша, но он не будет работать со сложными объектами, такими как кнопка (плоскость).+ Text + 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 голосов
/ 14 декабря 2018

Одним из способов решения этой проблемы является сохранение пользовательских данных в Object3D.userData .Вы можете свободно определять структуру данных, которая соответствует вашим потребностям.Код оценки после теста пересечения может выглядеть следующим образом:

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

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

    // change the color of the text

}
...