Mount & Blade 2 II: Bannerlord. Блог Разработчиков 74. Платформа Gauntlet

Mount & Blade 2 II: Bannerlord. Блог РазработчиковОчередной блог разработчиков  Mount & Blade 2: Bannerlord 

Приветствуем, воины Кальрадии!

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

Это то, что мы поняли, работая над Пользовательским интерфейсом (ПИ) для Bannerlord. Ранее мы использовали комбинацию Flash и Scaleform для создания нашего ПИ, что на самом деле довольно распространенный метод в игровой индустрии. Мы начали с создания ПИ во Flash, прежде чем использовать Scaleform для работы ПИ в игре. Технически, как Scaleform, так и Flash функционировали отлично и предоставляли нам возможность реализовать ПИ так, как нам нравилось. Однако прошло не так много времени, прежде чем мы заметили некоторые проблемы с общим процессом создания и реализации ПИ, которые, по нашему мнению, необходимо было решить.

Начнем с того, что процесс был довольно медленным. Любые изменения в ПИ, прежде чем внедрять их в игру для тестирования, должны были быть сделаны во Flash. По мере усложнения экранов, генерация .swf файла начала занимать больше времени. И с каждым внесенным изменением, игру нужно было перезагружать, чтобы увидеть результат. Даже небольшое изменение, такое как перемещение элемента на 5 пикселей влево, требовало прохождения всего этого процесса.

Кроме того, Scaleform и Flash являются сторонними платформами, над которыми мы имели ограниченный контроль. Трудность изменения и модификации этих систем, в зависимости от наших потребностей, заставила нас усомниться в усилиях, которые мы прилагали, чтобы заставить их работать.

В конце концов мы поняли, что время и энергия потраченные на ПИ, сдерживают нас, и единственный путь получить ПИ, который бы соответствовал нашему видению игры - создание собственной библиотеки ПИ. Ведь некоторые проблемы - это просто замаскированные возможности!

И это была очень пугающая перспектива, потому что мы уже вложили тысячи человеко-часов в существующий ПИ. К счастью, в начале процесса разработки мы решили использовать парадигму MVVM для создания ПИ. Это означает, что часть кода была в аккуратных C# классах, что не зависело от какой-либо конкретной библиотеки ПИ, и мы могли бы повторно использовать эту часть нашей работы, даже если бы нам пришлось делать все остальное заново. Ура!

Затем нам нужно было решить, как будет выглядеть наша новая библиотека ПИ. Мы придумали список требований:

Новая библиотека должна была быть быстрой и юркой. Наша команда движка работала очень усердно, чтобы сократить одну миллисекунду от нашего цикла рендеринга, и они бы не оценили,если бы ПИ тратил их сбережения с низкой производительностью.
Также, с новой библиотекой должно было просто работать и вносить изменения на лету. Предпочтительно использовать текстовый формат файла спецификации, например xml, поскольку текстовые файлы значительно упрощают совместную работу нескольких разработчиков.
Система должна была упростить создание высокоинтерактивного ПИ.
Макет ПИ должен был быть независимым от того, как он будет выглядеть визуально. Это позволит дизайнеру ПИ работать независимо от художника.

Мы решили назвать нашу новую платформу ПИ Gauntlet (По той простой причине, что это название показалось нам крутым!). С Gauntlet мы можем вносить изменения на лету. Это означает, что мы можем редактировать экран не закрывая игру, без каких-либо созданий файла или других дополнительных шагов. Когда мы вносим изменения в .xml файл экрана, мы видим результаты, как только мы сохраняем этот файл. И поскольку у нас есть полный контроль над системой, мы можем вносить изменения по мере необходимости.

Итак, как же это работает? На самом деле, система довольно проста. Мы подсоединяем .xml файл к экрану в игре, который игра загружает, когда экран открывается. Вся информация о макете экрана указана в этом файле. Мы также можем ссылаться на другие .xml файлы в каждом .xml, что означает, что если мы создадим элемент ПИ, который мы будем использовать более одного раза (т. е. на других экранах), мы можем просто обратиться к этому элементу. Это позволяет нам вносить изменения в файл, и эти изменения происходят везде, где мы ссылаемся на этот .xml.

У нас также есть набор отдельных XML файлов, которые определяют, как различные элементы будут выглядеть, так же, как CSS файлы используются для HTML-страниц. Эта система скиннинга очень мощная, и художник может легко указать каждую деталь о том, как элемент ПИ будет выглядеть и вести себя. Например, кнопка может менять цвет, когда пользователь наводит на нее курсор или анимация активируется, когда пользователь нажимает на нее.


Экран инвентаризации .XML


Меню инвентаря в игре

Мы надеемся, что Gauntlet станет приятным дополнением для нашего моддингового сообщества. В Warband редактирование пользовательского интерфейса всегда было головной болью, и существовали некоторые ограничения, которые нельзя было преодолеть. С Gauntlet, моддеры будут иметь полный контроль над каждым экраном, а единственным ограничением является их воображение.

Обсудить на форуме.

Недостаточно прав для комментирования