Давайте рассмотрим пример. В нашей «Очень счастливой ферме» есть 100 видов ресурсов, 40 различных животных, 75 строений и т. д. Все эти игровые сущности имеют собственные параметры, собираемые из разных компонентов, и должны как-то конфигурироваться и храниться. У нас есть здание «Загон для барашка». Оно обладает параметрами: размер, доступные животные, визуальный арт и т. д. Для его постройки необходимо 2 железа, 100 монет и 3 дерева. Для дальнейшего улучшения – еще какие-то ресурсы. Мы можем описать это в виде списка с соответствиями: уровень здания – список ресурсов.
Теперь программа сможет прочитать это описание и отобразить информацию о строительстве данной сущности в интерфейс пользователя. Или же наоборот: если игрок нажимает «Создать загон для барашка», обратится к этим файлам для проверки, выполнены ли все условия, прежде чем создавать строение.
XML несложен в написании. Есть специальные программы, например, Notepad++ или Jetbrains WebStorm, позволяющие сделать данные нагляднее, используя отступы, разные цвета и т. д. Можно создавать файлы в редакторах и отдавать в игровой движок, а можно писать сразу в редакторе, который вы используете для работы с Unity (к примеру, MonoDevelop).
Базы данных позволяют создавать не просто текстовые файлы. В отличие от 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, гейм-дизайнеру предстоит внести в игру получившиеся значения.
Можно, конечно, заниматься «мартышкиным трудом», переписывая каждую цифру вручную. Многие разработчики так делали, пока не допустили первые ошибки. Именно вероятность допустить ошибку, просмотреть что-то и здоровая лень зародили мысль об автоматизации.