2016-11-30 3 views
0

Я использую Babylon.js 2.4.0.Babylon.js OnIntersectionEnterTrigger не запускается с помощью камеры

У меня есть сетка (в форме дивана), загруженной из .obj файла и камера настроить так:

let camera = new BABYLON.FreeCamera('camera1', new BABYLON.Vector3(0, 2, 0), scene); 

camera.checkCollisions = true; 
camera.applyGravity = true; 
camera.ellipsoid = new BABYLON.Vector3(1, 1, 1); 
camera.attachControl(canvas, false); 
camera.speed = 0.5; 
camera.actionManager = new BABYLON.ActionManager(scene); 

Я хочу создать событие, так что, когда я иду через кушетка, «пересечение» записывается в консоль:

let action = new BABYLON.ExecuteCodeAction(
    { trigger: BABYLON.ActionManager.OnIntersectionEnterTrigger, parameter: { mesh: couchMesh }}, 
    (evt) => { 
    console.log("intersection"); 
    } 
); 

this.camera.actionManager.registerAction(action); 

Когда я иду через сетку, ничего не записывается в консоль.

Я создал пример на Babylon.js Playground, используя пример, который они предоставляют, чтобы проверить, что это не проблема с моей сеткой или камерой, и она не кажется (на игровой площадке нет работа).

ответ

1

У камеры в Babylon.js нет диспетчера действий, поэтому даже если вы установите один, это не будет работать.

Чтобы заставить это работать с помощью менеджеров действий, вы можете определить невидимый прямоугольник вокруг камеры с предопределенным размером и прикрепить диспетчер действий к созданной сетке. затем установите родительский элемент сетки в качестве камеры, и все готово. Вот ваша площадка с этими изменениями - http://www.babylonjs-playground.com/#KNXZF#3

Другим решением является использование внутренней системы столкновений Вавилоне JS, и установить функцию onCollide камеры на самом деле что-то делать :) Вот ан пример - http://www.babylonjs-playground.com/#KNXZF#4

Обратите внимание, что на второй игровой площадке камера не будет пропускать коробку, так как система столкновения не позволяет ей это делать. Я не уверен в вашей ситуации, поэтому трудно сказать, какая из двух будет работать лучше.

Если вам нужна система «ворот» (зная, когда игрок перемещается через ворота, например), используйте 1-й метод. Второй намного чище, но имеет свои недостатки.

+0

Фантастический ответ - спасибо! –

Смежные вопросы