Этот туториал — часть серии Начало работы — День 3, Неделя 2.
Проблема: переименованный персонаж оставляет устаревшие следы
Вчера категории получили свои шаблоны: базы для Врага, Персонажа и — новый элемент — Игровой карты, а первые карты появились как экземпляры.
Сегодня утренняя страшилка: Дмитрий, которого вы создали вчера, — это имя, которое вам уже хочется поменять. Он меняет роль, поэтому вы переименовываете его. Легко - одно изменение в дереве проекта.
Но что, если его имя набрано вручную в дюжине мест? В описании его фирменной способности, в заметках о том, кому достаётся эта карта, в черновике списка колоды. Ни одно из этих мест не обновится при переименовании, потому что каждое хранит имя как статичную строку. Одна маленькая правка — и у вас устаревший документ и рассогласованная колода; чем больше проект, тем больше устаревших следов оставляет одно переименование.
Решение не в лучшей памяти. Оно в том же приёме, что и для структуры: перестать хранить имена и хранить ссылки.
Карты бывают двух видов: предмет и способность
Прежде чем говорить о ссылке, важный факт дизайна. Ваши игровые карты неодинаковы:
- Карта-предмет - может использовать любой персонаж. Огнетушитель, Банановая кожура - разыгрываются, кем бы их ни держали.
- Карта-способность - принадлежит одному конкретному персонажу. Только Дмитрий применяет свою фирменную способность, значит, эта карта его.
Это «принадлежит» — отношение между двумя элементами. Сегодня мы сделаем его полноценной частью дизайна — и сделаем это на самой карте.
Многоуровневое наследование: Игровая карта → Карта способности
Вчера базовый объект Игровая карта определил, что есть у каждой карты: Имя, Стоимость, Урон, Легендарная. Два вида карт — одно и то же с единственным отличием: у карт способностей есть владелец, у предметов его нет.
Это отлично ложится на базовые объекты — ведь базовый объект может сам строиться на другом базовом объекте. Отметьте новый базовый объект как экземпляр Игровой карты — и он наследует всю схему карты. Затем мы лишь добавляем одно поле — Владелец — к уже существующим полям шаблона:
- Имя - Строка (унаследовано)
- Стоимость - Целое число (унаследовано)
- Урон - Число (унаследовано)
- Легендарная - Флажок (унаследовано)
- Владелец - единственное поле, которое мы добавляем
Назовите этот базовый объект Карта способности. Теперь цепочка читается так: Игровой объект → Игровая карта → Карта способности — каждый уровень наследует всё, что выше, и добавляет своё. Предметы — экземпляры Игровой карты; способности — экземпляры Карты способности.
Владелец - это ссылка, и указывает она только на персонажей
Поле Владелец — сердце истории. Задайте его тип Выбор элемента — поле станет живой ссылкой на другой элемент, а не текстовым значением. И вот приятная деталь: выбор элемента можно ограничить в его настройках. Укажите в параметре поля ваш базовый объект Персонаж, и выборщик будет предлагать только персонажей. Не получится сослаться на стену или монету — сам тип поля указывает, кому карта может принадлежать.

Каждая карта способности, порождённая этой базой, теперь несёт две вещи: полностью унаследованную схему карты и Владельца, которым может быть только персонаж.
Ссылка живёт один раз, на карте
Здесь дизайн перестаёт дублировать. Фирменная способность Дмитрия — Дымовая завеса — экземпляр Карты способности. Откройте её и задайте поле Владелец = Дмитрий. Всё: одна ссылка, хранящаяся ровно там, где ей место, — на карте, которая принадлежит ему.
У связи чёткое направление: карта → персонаж. Второе поле для поддержания на персонаже не нужно, никакой список «какие у неё способности» не требуется держать в синхронности. Персонажу не обязательно знать о карте — карта знает о персонаже.
Карты-предметы, в том же повороте, — экземпляры Игровой карты как есть: они вообще не наследуют поле Владелец, ведь его добавляет только Карта способности. Отсутствие владельца означает «может использовать любой». Разница между двумя видами карт становится данными, а не договорённостью из документа.
Переименование безопасно: ссылка следует за элементом
Теперь повторите утреннюю пугающую сцену. Переименуйте Дмитрия во что-то другое. Карта хранит ссылку на него, а ссылка Владелец указывает на элемент, а не на его заголовок — поэтому каждое место, где показывается ссылка, обновится мгновенно, и Владелец карты теперь покажет новое имя. Без поиска, без правок, без устаревших упоминаний. Переименование остаётся одной правкой.
Что дальше: структуры и перечисления
Связи соединяют элементы, и отношение «карта — персонаж» стало настоящими данными. Но значения внутри элементов — всё ещё обычный текст, и «Защитник», где-то набранный как «защитник», будет молча противоречить себе. Завтра: структуры и перечисления — переиспользуемые формы для данных вроде пары «карта + шанс» на враге и фиксированный словарь для Роли персонажа.
Готовы? Стандартизируйте типы врагов структурами и перечислениями - следующий пост в этой серии.
FAQ
Что такое ссылка на элемент в игровом дизайне?
Ссылка на элемент - это связь от одного элемента к другому, которая указывает на постоянный ID, а не на имя. Когда объект переименовывается или редактируется, каждая ссылка на него обновляется автоматически, и документ остаётся согласованным без ручных правок.
Как связать персонажа с его картами способностей в IMS Creators?
Связь создаётся один раз, на карте. Карта способности несёт поле Владелец типа Выбор элемента, ограниченное базовым объектом Персонаж. Задайте Владельцу персонажа — и связь существует; второе поле на стороне персонажа поддерживать не нужно.
Что такое многоуровневое наследование?
Базовый объект, построенный на другом базовом объекте. Потомок наследует всю схему полей родителя и добавляет свои собственные. Цепочка Игровой объект → Игровая карта → Карта способности означает, что карты способностей наследуют Имя, Стоимость, Урон и Легендарную из схемы карты, а затем добавляют Владельца.
Почему ссылка живёт на карте, а не на персонаже?
Потому что способность принадлежит ровно одному персонажу — отношение естественно читается от того, чем владеют. Храня ссылку один раз на карте, вы избавляетесь от скопированных имён, которые ломаются при переименовании, а пустой Владелец — чистый способ сказать «предмет — может использовать любой». Чтобы прочитать связи в обратную сторону — какие карты способностей принадлежат персонажу, — используйте Показать связи и смотрите на обратные ссылки; мы разберём это в одном из следующих постов.
Как сделать, чтобы выбор элемента показывал только персонажей?
Задайте полю тип Выбор элемента, а в параметрах поля укажите в Тип ваш базовый объект Персонаж. Выборщик ограничит варианты персонажами, так что ссылка не сможет случайно указать на посторонний элемент.
Сломает ли переименование элемента мои связи?
Нет. Ссылки хранят ID элемента, а не имя, поэтому переименование автоматически обновляет все места, где на элемент ссылаются. Отображаемые заголовки подставляются сразу же.