Как сделать так, чтобы камера обнаруживала столкновения Physi.js Shooter от первого лица
Проектное помещение
Идея моей игры THREE.js заключается в том, чтобы игрок перемещался по лабиринту объектов и достигал выхода. Мне нужно обнаружение столкновений не только для кубов и сфер, но и для моделей, импортированных из Blender. Я думал об использовании RayCasting, но я решил пойти с Physi.js.
Эта проблема
, Идея состоит в том, чтобы дать камере "тело", чтобы игрок не мог пройти сквозь стены или другие объекты, как они, когда они являются просто объектом камеры. Однако мой объект "player", похоже, теряет все свои атрибуты Physi.js, как только я передаю ему THREE.PointerLockControls (player). То, что я делаю, - это создание Physijs.BoxMesh, плеера и добавление камеры к этому. После этого я передаю объект player в функцию setupControls().
var geometry = new THREE.BoxGeometry( 500, 500, 500 );
var material = new THREE.MeshPhongMaterial( {color: 0x0000FF} );
player = new Physijs.BoxMesh(geometry, material, 1, {restitution: .9, friction: .1});
scene.add(camera);
scene.add(player);
player.add(camera);
//give player control of THIS mesh.
setupControls(player);
Элементы управления работают, как и ожидалось, я могу управлять сеткой плеера с прикрепленной к нему камерой, создавая FPS-представление, но когда я делаю это, я все еще могу перемещаться через стены и другие объекты. Я даже переместил камеру обратно в положение Z, чтобы подтвердить, что происходит, и я вижу, что сетка игрока просто проходит сквозь объекты, а не блокируется или опрокидывает их.
Решения?
Если я удалю setupControls(player), то физика Physi.js начнет работать на сетке игрока! Он упадет от гравитации, подпрыгнет и все. Это выглядит действительно круто, но теперь я не могу это контролировать! Кажется, что я могу иметь только один или другой лол. Так кто-нибудь знает, что я мог сделать, чтобы решить эту проблему? Возможно ли то, что я предлагаю? Я новичок в THREE.js, поэтому любой вклад очень ценится!