Ошибки при столкновении камеры и стены Babylon.js и Cannon.js
Я работал над базовым проектом в стиле FPS (используя множество советов, которые я нашел из того, что скрывался здесь), и столкнулся с проблемой.
Вот код, во-первых https://www.babylonjs-playground.com/
Используйте клавиши со стрелками, чтобы переместить камеру вперед, пока не столкнетесь с стеной, и вы увидите мою проблему.
Я пытаюсь
- иметь естественный механизм прыжков, и
- обнаружение столкновений между камерой, землей, стенами и т. д.
Сначала я сделал это, просто используя родной.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, которая успешно удерживает камеру от "зависания" в верхней части прыжков