39

Как это сделано в видео играх

Я разрабатываю мобильную игру со стилем Low Poly на движке Unity3D, в которой автомобиль должен уклоняться и объезжать препятствия, с другими элементами подобного геймплея.
Сегодня я поделюсь с вами способами реализации некоторых игровых функций.

Искры от столкновения с препятствием.
Я использую это для визуального обозначения игроку, что он столкнулся с объектом.
Как это выглядит:

На объект, к которому прикреплён основной коллайдер автомобиля,

Как это сделано в видео играх Gamedev, Секреты игр, Гифка, Длиннопост, Мобильные игры

повешен скрипт, который определяет все точки касания других твёрдых тел к коллайдеру машины. Далее идёт проверка по тегу на то, что касание происходит не с дорогой. Точка касания имеет информацию о позиции. Позицию касания присваиваем системе частиц которую запускаем. Она делает всплеск коротко живущих частиц, при следующем касании действия с позицией и запуском повторяются.
В скрипте это выглядит так:

Как это сделано в видео играх Gamedev, Секреты игр, Гифка, Длиннопост, Мобильные игры

Визуализация чистки дороги от снега.
Выглядит это так:

Начнём с сугробов которые образуются за ковшом, для их реализации я использую две системы частиц, которые испускают частицы с режимом отображения Mesh (Сетка), в них указанны заранее подготовленные модели сугробов. Появление частиц, сугробов, происходит при условии, что объект перемещается.
К ковш автомобиля имеет два триггера, которые при входе в триггер снега, запускают системы частиц, при выходе останавливают.

Как это сделано в видео играх Gamedev, Секреты игр, Гифка, Длиннопост, Мобильные игры

С этим понятно, а теперь как убрать из отображения снег, в зоне из которой его условно убрали.
Для этого использую Trail, он оставляет линию по ходу движения. В нём назначен материал, со специальным шейдером. Принцип действия тут прост, в материале снега указана очередь рендера выше, чем у всех других объектов. В материале который имеет Trail, указана очередь рендера ниже чем у снега, но выше чем у всех остальных объектов. При перекрытии снега, линией от Trail, будет отображено всё что находиться под снегом.
Шейдер выглядит так:

Как это сделано в видео играх Gamedev, Секреты игр, Гифка, Длиннопост, Мобильные игры

Спасибо за внимание.
Кому стало интересно, следить за развитием игры можно в группе ВК: https://vk.com/gwtgo

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

Вы смотрите срез комментариев. Показать все
1
Автор поста оценил этот комментарий

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

Копипастить из видосиков на ютубе, конечно, весело и просто, но видосики делают, зачастую, люди некомпетентные, их код годится только для прототипа, сбацанного за 10 минут на коленке.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Товарищ, всем прекрасно известно, что фраза "Копипастить из видосиков на ютубе" это оскорбление в мире программирования, по сильнее чем предложение на три буквы, а не пихают всё что можно в пулы на мобильных платформах только плохие люди.
Моё подозрение по этому поводу, которое я ещё не успел проверить, так как это свежий тестовый образец: Первое, так как система частиц изначально занимает минимум 35 мб в памяти, для скамеек используется одна система частиц из пула, которая принимает позицию и вызывается в том месте, но так как скамейки стояли на относительно одном месте, за один кадр система частиц должна была переместится сначала к первой, сделать в плеск, потом ко второй и тоже сделать всплеск, так же каждая скамейка является статистическим объектом, по этой причине, она не перемещается и не уничтожается, а у неё выключается компонент меш рендер. Второе это большое обилие частиц в этот момент, и так как я пока что не настроил должным образом, у неё слои взаимодействия нужным образом, происходит большой просчёт физики, но так как у меня выставлен довольно большой порог ухода в сон физики, это такое себе предположение. Третье это, частицы образованные перед твёрдым движущимся объектом, могли при ошибки физики на такой скорости в инфинити, что и могло вызвать подвисание.
Так что товарищ, если даёте совет, то не указывайте самые очевидные вещи которые все знают, люди не глупые.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку