'Waybound' — планирование игры
Введение
Завершив предыдущий опыт и собираясь начать новый проект на Unity, я пересмотрел один спокойный фильм десятилетней давности и задумался о том, какое влияние оказывает опыт. Когда мысли немного улеглись, я подумал, что хотел бы создавать такие же вещи, как хорошее кино, оставляющее приятные впечатления. К тому же мне всегда хотелось что-то создавать и выражать.
Простой концепт-арт и набросок плана, который мы набросали с другом
Сосредоточившись на опыте, я задумал среду, в которой объекты в сцене самостоятельно взаимодействуют друг с другом, даже если игрок вообще ничего не делает. Игра, в которой можно просто наблюдать и бродить без очков или условий завершения.
Быстро набросав рисунок на основе этой идеи, я понял, что она выглядит неплохо, и реакция окружающих тоже была положительной. Так началось формирование концепции.
Планирование
Самым большим разочарованием в прошлый раз было отсутствие планирования. Без ориентиров и долгосрочного плана было трудно определить направление игры на макроуровне, а на микроуровне — думать о ретенции или монетизации. Поэтому в этот раз я решил сначала хотя бы в общих чертах составить план.
Поискав концепции, помогающие в планировании игр, я наткнулся на GDD (Game Design Document). Это что-то вроде спецификации игры; единой формы не существует, поэтому я решил взять за основу шаблон GDD от Unity и заранее описать только необходимые разделы.
Упрощённый GDD
- Основное описание
- Название: 행선지 (англ: waybound)
- Жанр: горизонтальный скролл-адвенчура (side-scrolling adventure)
- Формат: 2.5D мобильная
- Геймплей
- Игрок становится одним из существ, населяющих среду, — человеком, собакой, кошкой, муравьём и т.п. — на окраине города и выполняет доступные этому существу взаимодействия. Например, человек достаёт напиток из автомата, собака обнюхивает скамейку на улице.
- Даже если игрок специально не управляет существом, существа взаимодействуют друг с другом и создают атмосферу городской окраины. У каждого существа есть внешняя индивидуальность в заданных пределах.
- Ключевые особенности
- Разнообразные взаимодействия между объектами
- Рисованные изображения и покадровая анимация
- Изменение ощущений в зависимости от погоды (дождь, снег и т.п.)
Примеры объектов
mindmap
root((Объекты))
Живые объекты
Человек
Собака
Кошка
Голубь
Муравей
Светлячок
Неживые объекты
Торговый автомат
Стул
Мусорка
Палатка с едой
Фоновые объекты
Многоквартирный дом
Магазин
Кафе
Бар
Метро
Примеры взаимодействий
graph TD;
Человек -- Купить напиток --> Торговый автомат;
Человек -- Выгуливать --> Собака;
Человек -- Гладить --> Кошка;
Человек -- Смотреть --> Светлячок;
Человек -- Сесть --> Стул;
Человек -- Купить еду --> Палатка с едой;
Цели
Технические цели
В прошлых проектах у меня было много путаницы с именами переменных и функций. Не удавалось добиться ни согласованности, ни интуитивности, и со временем читать и изменять код становилось всё труднее.
Тогда я наткнулся на статью в блоге Unity о правилах именования и был немного поражён. Если бы я знал это с самого начала, было бы гораздо удобнее. В итоге я чётко понял, когда и какие имена использовать в C#, а каких стилей следует избегать.
Продолжая искать, какие ещё практики мне следует знать, я обнаружил электронную книгу Unity под названием “Level up your code with game programming patterns”. Внимательно её изучив, я узнал о принципах SOLID, фабричном паттерне, паттерне состояния и других полезных техниках. На основе этого я стал искать производные паттерны и определил для себя несколько областей, в которых хотел бы применить более системный подход к проектированию кода. Кратко это можно свести к следующему:
- PlasticSCM
- Событийно-ориентированное программирование
- Процедурная анимация
- Строгие правила именования
Из них PlasticSCM — это система контроля версий (VCS), предназначенная для замены GitHub, чтобы время от времени сохранять наработки в процессе разработки. Событийно-ориентированное программирование и правила именования — ключевые навыки, которые я хочу приобрести в этом проекте. Кроме того, есть небольшие цели — лучше освоить ещё не вполне привычные для меня паттерн синглтон, корутины, делегаты, свойства get set и т.д.
Художественные цели
Основная цель — описать повседневную атмосферу вокруг нас через опыт восприятия движущихся линий и рисунков. Хотелось бы передать это так, чтобы было достаточно заметно, но не раздражающе. По возможности я стремлюсь к кинематографичной подаче и планирую использовать следующее:
- Покадровая анимация
- Динамическая глубина резкости
- Тональные кривые
В целом, я хотел бы сделать игру, в которой будет интересно даже просто смотреть на экран, ничего не делая. Однако я беспокоюсь, хватит ли у меня для этого способностей. В частности, я слышал, что рисовать движения животных — собак, кошек, голубей — покадровой анимацией — это удел профессиональных аниматоров. Мне не нужно делать такую детализированную анимацию, но из-за отсутствия опыта и знаний, вероятно, будут ошибки.
Дорожная карта
gantt
title Первая дорожная карта
Section Планирование
Планирование :a1, 2024-02-28, 1d
Section Разработка
Разработка прототипа :a2, 2024-02-28, 85d
Визуальное оформление: a3, 2024-05-23, 10d
Section Релиз
Релиз и поддержка :a4, 2024-06-01, 213d
%% a2["Завершение прототипа"] : разработка и тестирование функциональности начальной версии прототипа.