Измените объект в Вашей игре и движок загрузит изменения автоматически

Переэкспортировать вручную после каждой правки баланса — привычка, которую слишком легко пропустить. Автоэкспорт следит за коллекцией, пересоздаёт файлы при сохранении, а экспортированный JSON — ровно тот файл, что грузит ваша сцена в Godot

Этот туториал — часть серии Начало работы — День 5, Неделя 3.

Проблема: привычка, которая разваливается

В прошлой статье экспорт коллекции Карты заработал через пару настроек: правый клик, выбор формата, выбор папки - готово. Но что делать, когда ты вообще забыл что нужно выгрузить?

Баланс - это поток мелких правок: у одной карты слишком высокая стоимость, у другой слишком низкий урон, каждая правка заканчивается одним решением: переэкспортировать сейчас или после следующего изменения? По закону подлости, вам захочется отложить всё до последнего, и вот игра работает на вчерашних числах. И вы возвращаетесь к проблеме первой недели: редактор говорит 4, сборка говорит 2, и снова разгадываем ребус.

Эскпорт в один клик - удобный инструмент, а вот автоматический экспорт - гарантия в акутальности изменений.

Автоэкспорт: коллекция пишет файлы

Автоэкспорт соединяет коллекцию с папкой назначения и держит файлы там в актуальном состоянии. Настраивается один раз в проекте, дальше сохраняем элемент, файлы перезаписаны.

В проекте откройте настройку автоэкспорта: нажмите на меню рядом с именем проекта, выберите Экспортировать, затем Настроить автоэкспорт. При открытии страница показывает только одно управление — кнопку «Добавить конфигурацию».

Шаг 1: добавьте конфигурацию

Конфигурация говорит, какой набор данных куда и в какой форме идёт. Добавьте одну для карт:

  • Папка — источник: выберите коллекцию Карты.
  • Тип — Игровая карта (набор уже типизирован; конфигурация наследует тип).
  • Выберите формат — формат, созданный вчера: Карты для движка, JSON-формат с Выбранными полями.
  • Сохранить результат как — cards; при объединении JSON в один файл получается cards.json.

Если требуется, добавьте ещё одну конфигурацию со CSV в папку для команды, - та же коллекция, разные потребители, всё автоматически.

Шаг 2: выберите корневой каталог

Корневой каталог это назначение для всего, что производит автоэкспорт. Это момент соединит два мира: держите под рукой папку проекта Godot и укажите экспорт туда. Файлы отправяятся прямо туда, где игра будет их читать, вместе с файлами самого движка («дизайн кодом»), что вы использовали в первую неделю.

Страница настройки экспорта с корневым каталогом, указывающим на папку проекта Godot

Шаг 3: включите синхронизацию

Внизу страницы настройки два управления:

  • Экспорт - запускает экспорт прямо сейчас, как разовую ручную синхронизацию. Полезно для самого первого запуска.
  • Экспортировать автоматически С этого момента сохранение элемента в проекте запускает пересоздание всего, что эта настройка экспортирует.
Управление на странице экспорта: кнопка Экспорт, галочка Экспортировать автоматически и список конфигураций cards → cards.json

Цикл: IMS Creators и Godot, один источник истины

Вот весь цикл от начала до конца. Игра (Dead Mall, ваш Godot-проект) читает файл под названием cards.json, который пишет автоэкспорт. Данные колоды в бою приходят из этого файла: не из констант, не из скопированной таблицы:

var cards = JSON.parse_string(FileAccess.get_file_as_string("res://cards.json"))

cards — массив; каждая запись — одна экспортированная карта в той форме, что производят Выбранные поля + скрипт формата. Задайте имена вывода так, чтобы ключи уже совпадали с тем, что ожидает движок:

[
  {
    "name": "Fire Extinguisher",
    "damage": 4,
    "cost": 6,
    "legendary": true
  }
]

Теперь поток, который раньше зависел от того, вспомните что нужно:

  1. Откройте коллекцию Карты.
  2. Поднимите Урон Огнетушителя с 4 до 6.
  3. Сохраните элемент.
  4. Секундой позже cards.json пересоздаётся с "damage": 6.
  5. Перезагрузите сцену — или перечитайте файл — и Godot применит новое значение.

Экспорт происходит без вас. Редактор и запущенная игра читают одну и ту же истину, и механизм, держащий их в согласии, не дисциплина, а сохранённая настройка.

Если хотите, чтобы изменения появлялись без ручной перезагрузки, помогает чтение в реальном времени: дайте игре небольшой запрос или reload_data(), который перечитает cards.json, привяжите к хоткею и баланс станет живой: крутите число, сохраняйте и смотрите, как игра меняется на ходу.

Итоги недели 3

Две проблемы, электронной таблицы: параллельная копия данных и ручное переписывание - оба исчезли:

  • Типизированные коллекции превратили баланс в правку одной таблицы: каждая строка - реальная карта, каждая правка - реальное сохранение по всему набору.
  • Виды дали каждой задаче свою раскладку таблицы: колонки, тип отображения, сортировку и фильтр, восстановленные одним кликом.
  • Фильтры заменили пролистывание запросами: damage.value:>20, диапазоны, комбинированные наборы, которые сами отвечают за сегодняшние данные.
  • Пользовательский экспорт спроецировал коллекцию в формы, нужные потребителям, JSON для движка через Выбранные поля и скрипт пересборки, CSV для команды.
  • Автоэкспорт соединил коллекцию напрямую с проектом Godot, экспортированные файлы верны с нулевым участием.

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

Что дальше: AI

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


FAQ

Что делает автоэкспорт?

Отслеживает проект и пересоздаёт файлы каждого настроенного экспорта, когда вы сохраняете элементы. Конфигурация связывает исходный набор (коллекция + тип) с форматом и именем сохранения, корневой каталог настройки - куда ложатся файлы.

Как быстро обновляются файлы после сохранения?

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

Куда должен указывать корневой каталог?

Куда угодно, где нужны файлы, но для Godot-игры укажите папку проекта Godot, чтобы экспортированные файлы легли туда, где их читает сцена. Это конфигурация, которая замыкает цикл между редактором и движком.

Автоэкспорт это риск? Может ли он уничтожить мои файлы?

Он переписывает только те экспортированные файлы, которыми управляет, производя их из текущих данныхи не трогает ваш рукописный код и сцены. Экспорт - обычный текст, так что всё что нужно: видно в git и без проблем откатывается. Галочка «Экспортировать автоматически» выключает его в любой момент.

Нужен ли мне теперь обычный экспорт?

Удобно для первого экспорта и для обновлений по запросу, автоматический режим - это то, что держит файлы верными день за днём.

Можно ли править коллекцию, пока Godot её читает?

Автосинхронизация откладывает запись, не вмешивается в файл посреди чтения, а перечитывание - это чистая новая загрузка. Архитектура баланса получается очень независимой: вы спокойно правите и сохраняете конфиг, он обновляется в фоне, а игра считывает новые данные, как только вы нажмете кнопку перезапуска.

Как это связано с чтением .json в первую неделю?

Первая неделя показала, что с файлами геймдизайна можно работать, заставив Godot читать .json напрямую (см. Дизайн-документ и код снова разошлись). Автоэкспорт упрощаетрутину: вместо парсинга движком сырых файлов дизайна экспорт проецирует их в собственный JSON движка, записывающийся автоматически, так истина по-прежнему переносится из редактора в сборку без вашего участия.

Поделиться:
Назад к блогу