За Кулисами Разработки: Создание простой Диалоговой Системы для "Perfect Castle"

Привет!

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

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

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

Первый шаг

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

Mассив  - Array
Mассив  - Array

Чтобы организованно хранить эти массивы и избежать создания отдельного массива для каждого диалога, я нашел подходящее решение в использовании структур "Structure" и таблиц данных "Data Table".

 Структура "Structure"
 Структура "Structure"

Структура "Structure" в Unreal Engine — это способ группировки различных типов данных (например, текст, числа, массивы) под одним именем. Это как ящик с разными отделениями для каждого типа информации, где каждое отделение может содержать что-то уникальное, например массив реплик или имя персонажа.

Таблицы данных "Data Table"
Таблицы данных "Data Table"

Таблицы данных "Data Tables" — это функциональность в Unreal Engine, которая позволяет использовать эти структуры данных в виде таблиц. Эти таблицы удобны для хранения, просмотра и редактирования больших объемов информации, например, списка всех диалогов в игре. Таблицы данных "Data Tables" делают процесс управления сложными данными более организованным и доступным, предоставляя легкий доступ к любому количеству диалогов через структурированный и легко читаемый интерфейс.

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

Реализация

Теперь по тому, как мы будем это использовать. Первое – мы берем нашу таблицу и нужную строку. Затем создадим переменную прогресса диалога – простое число. При каждом вызове оно будет увеличиваться на 1. Берем нашу строку структуру с нужным диалогом и данными. И выбираем нужную строку диалога переменной прогресса и передаем наш текст на экран; тем же числом можно менять и картинку.

Основная логика
Основная логика

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

Отладка

Запускаем и проверяем все на недочеты и ошибки. То есть займемся отладкой.

Отладка

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

Решим эти проблемы. Установим нужный размер.

Изменение размера картинки
Изменение размера картинки

Сделаем проверку валидности существования картинки. То есть, если картинка не установлена, она как бы не существует; тест на валидность будет провален, и мы можем в этом случае, например, брать первую картинку.

Проверка на валидность
Проверка на валидность

Еще многое нужно доделать, добавить оттображение поле для имени. Хочу добавить еще пару кнопок для отмотки диалога назад или вперед, что будет просто, изменяя переменную прогресса.

Пока на этом все

Это далеко не идеальная система, и мои методы точно не 100% правильные. И даже объяснения могут быть неверны хD

Надеюсь, вам было интересно узнать немного о процессе разработки. С нетерпением жду ваших отзывов и идей!

Добавляйте мою игру "Perfect Castle" в список желаемого, мне бы это очень помогло.

99
4 комментария

Мне понравились механика
Такая Кози расслабон из твиттера
Но надеюсь скайбокс и плент потом заменяться на что то симпатичное и атмосферное

1
Ответить

Спасибо за ваш отзыв! Скайбокс, вероятно, останется, плейн пойдет на замену, но нужно подумать, чтобы окружение расширялось в зависимости от размера игрового поля и, соответственно, не мешало процессу

1
Ответить

А вумен ты нейросеткой сгенерил?

1
Ответить

Да, она сгенерирована. Кроме того, чат GPT помогает мне писать код.

1
Ответить