Trial Park: Дневник разработчика

Привет, Пикабу


В марте стартовал игровой джем #GamesJam #GamesJamKanobu - нужно за месяц написать игру, используя физику. Моя цель - оценить перспективность своей идеи, а также поделится своими знаниями в разработке.


Если Вы начаниющий разработчик, думаю, этот пост будет Вам интересен.


Для начала, пару слов об игре: Игрок должен уйти от погони, расстреливая все, что приближает к его машинке. Игра должна вызывать ощущение погони, драйва, в нее можно играть, чтобы "выпустить пар" после рабочего дня. В идеале, игра должна будить в игроке эмоции, как у гражданина с открытым ртом:

Технические подробности: Игра пишется на Unity3d, с использованием 2d-физики. Разработкой прототипа занимаюсь один: программная часть и геймплей лежат на мне, графические заготовки беру в интернете рисую сам. Если прототип вызовет интерес и разовьется в полноценную техно-демку, к проекту подключится дизайнер и придаст игре ту самую изюминку, которой сейчас не хватает на скриншоте:

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


Игровой процесс разделяется на волны, в которых игрок должен отражать нападения разных врагов. В какой-то мере, игра является endless runner'ом. С технической точки зрения это значит, что все игровые ресурсы стоит использовать многократно, иначе рано или поздно игра начнет притормаживать - это начнет работать сборщик мусора. В игре с постоянным и равномерным движением эти рывки буду особенно заметны, поэтому в основе всего лежит шаблон - пул объектов (Object Pool).


Пул объектов - это таблица списков, на C# она выглядит так: Dictionary < string, List< GameObject > >. В начале игры, мы заполняем эту таблицу идентификаторами объектов, которые нам нужны, и инициализируем списки экземплярами префабов - кол-во создаваемых объектов меняется в зависимости от того, как часто используется объект, например, мы добавляем 32 монетки "Coin", и всего лишь 4 яйца "Egg" - т.к. одновременно игроку может выпасть много монеток, но всего несколько яиц с динозавром. Еще один момент, на который стоит обратить внимание при использовании пула объектов - это на то, что объект всегда должен выходить из пула "чистым", в состоянии "по умолчанию" - иногда это самое сложное и чревато багами. Самый просто пример: все объекты в игре физические, и когда объект возвращается в пул, мы должны сбросить его скорости вращения / перемещения, иначе при повторном использовании он "выпрыгнет" помня о старых скоростях, что нам совсем не нужно, это выглядит так:


protected virtual void OnDisable()

{

_rigidbody.velocity = Vector2.zero;

_rigidbody.angularVelocity = 0.0f;

}


Конечно же, чем сложнее объект и чем больше состояний он имеет, тем сложнее его вернуть в состояние "по умолчанию".


Т.к. мы не знаем заведомо, где будет начало или конец волны (уровня), то нам нужно позаботится о динамическом создании уровня, здесь нам на помощь приходят триггеры:

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

Для самых стойких, кто долистал дочитал до конца, ссылка на страницу GamesJam:

http://gamesjam.org/3162/ (тут можно поиграть в актуальную версию)


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


В следующей версии, я планирую добавить:

- "многоходовый" мега-босс - механический крокодил, вместо зубов у него будут ракеты, а из глотки буду вырываться бочки с горючим

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

- систему анти-бустеров для врагов - замедление, взрыв бомбы и т.д.


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


Спасибо за внимание и успехов в разработке :)

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

ЗАПРЕЩЕНО:

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

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

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


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

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

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

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

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

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества