Надоело прописывать параметры каждого врага вручную? Создайте шаблон и упростите рутину

 Зачем тратить время на дублирование кода, если можно просто заполнить удобную форму и получить нового персонажа?

Проблема: повторяющиеся поля и способности в каждом герое

Вчера вы навели порядок и задали полям строгие типы, так что теперь все значения в коллекции стали четкими и предсказуемыми. Отличное начало!

Следующим шагом необходимо оптимизировать рутину. Каждый раз при создании очередного врага приходится заново описывать одни и те же свойства — здоровье, скорость, урон. Пока врагов всего три-четыре, это просто надоедает. Но когда бестиарий разрастется до тридцати или пятидесяти позиций, вы очень утомитесь. Будете тратить кучу времени на рутинное копирование структуры вместо того, чтобы заниматься геймдизайном, трудно представить сколько времени займёт, если вы решите добавить новое свойство у героев и его нужно будет объявить у всех врагов.

Решение - перестать определять схему для каждого элемента и определить её один раз, для всех

Что такое базовый объект?

В IMS Creators задачу по наполнению структуры решает базовый объект. Базовый объект - это обычный игровой объект, который вы отметили как шаблон. Он содержит схему полей - список полей и их типов, которые должны быть у каждого элемента этой категории, - и, как любой объект, базовый объект может также хранить значения. Эти значения становятся значениями по умолчанию для каждого создаваемого экземпляра, так что новый враг получает ваши типовые базовые характеристики уже заполненными. От любого игрового объекта можно создать его экземпляр - новый игровой объект, который наследует ту же схему полей и готов к заполнению значений.

Отметка элемента как шаблона необязательна. Даже без флага вы можете создавать экземпляры любого игрового объекта. Обычный шаблон живёт в дереве проекта как любой другой объект - вы переходите к нему, щёлкаете правой кнопкой и создаёте экземпляр. (Существует и отдельная внутренняя секция Базовые объекты, но она для корневых шаблонов приложения, а не для тех, что вы отмечаете сами.) Настоящая роль флага - вывести сам шаблон из отслеживания прогресса: в облачной версии элемент-шаблон не показывается в списке нерешенных задач, потому что категории - это не сам контент, а структура для контента. Так что такая отметка является просто хорошим тоном, который облегчит вам отслеживание готовности игры.

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

  • Базовый объект (шаблон): определяет схему полей - имена, типы, значения по умолчанию. Может хранить значения, которые становятся значениями по умолчанию для его экземпляров.
  • Экземпляр: наследует схему от базового объекта и заполняет конкретные значения для одного конкретного элемента.

Приложение также поставляет собственные корневые базовые объекты - шаблоны, которые заданы внутри самой программы. Например, корневые базовые объекты могут определять переиспользуемые вещи вроде триггеров и переменных диалогов, применяемых ко всем диалогам. Мы разберём их в одном из будущих туториалов.

Игровой объект → Враг → Конкретный враг

Возьмём коллекцию врагов из вчерашнего поста. Сейчас у каждого врага есть собственные поля ЗдоровьеСкорость и Урон - все типизированные, все корректные.

Отметьте первого врага, в блоке Свойства добавьте поля, которые должны быть у каждого врага:

  • Здоровье - Целое число
  • Скорость - Число
  • Урон - Число

Значения оставьте пустыми. Теперь создайте экземпляр, щёлкните правой кнопкой по шаблону и выберите Создать экземпляр. IMS Creators создаст новый игровой объект с тремя уже определёнными полями - Здоровье, Скорость, Урон. Назовите его Громила и заполните: Здоровье = 200Скорость = 15Урон = 15. Тяжёлый медленный враг, готов.

Игровой объект → Способность → Конкретная способность

Тот же паттерн работает для способностей. Создайте игровой объект для базового типа, отметьте его шаблоном и задайте поля, которые есть у каждой способности:

  • Имя - Строка
  • Стоимость - Целое число
  • Перезарядка - Целое число

Создайте экземпляр, назовите Выстрел из огнетушителя и заполните: Имя = Выстрел из огнетушителяСтоимость = 10Перезарядка = 8. Ещё один: Ярость покупателя с Стоимость = 15Перезарядка = 12. Каждый экземпляр наследует одни и те же три поля от одного базового, различаются только значения.

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

Результат: настроили один раз, пользуйтесь постоянно

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

Практическая выгода: добавление следующего врага, следующей способности, следующего предмета - заполнение готовой формы. Если что-то нужно изменить, вы правите один раз в базовом объекте, и каждый экземпляр изменяется вслед за ним.

Дальше: научимся связывать персонажей и способности

Шаблоны определили структуру категорий, но персонажи, способности и враги все еще распределены по изолированным спискам. В следующем посте мы свяжем персонажей со способностями через ссылки. Это объединит разрозненные файлы в общую структуру данных.

Готовы избавиться от рутины при работе с данными? Скачайте IMS Creators, откройте ims.cr5.space/desktop, отметьте один игровой объект шаблоном и создайте первый экземпляр. Несколько минут настройки базового объекта - и добавление следующего врага займёт две минуты вместо десяти.


FAQ

Что такое базовый объект в IMS Creators?

Базовый объект - это обычный игровой объект, который используется для порождения новых объектов. Он определяет схему полей - имена и типы, - а любые значения, которые он хранит, становятся значениями по умолчанию для его экземпляров. Новые игровые объекты, созданные из экземпляра, автоматически наследуют его поля.

Как отметить игровой объект как базовый (шаблон)?

Откройте игровой объект, перейдите в его настройки и включите переключатель Является шаблоном. Обычный шаблон остаётся в дереве проекта как любой другой объект. (Отдельная секция Базовые объекты - для внутренних корневых шаблонов приложения, а не для тех, что вы отмечаете сами.) Главная роль флага - вывести определение категории из отслеживания прогресса: в облачной версии оно не показывается в списке задач, оставляя его для настоящего контента. Создавать экземпляры можно в любом случае.

Как создать экземпляр базового объекта?

Щёлкните правой кнопкой по базовому объекту (или по любому игровому объекту - шаблону или нет) и выберите Создать экземпляр. Появится новый игровой объект с той же схемой полей, унаследованной от базового, готовый к заполнению значений. Отметка шаблоном не обязательна - она лишь убирает элемент из отслеживания прогресса.

Могу ли я добавить кастомное поле в один экземпляр?

Да. Экземпляры наследуют схему базового, но вы можете добавить дополнительные поля к конкретному экземпляру, не затрагивая остальные.

Это то же самое, что дублирование элемента?

Нет. Дублирование копирует элемент с текущими значениями. Создание экземпляра наследует схему полей от базового объекта - вы получаете ту же структуру, но с пустыми значениями для заполнения. Экземпляр остаётся связанным со своим базовым объектом, поэтому изменения схемы распространяются.

Где живут базовые объекты в проекте?

Обычные шаблоны - это обычные файлы игровых объектов на диске, и они остаются в дереве проекта как любые другие объекты - внутренне помеченные как шаблоны (isAbstract: true в JSON). Существует также отдельная секция Базовые объекты в приложении (видна в настройках), но она для внутренних корневых шаблонов, которые предоставляет само приложение, а не для тех, что вы отмечаете сами.

Назад к блогу