🇺🇦 Домой

Не делаю машинки часть 3 (читаю чужие сурцы)

Машинки надоели

Йее! Машинки надоели, пацанва. Я замораживаю свою игру про машинки, трюки и всё остальное, чёт просто подвыгорел. Надо выбирать что-то, что можно закончить за неделю, я реально попытался откусить больше чем могу прожевать.

Вот я делаю "волейблольчик". Чтоб просто доделать что-то и не страдать от того, что всё на полпути надоедает. Потому играбельное демо машинок - скоро не ждите. А мысли - допишу!

Часть третья - читаем чужие исходники

Unity microgames - kart racer

В юнити есть "шаблоны": игра-картрейсер типа марио карт, игра-шутан итд.

Думаю определённый процент "бесплатных игр с рекламой" в плеймаркете - именно эти шаблоны с минимальной заменой моделек/текстур.

Я форкнул шаблон с машинками и ушёл щелкать исходники.

Сам "шаблон" - супер оверинженирд, и в-целом это меньше "пример" чтоб учиться, и больше "готовая игра: поменяйте скины - покажите мамке что ИГРУ СДЕЛАЛИ".

Запилены редакторы трасс, телеметрия, ин-аппы..

Мне разумеется всё это не надо было, всё интересное - в /Assets/UTech/MG-Karting/BasicAssets/Scripts/KartSystems/KartMovement/KartMovement.cs

Cравнении с тем, что обсуждалось в первых двух текстах - ниже:

  • детекция столкновений написана 100% вручную, потому когда врезаешься в барьеры - тебя не останавливает и не отбрасывает. Абсолютно все Rigidbody - с флажком isKinetic=true, так что для них не существует встроенной гравитации, импульсов столкновений итд. Реализовано путём размещения 4х Raycast-ов спереди, сзади, слева и справа машинки, чтоб проверять врезались мы в что-то или нет. И если врезались - это предельно нежно и "приятно" меняет вектор направления так, чтоб не врезаться.
  • когда врезаешься в барьеры вокруг трассы или в другую машинку - к вектору скорости прибавляется вектор "bounce", в направлении вперёд, но под углом "от стены", чтоб не останавливать машинку и нервного игрока. Совсем не по-законам физики, но все "привыкли" так, всем "нравится" так.
  • коллайдер для машинки - капсула, а не "коробка" или сфера
  • никаких констреинтов на rigidbody. Я грешил тем, что "замораживал" перемещение/вращение по определенной оси динамически, чтоб машину не "бросало" во все стороны. А если разрешаешь коллизии сам - ничего хачить не нужно.
  • Статус "на земле" машинка или в воздухе (рейкаст в землю из кузова) - считается не 1 раз в кадр, как в моей аркадной машинке, а дважды. До и после обработки ввода/"шага" физики. Таким образом можно в скоупе одной функции отследить моменты вроде: "в начале кадра был в воздухе" - а в конце приземлился, "в начале кадра был на земле - а в конце подпрыгнул" итд без введения дополнительного мусора в виде инстанс-переменых. Хитро!
  • "дрифт" начинается как в mario kart на SNES. Машина всегда "просто едет", до тех пор пока игрок не сделал прыжок ("Hop") и из этого прыжка не приземлился под углом, с зажатой кнопкой прыжка. Опять же ПРАГМАТИЧНО И ХИТРО!
  • повороты сделаны путём изменения направления вектора скорости, без использования вращающей силы (torque)

В-общем захотелось начать "с ноля", даже дважды! Попробовать машину-шар и вот такую "машину с выключенной физикой машины и мира" тоже. Вопрос про подвеску: а где подвеска?. Ответ: нет физики - нет подвески. На ровной трассе - подвеска не нужна. На трамплинах/рампах - программно меняется вектор скорости "вверх" под углом, под которым рампа направлена.

Как и говорил товарищ умник в статье, на какую ссылался в прошлом посте - лучше всего, когда "физики" как таковой нет вообще :)

Мою крайнюю попытку как-то спасти "написанное" за 2 недели - можно глянуть здесь (а можно и не глядеть на самом деле)

Читаем исходники Tony Hawk's Underground (одним глазиком)

Есть такой репо на гитхабе, с исходниками коммерческих игр, какие просочились в интернет (или были официально открыты) https://github.com/RetailGameSourceCode

И нифига себе, кто-то как-то раздобыл исходники Tony Hawk's Underground https://github.com/RetailGameSourceCode/TonyHawksUnderground

В той игре тоже есть машинки, увы и ах, но езят они жутковато и я не ради машинок эту историю сюда приплёл.

В моём прототипе про машинки были трюки. Я планировал:

  • возможность вертеть трюки в воздухе, подпрыгнув вертикально вверх с Quarterpipe-a
  • "скользить" по металическим рельсам (grind tricks из проскейтера)

То как я "пытался" это имплементировать сам, было завязано на полном отключении физики. То-есть пока едешь - моя аркадная физика "есть", а стоит "запрыгнуть" на рельсу - всё превращается в "статичную анимацию" по-сути.

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

Кхм-кхм. ./Code/Gel/Components/RiderComponent.h, я просто заголовочки оставлю.

    void    control_horizontal_vel (   );
    void    adjust_vertical_vel_for_ceiling (   );
    void    go_hop_state (   );
    void    go_hang_state (   );
    void    set_pos_from_hang_rail_state (   );
    bool    maybe_pull_up_from_hang (   );
    bool    maybe_jump_low_barrier (   );
    void    go_anim_wait_state (   );
    void    anim_wait_complete (   );
    bool    maybe_stick_to_rail (   );

Короче что-то мне кажется, что я был на верном пути, "просто" этот вопрос не решить, и надо было копаться дальше :)

Какие тут вообще можно делать выводы

Игры с реалистичной физикой - совсем не то, во что я любил играть малым. Реалистичного хватает в реальности, и оно не очень и весёлое всё. Сначала мне казалось, что используй я встроенную физику, и просто добавляй векторы, в какие-то моменты - всё будет волшебно и как надо. А на самом деле - даже сами мужики из РнД юнити этого не делают, и просто выбрасывают реалистичную физику нафиг в играх, где она не нужна.

Прочитанные про геймдев книжки меня учили, что "у экрана" многих держит восторг от перемещения чего-то на экране.

Вот ты нажал - и оно задвигалось, задвигалось туда куда ты хотел,и окружение вокруг на это прореагировало! Чем больше захватывающих моделей передвижения мы придумаем - тем веселей и адиктивней всё.

Понятно, сейчас особо популярны и другие "философии", где у экрана держат: подобия слот-машин с рандомными выпадающими айтемами, идиотские ролики с историями уровня тв-сериала и.т.д. - ну есть и такое, да, но я - не ценитель.

Другие очень полезные материалы

Тут мужик делал марио карт тоже, вроде ничего так выглядит

https://hibbygames.itch.io/hibby-kart

15-11-2019, unity