Хочу в геймдев! Основы игровой разработки для начинающих - Вячеслав Николаевич Уточкин
<building name=”zagon_baran”>
<size width=”2” height=”3”/>
<upgrade level =”1”>
<resource type=”iron”>2</resource>
<resource type=”lumber”>3</resource>
<money>100</money>
</upgrade>
</building>
Теперь программа сможет прочитать это описание и отобразить информацию о строительстве данной сущности в интерфейс пользователя. Или же наоборот: если игрок нажимает «Создать загон для барашка», обратится к этим файлам для проверки, выполнены ли все условия, прежде чем создавать строение.
Рис. 21. Фрагмент XML-кода, описывающего содержимое лутбокса браузерной игры
XML несложен в написании. Есть специальные программы, например, Notepad++ или Jetbrains WebStorm, позволяющие сделать данные нагляднее, используя отступы, разные цвета и т. д. Можно создавать файлы в редакторах и отдавать в игровой движок, а можно писать сразу в редакторе, который вы используете для работы с Unity (к примеру, MonoDevelop).
БАЗЫ ДАННЫХ И SQL
Базы данных позволяют создавать не просто текстовые файлы. В отличие от XML, это уже особым образом структурированные данные, работа с которыми происходит через движок базы данных (БД), позволяющий к этим данным обращаться. У каждого движка свой язык, на котором он принимает команды. Самый популярный тип баз данных в игровой индустрии – SQL (от англ. Structured Query Language – «язык структурированных запросов»).
База данных – это набор взаимосвязанных таблиц. В визуальном редакторе создаются таблицы, куда вносятся данные. В SQL это строка с заголовками, значениями и т. д.
Бывают разные вариации этого языка, используемые разными движками СУБД (MySQL, PostgreSQL, MsSQL, SQLite и другие), но логика одна и та же. Основные команды для работы с БД можно пересчитать по пальцам:
SELECT – выгрузить из базы нужные данные;
INSERT – вставить в базу новую запись;
REPLACE – заменить имеющуюся запись;
DELETE – удалить вхождения данных из базы.
Конечно, в работе вы столкнетесь с гораздо большим набором команд для транзакций[71], но при помощи этих можно закрыть 90 % простых задач. Для более сложных запросов – к примеру, хранимых процедур – потребуется либо более глубоко изучить SQL, либо обратиться к вашему аналитику, если такой есть в команде. Аналитик обязательно знает множество команд и нюансов работы с БД.
Помимо SQL, существуют и другие варианты логики хранения и обработки информации в БД. Мы не будем их касаться, потому что они более редкие и сложные в освоении, – лучше обратиться к специализированной литературе.
Для хранения большого объема данных, особенно если предполагается, что эти данные постоянно меняются, лучше выбирать базу данных, а не XML. Допустим, в нашей игре миллион игроков, и по каждому необходимо собирать метрики. Хранить динамические данные в XML-файле не так эффективно; база данных позволяет быстрее оперировать большим объемом динамической информации. Но это не означает, что статическая информация также должна быть размещена в БД.
Есть примеры сочетания обоих способов: база для динамических данных и XML для статических. Например, гейм-дизайнер решил, что в игре должно быть 20 уровней, и описал их в XML. Эти данные меняться не будут, можно оставить информацию и в этом формате. А вот если нас интересует, на каком уровне сейчас находится конкретный игрок, сколько у него внутриигровой валюты и другие переменные, нужно обратиться к базам данных.
XML легко писать, но тяжело редактировать; базы данных удобнее и быстрее в использовании, но не все гейм-дизайнеры умеют с ними работать. Для онлайн-проектов обычно используются базы данных. Старые игры часто пользовались XML, так как не надо было ничего подгружать в реальном времени.
Базы данных заточены под быструю передачу информации, XML – под удобство описания. Существуют и другие языки, кроме SQL и XML: JavaScript, ActionScript; в Unreal Engine для описания сценариев используют блупринты. Выбор инструментов весьма широкий и зачастую определяется особенностями игрового проекта и личными предпочтениями.
АВТОМАТИЗАЦИЯ РАБОТЫ
Итак, описание XML кода и структуру базы обычно делают программисты или (в крупных студиях) архитекторы баз данных на основе документов от гейм-дизайнера. После того как вся экономика посчитана, для чего чаще всего используется Excel, гейм-дизайнеру предстоит внести в игру получившиеся значения.
Можно, конечно, заниматься «мартышкиным трудом», переписывая каждую цифру вручную. Многие разработчики так делали, пока не допустили первые ошибки. Именно вероятность допустить ошибку, просмотреть что-то и здоровая лень зародили мысль об автоматизации.
Гейм-дизайнеру очень важно уметь создавать собственный удобный инструментарий, чтобы упростить свою работу. Гораздо эффективнее было бы потратить время и написать программу для автоматизации выгрузки данных из Excel. Помимо ускорения работы, мы можем проработать проверку важных параметров на валидность. Скажем, цена морковки (либо другого ресурса) в нашей ферме не может быть меньше 0. Если такая ситуация произошла, нужно, чтобы Excel или программа выгрузки обратили на это внимание (например, подсветив неправильные значения красным). В некоторых компаниях такие помогающие гейм-дизайнеру программы пишут программисты.
Если гейм-дизайнеру не хватает навыков работы с Excel, сделать это самостоятельно, особенно при работе с базами данных, может быть проблематично. Фактически ему не удастся оградить себя от ненужного труда, ошибок и лишних вопросов со стороны коллег. Руководство студий часто просит работать больше, и задача гейм-дизайнера – вовремя самому задуматься над тем, как оптимизировать свою работу. Реализовав эти идеи, можно раз и навсегда переложить обязанности по проверке данных, расчетам, формированию XML-кода и т. д. на технические инструменты, тем самым автоматизировав часть рабочих процессов.
На скриншоте приведен пример данных из экономической стратегии. Это пример скрипта на языке VBA, который не только проводит расчеты, заполняя недостающие ячейки в Excel, но и создает SQL, XML или JSON код для экспорта в игру. Простой VBA-скрипт (упрощенная реализация языка программирования Visual Basic) пробегается по этому списку и генерирует текст SQL-скрипта, который можно просто скопировать в SQL-редактор и выполнить. Он сам перепишет нужную часть информации в соответствии с тем, что вы прописали в Excel.
Рис. 22. Пример данных из экономической стратегии
Для многих ГД освоение встроенного языка VBA является относительно трудоемкой задачей. Мы рекомендуем однажды найти в себе силы и изучить его, навсегда упростив себе жизнь. Однако, если вам этого категорически не хочется, Excel позволяет решать подобные задачи и более простым путем, например через обычные формулы:
=”INSERT into `buildings` (” & B1 & ”, ” & B2 & ”);”
Надеюсь, нам удалось донести до вас важность создания собственных инструментов. Эта логика верна для любых задач: прежде чем что-то делать, задумайтесь: может быть, вы можете автоматизировать процесс, снизив вероятность ошибки, сохранив свое время и в итоге