Если вы хотите использовать физический движок для обнаружения столкновений с камерой - он должен быть частью физического движка. Это не может быть static-body
, потому что он должен двигаться, и это не может быть dynamic-body
, поскольку он должен контролироваться игроком, а не падать (гравитация) и вращаться вокруг.
Дон МакКарди создал компонент kinematic-body
, имея в виду камеру / плеер. Он доступен как часть физических дополнений
Таким образом, имея камеру:
<a-entity camera kinematic-body></a-entity>
Вы можете обнаружить любые объекты, с которыми он сталкивается:
// inside an a-frame component - this is straight from the docs
this.el.addEventListener('collide', function(e) {
console.log('Player has collided with ', e.detail.body.el);
e.detail.target.el; // Original entity (camera).
e.detail.body.el; // Other entity, which the camera touched.
e.detail.contact; // Stats about the collision (CANNON.ContactEquation).
e.detail.contact.ni; // Normal (direction) of the collision (CANNON.Vec3).
});
Проверьте это в этой скрипке.
Если фигуры простые, рассмотрите возможность использования коробочного коллайдера или сферического коллайдера. В этом ответе SO есть простой пример .