Urho3D
GameDev.ru / Сообщества / Urho3D / Форум / Реализация прыжка для платформера

Реализация прыжка для платформера

GeorgeBekhНовичокwww10 дек. 201722:24#0
Всем привет! Пытаюсь запилить что-то типа 3Д платформера, столкнулся с проблемой в реализации прыжка (достаточно важная часть платформера как по мне).

Суть в чем: я, конечно, скопипастил сначала решение из демки #18 (Character), но там прыжок работал не очень логично(?): нажимаешь пробел один раз - прыгает на одну высоту, зажимаешь - прыгает выше. Связано это было с тем, что коллизия с землей запоминалась в момент самой коллизии "NodeCollision", а прыжок происходил на "FixedUpdate", поскольку эти два события никак не связаны флаг onGround обнулялся после прыжка, но потом сразу же восстанавливался, т.к. NodeCollision все равно происходил перед тем, как персонаж оторвался от поверхности.

Поскольку я пытаюсь делать платформер, мне очень важно, чтобы прыжок всегда происходил на одинаковую высоту.

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

Вторым вариантом у меня был (теоретически) рабочий метод: на NodeCollisionStart сохранять информацию о (другой) ноде и коллизии с ней, на NodeCollision обновлять инфу, на  NodeCollisionEnd убирать информацию. Таким образом не ставиться никакого флага onGround, а это проверяется в FixedUpdate, тогда после применения импульса вверх не важно сработает ли NodeCollision после, важно только, что NodeCollisionEnd сработает перед вторым вызовом FixedUpdate и все должно быть ОК. Но меня пугает немного сложность всего этого и что мне вручную придется собирать всякую инфу и раскидывать ее в "хэшмап" типа 'node id' => collision

Прошу поделиться опытом и идеями!
Не очень хочу изобретать велосипеды на костыльной тяге (хотя без этого никуда xD)

Спасибо, что прочел до конца!

GLoomУчастникwww11 дек. 20173:52#1
Сугубо личное мнение: платформеры и физика не живут друг с другом нормально вместе без костылей и мата. Запилить свою нереалистичную физику не вариант?
kostik1337Постоялецwww11 дек. 201711:20#2
По-моему, в платформерах как раз обычно высота прыжка зависит от времени нажатия кнопки. Я, правда, в основном в двумерные играл.
codingmonkeyПостоялецwww11 дек. 201718:28#3
почему бы не кидать луч, и если он больше определенной длинны просто не прыгать выше

Правка: 11 дек. 2017 19:56

GeorgeBekhНовичокwww11 дек. 201722:26#4
GLoom мне как раз пока и нужна относительно реалистичная физика, чтобы было хотя бы с чем поиграться, что можно взять за основу.

kostik1337 Да, в марио такая штука точно есть, но там немного по другому, там задерживаешь кнопку даже после прыжка, а тут проблема в том что прыжок срабатывает на 2-х - 3-х кадрах вместо одного и из-за этого начальная скорость сильно выше.

codingmonkey интересная идея, с кулдауном прыжка на 1/4 секунды где-нибудь по идее должно работать, спасибо! Правда я чот вчера пытался с лучами - вообще дичь какая-то происходила, он во все ноды попадал, даже куда не должен xD

UPD: с лучами разобрался, неправильный второй аргумент передавал, фигачил абсолютные координаты второй точки, а надо было относительные :(

Правка: 12 дек. 2017 0:36

GeorgeBekhНовичокwww12 дек. 20172:15#5
codingmonkey попробовал рейкастом, забавно получается, когда на краю стоишь он луч кидает из центра, соответственно не прыгая, т.к. центр над пропастью. Но "играется" нормально, особых проблем не замечено, так что я наверное оставлю такую механику на ближайшее время, спасибо за подсказку!
GLoomУчастникwww12 дек. 201711:03#6
Однако в N. Sane Trilogy обнаружилось ещё одно серьёзное изменение физики игры, уже больше похоже на недосмотр разработчиков. Персонаж теперь соскальзывает с краёв платформ, на которых уверенно стоял в оригинале. Вероятно, при воссоздании игры почти без исходников Vicarious Visions не учла, что более круглая моделька героя будет иначе взаимодействовать с окружением. Справедливости ради, большинство смертей всё равно происходит не из-за неумышленного «нововведения». Оно становится настоящей проблемой только в уровне The High Road, где Крэшу (или его сестре Коко — за неё теперь можно играть во всей трилогии) нужно перепрыгивать дыры в мостах, отталкиваясь от панцирей сбитых черепах. В обновлённой версии игрок здесь страдает не меньше, чем несчастное животное.
GLoomУчастникwww12 дек. 201711:05#7
Это была цитата с какого то сайта про crash bandicoot. В первых играх серии физика была не честной и можно было стоять на краю платформ. Ещё иногда делают что можно прыгнуть даже если ты уже не на платформе но был на ней кадр или два назад - это упрощает управление и делает его более отзывчивым.

/ Форум / Urho3D - игровой движок / ЗАДАВАЙТЕ ВОПРОСЫ

2001—2018 © GameDev.ru — Разработка игр