Побег из тюрьмы - довольно популярная игра на платформе Roblox, ежедневно собирающая 60–80 тысяч одновременных игроков. При этом это не идеальная игра. Есть довольно много мелких проблем, таких как неровные дороги, несовпадающие текстуры зданий, мелкие проблемы с производительностью, нереалистичная подвеска автомобиля и т. Д. Все эти проблемы можно исправить, но давайте поговорим о более серьезных проблемах, влияющих на игровой процесс; Проблема с поездом из побега из тюрьмы.

Недавно Jailbreak обновили свою игру, добавив новую локацию для грабежа. Основная проблема с этим новым местом в том, что оно перемещается и зависит от времени. Конечно, это предназначено для более продвинутых / опытных игроков, но даже у продвинутых игроков все равно будут проблемы с этим местом. Во-первых, давайте поговорим об атрибутах реального мира, которые применимы к этому сценарию. Roblox имеет довольно точный физический движок, когда вы сравниваете их один на один. Испытание уже проводилось компанией Roblox с использованием картофельных пушек. Итак, что же эта попытка предложить или доказать? Речь идет о том, что физический движок Robloxs будет следовать всем принципам реального мира. Что касается этой проблемы, атрибутами реального мира, которые можно было бы воспроизвести, были бы сопротивление воздуха и сам воздух. Давайте начнем со сценария, когда пользователь ждет в начале туннеля выхода поезда. Когда поезд выходит, он делает паузу, потому что не знает, в какой вагон запрыгнуть. Когда 5-я машина проезжает мимо, он прыгает на нее и понимает, что прыгнул не на ту. Как обычный пользователь, он принимает решение многократно прыгать на следующую машину, пока не найдет нужную машину. У этой стратегии есть только одна проблема: ваш импульс замедляется со временем из-за фактора, называемого сопротивление воздуха. Итак, пока вы находитесь в поезде, вы будете двигаться вместе с поездом, но в тот момент, когда вы прыгнете над поездом, вас отбросит назад воздух, поскольку поезд продолжает двигаться вперед. См. Пример ниже.

Проблема, как видите, в том, что если вы хотите сесть в другую машину, вы действительно не можете ехать вперед. Как же тогда решить эту проблему? Решение довольно простое; передайте скорость объекта прямо под гуманоидом в текущую скорость игрока, и ваша проблема будет решена. Тем не менее, вы можете захотеть передать скорость только тогда, когда игрок A) свободно падает (термин Roblox, что означает падение в целом) или B) прыгает. Как нам передать это в код или в общем виде, как преобразовать это в реальную работу? Итак, сначала давайте посмотрим на ситуацию с двумя объектами; движущаяся платформа и куб.

В Roblox Physics Engine любой объект, который остается поверх другого движущегося объекта, также получает передачу скорости, поэтому мы не беспокоимся об этой части проблемы. Допустим, куб прыгает и платформа начинает двигаться. Что нам тогда делать? Все, что вам нужно сделать, это просто направить луч вниз, и если на указанном расстоянии есть объект, тогда установите скорость игрока на скорость объекта и установите скорость обратно на ноль, как только игрок приземлится.

Это сработало бы, только если бы у игрока не было никакого контроля. Когда игрок пытается двигаться, находясь в состоянии «Блокировка сетки», движение аннулируется. У этого есть довольно простое решение, каждый игрок в Roblox содержит Гуманоида, в котором есть два свойства, в которых будут использоваться; WalkSpeed ​​и MoveDirection. MoveDirection - это просто нормализованный вектор направления, в котором движется игрок, WalkSpeed ​​- это количество шипов, перемещаемых за секунду. Все, что вам нужно сделать, это умножить MoveDirection на WalkSpeed, и вы получите скорость для кадра.

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