Ошибки при столкновении камеры и стены Babylon.js и Cannon.js

Я работал над базовым проектом в стиле FPS (используя множество советов, которые я нашел из того, что скрывался здесь), и столкнулся с проблемой.

Вот код, во-первых https://www.babylonjs-playground.com/

Используйте клавиши со стрелками, чтобы переместить камеру вперед, пока не столкнетесь с стеной, и вы увидите мою проблему.

Я пытаюсь

  1. иметь естественный механизм прыжков, и
  2. обнаружение столкновений между камерой, землей, стенами и т. д.

Сначала я сделал это, просто используя родной.checkCollisions Babylon, который очень хорошо работает для столкновений камеры с объектом и камеры против стен. Однако я не мог заставить это работать должным образом для прыжков. Даже следуя другим учебникам, ( http://www.html5gamedevs.com/topic/12198-camera-jump/) я не получал желаемых результатов; по крайней мере, на моем компьютере все эти эскизы игровой площадки все еще "зависают" наверху прыжка, пока не будут нажаты другие стрелки.

Итак, я переключил передачи и попытался использовать (по отдельности) Oimo и Cannon для более надежной физики. Я до сих пор не могу заставить Oimo работать по какой-то причине ( "this.world.worldscale - это не функция" звонит кому-нибудь в звонок? Я не могу ничего найти по этому поводу), но с Cannon у меня были приличные результаты.

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

Я застрял Я не вижу, как это обнаружение столкновений отличается от того, что происходит между землей и камерой, но что-то явно отключено. Я пробовал против других горизонтальных объектов (коробки, сферы) и получил лучшие результаты, установив физический самозванец камеры в коробку (что делает поворот дрожать).

Есть предложения или идеи? Спасибо всем!

1 ответ

Я получил некоторую помощь по адресу http://www.html5gamedevs.com/topic/32220-collision-with-walls-using-cannon/ и решил, что я опубликую свои результаты и здесь, на случай, если кто-нибудь еще столкнется с та же проблема.

Короткий ответ - использовать анимацию для управления прыжком, и пусть физический движок Вавилона позаботится о столкновениях с камерой. Пусть Кэннон сделает физику для других объектов.

Чтобы камера не висела в верхней части прыжка, есть скрытое / недокументированное свойство (cameraname._needMoveForGravity), которое вы можете установить = true (звучит как противоположность того, что вы хотите, но как угодно), которое помогает,

На случай, если кто-то еще борется с этим, вот эскиз (с некоторым дополнительным багажом, я обрезал большинство вещей для ясности, но не все)

Нажмите пробел, чтобы прыгать http://www.babylonjs-playground.com/

В основном я использую пример iiceman отсюда

(тема) http://www.html5gamedevs.com/topic/12198-camera-jump/

(детская площадка) http://www.babylonjs-playground.com/

а также предложение Wingnut об изменении камеры._needMoveForGravity = true, которая успешно удерживает камеру от "зависания" в верхней части прыжков

Другие вопросы по тегам