Найти в Дзене

✏️Про идентификаторы в разработке игр

Очевидная тема для опытных разработчиков и вообще неочевидная для начинающих. Я сам дошел до них спустя год, а может и два после старта карьеры в коммерческой разработке. И про идентификаторы до сих пор не принято говорить, словно нет надобности, хотя тема очень важная на мой взгляд, и не для всех очевидная, как я уже сказал. Идентификатор - уникальное число или строка, которая помогает определить уникальность какой либо сущности в игре. Звучит размыто, давайте немножко погрузимся глубже. Идентификаторов может быть несколько уровней, чаще всего - 2 уровня: 1. Идентификатор для конфига. Простой пример: есть у вас предмет в игре, его можно поднять. Допустим, это меч. У этого меча есть какие-то параметры: урон, тип урона и другие. Хранить параметры в префабе не всегда удобно, особенно если разных мечей и вообще оружия много, поэтому параметры выносятся в конфиги (скриптабл объекты или таблицы, это сейчас не важно). И чтобы связать префаб в рантайме и его конфиг - заводят идентификатор.

✏️Про идентификаторы в разработке игр

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

Идентификатор - уникальное число или строка, которая помогает определить уникальность какой либо сущности в игре. Звучит размыто, давайте немножко погрузимся глубже. Идентификаторов может быть несколько уровней, чаще всего - 2 уровня:

1. Идентификатор для конфига. Простой пример: есть у вас предмет в игре, его можно поднять. Допустим, это меч. У этого меча есть какие-то параметры: урон, тип урона и другие. Хранить параметры в префабе не всегда удобно, особенно если разных мечей и вообще оружия много, поэтому параметры выносятся в конфиги (скриптабл объекты или таблицы, это сейчас не важно). И чтобы связать префаб в рантайме и его конфиг - заводят идентификатор. Идентификатор этого уровня обычно строковый, чтобы в конфигах понимать, что за предмет описывается. Например wooden_sword_rare. Такая связка работает для многих предметов в игре: объект в игре + конфиг, связанные через строковый идентификатор. Польза такого идентификатора в том, что может существовать множество одинаковых предметов, ссылающихся на один и тот же конфиг, удобно хранить и осуществлять поиск конфига через словари например.

2. Уникальный идентификатор объекта. Этот уровень актуален почти для каждого объекта в игре. Обычно это уникальное число, которое может генерироваться по разным правилам при создании объектов на сцене. Представим, что у нас генерируемая карта с ловушками и всяким лутом, при этом, хотим позволить игроку сохранять прогресс в любом месте. Тогда при генерации, мы "выдаем" каждому объекту (ловушке, валающемуся предмету и др) уникальный идентификатор. Такой подход мощно облегчает жизнь по всем фронтам:

- Логирование, легко узнать какой конкретно объект работает неправильно, даже если одинаковых объектов сотни и тысячи

- Легко манипулировать состоянием: игрок отключил ловушку с идентификатором N, это пойдет в сохранение, что ловушка с номером N - отключена.

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

- Очевидное удобство при разделении на вью и модель. Вью знает только идентификатор и отправляет в модель запросы "что-то сделать". Модели же кроме типа объекта и идентификатора ничего не нужно знать.

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

__

Надеюсь я не задушнил и понятно высказался, если есть вопросы - задавайте в комментах, расшифруем :)