Smart Dialogue Creator

Плагин предназначен для удобного и быстрого создания диалоговых сценариев.

Глобальные настройки

Их можно найти в настройках проекта во вкладке Game - Smart Dialogue Settings.

image

Здесь есть настройки системы диалогов (они изменяют глобальное поведение системы): Character Data Asset - ассет всех персонажей, которые используются в проекте (подробнее про него ниже).

Public vars Data Asset - ассет всех публичных переменных, которые используются в проекте

Настройки управления:

Cooldown Phrase Skip - Таймаут после скипа одного диалога, на скип следующего.

Can Skip Hold - Можно ли пропустить диалог по зажатой кнопке.

Skip Dialogue Hold Duration - Время, которое нужно зажимать кнопку пропуска чтобы пропустить катсцену или блок диалогов.

... Keys - массивы кнопок для управления диалогом

И настройки редактора:

  • Player Scroll Width - ширина текста проигрывателя диалогов в редакторе (в режиме DEBUGGING MODE)

  • Duration symbols per second - Рассчёт времени показа фразы. Длительность фраз задается при выборе пункта контекстного меню Set Duration of Phrases. Например если указано значение 15 символов в секунду то для фразы длиной в 60 символов задастся Duration=60/15=4.0

  • Min auto duration phrase - Минимальное время показа фразы. Для коротких фраз. Длительность фраз задается при выборе пункта контекстного меню Set Duration of Phrases. Например если указано значение 2 то для фразы длиной в 20 символов задастся Duration = Max(60/15=1.33, 2.0) = 2.0. Это значение также используется только для редактора.

Внимание! Длительность фраз не изменяется сразу для всех диалогов. Это значение используется только для редактора, берется для автоматического задания длительности фраз ветки с помощью контекстного меню.

  • Clipboard to Phrase - настройка вставки из буфера обмена меню текста в текстовое поле фразы. Настройка изменяется в редакторе, но тут тоже присутствует.

  • Phrase Editing Mode - настройка позволяет при выборе фразы сразу же включать редактирование текста. Настройка изменяется в редакторе, но тут тоже присутствует.

Character Data Asset

Ассет, содержащий базу данных всех персонажей. Создать его можно, нажав ПКМ в контент браузере и выбрав Smart Dialogue->Character Data Asset

image

При открытии ассета откроется Characters Editor

Characters Editor

Редактор предназначен для создания, связывания и группировки по категориям сущностей персонажей, используемых в диалогах.

image

  1. Toolbar Panel - содержит кнопки создания категории (Add Category) и персонажа в выбранной категории (Add Character). Также располагается кнопка валидации данных (Validate), при нажатии на которую в Output Log выводятся ошибки (или All Ok)

  2. Categories - список всех категорий. При нажатии ПКМ в этой панели можно добавить или удалить категорию.

  3. Workspace - рабочая облась. Здесь отображаются все персонажи входящие в выбранную категорию.

DragDropCharacters

  • Перетаскиванием можно менять порядок персонажей в категории.

  • Можно сменить категорию персонажа, перетащив его на другой пункт списка категорий.

  • Нажав ПКМ по персонажу можно дублировать или удалить персонажа, а нажав ПКМ на пустую область можно добавить персонажа.

  • Кликнув левой кнопкой мыши три раза по заголовку категории, можно перреименовать категорию.

  1. Details - при выборе персонажа здесь отображаются его параметры.
  • Character Id - уникальный идентификатор персонажа (английскими буквами, без пробелов)

  • Character Name - имя персонажа (локализованный текст)

  • Character Icon - портрет персонажа

  • Name Color - цвет текста имени персонажа (используется в проигрывателе диалогов в редакторе)

  • Phrase Color - цвет фона фразы персонажа (используется в редакторе, цвет фона узлов фраз)

  • Variables - объект сета переменных персонажа (я позже уберу из области видимости этот параметр)

  • Character Asset - ACharacter ассет персонажа, используемого в игре.

Еще, рядом с вкладкой Details имеется вкладка Variables (о ней написано тут).

Public Vars Editor

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

image

  • Слева располагается список категорий. При нажатии ПКМ в этой панели можно добавить или удалить категорию.

  • Справа располагается список переменных категорий Variables (о ней написано ниже)

Variables

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

Если не создан сет переменных, то панель выглядит так:

image

При нажатии на кнопку Create Variables Set создается пустой сет переменных и становится активной кнопка Add Variable. Кнопка Remove Variables Set позволяет удалить сет переменных.

При нажатии на Add variable появляется диалоговое окно создания переменной

VariablesAdd-20231017-140213

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

После создания появляется новая запись в списке.

image

Здесь можно:

  1. Изменить тип переменной

  2. Изменить имя переменной

  3. Задать дефолтное значение переменной

  4. Удалить переменную из сета

Smart Dialogue (ассет)

Ассет, содержащий граф диалога. Создать его можно, нажав ПКМ в контент браузере и выбрав Smart Dialogue->Smart Dialogue

image

При открытии ассета откроется Smart Dialogue Editor

Smart Dialogue Editor

Редактор предназначен для создания диалоговых сценариев.

image

Редактор имеет несколько режимов (1):

  • EDITING - режим создания диалогов.

  • DEBUGGING - режим проигрывания и отладки диалогов.

  • SEQUENCE - режим для связывания катсцен с ветками диалогов.

Во всех режимах в редакторе отображается поле графа (2).

Graph

image

Выполнение узлов устроено типичным для блюпринтов способом, логика выполняется слева направо. У каждого узла есть один вход и может быть один или два выхода (или вообще не быть выходов).

Каждый тип узла имеет свою иконку. Имена узлов можно переименовать, если выделить узел и два раза клинкуть по заголовку (или нажать F2):

RenameNode

Группу узлов можно объединять блоком комментария:

CommentNodes

Нажатие кнопки Delete удаляет выделенные узлы.

Сочетание клавиш Ctrl+Z и Ctrl+Y отменяет или повторяетпоследнее действие.

Можно копировать, вырезать, дублировать выделенные узлы

При нажатии ПКМ по пустой области графа появляется список узлов, которые можно создать.

image

Список узлов графа диалога

Hub

image

  • От этого узла наследуются остальные узлы, кроме узлов Change Started, Jump To и Simple Event.

  • Выполнение этого узла и его наследников начинается со входа и продолжается на выходе.

  • Может иметь сколько угодно входов и сколько угодно выходов.

  • Может быть полезен для соединения нескольких веток диалога в одну точку, иногда как стартовый хаб. Но по большей части вы не будете его использовать.

  • При нажатии ПКМ можно выбрать пункт запуска выполнения диалога с выбранного узла

Branch

image

  • Основной узел для создания диалогов. В 90% случаев вы будете использовать его.

  • Содержит реплику для показа в списке выбора реплик игрока. В данном случае на скрине изображено два узла веток диалога. И при проигрывании диалога игроку покажется две реплики:

    • Первая фраза, отображаемая в списке выбора вариантов ответа.

    • Вторая фраза, отображаемая в списке выбора вариантов ответа.

  • При выборе реплики игроком проигрываются поочередно фразы. О них в разделе ниже.

  • Когда заканчивается проигрывание всех фраз, выполнение диалога переходит дальше на Next

  • При двойном клике в области фразы реплики, или при выбранном узле и наведении на фразу реплики нажатии на клавишу F2 включаеся режим редактирования реплики

  • Узел может содержать Level Sequence (о работе с секвенциями в рамках плагина можно почитать тут)

Phrase

image

  • Это subnode, поэтому она отсутствует в списке основных узлов. Может быть создана внутри узла Branch или его наследников.

  • При нажатии ПКМ по узлу Branch появляется меню, с помощью которого можно создать новую фразу. Здесь нужно выбрать персонажа, который ее говорит.

AddPhrase

  • Персонажи которые уже присутствовали в диалоге, отображаются в главном списке

image

  • При включенной опции режима EDITING тулбара Clipboard To Paste при создании новой фразы текст из буфера обмена записывается в текст узла фразы (подробнее в режиме EDITING)

  • При включенной опции режима EDITING тулбара Phrase editing mode при при выборе фразы сразу же включается редактирование текста (подробнее в режиме EDITING)

  • Можно перетаскивать узлы фраз между собой (менять порядок)

  • Можно копирывать Ctrl+C, вырезать Ctrl+X, вставлять Ctrl+V, дублировать Ctrl+D, удалять Del фразы.

One Phrase

image

  • Узел наследуется от Branch. Предназначен для проигрывания одной фразы.

  • В шапке узла имеется булевый переключатель (синяя или серая иконка).

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

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

Choice Hub

image

  • Этот узел служит для идентификации точки выбора. Те ветки которые соединены после этого узла, будут показываться в выборе.

  • Список сортируется в зависимости от Y позиции узла идущего после Choice Hub. Но есть нюанс. При получении списка веток сначала проверяется Index Proprity ветки, а потом уже Y позиция.

  • Узел также содержит Level Sequence для цикличной анимации

  • Содержит опцию Show One Answer при включении которой, если с узлом соединена одна валидная ветка, то она показывается в списке выбора. Если же булевая не включена то последняя ветка выполняется автоматически.

Jump To

image

  • У него нет выходного пина.

  • Узел позволяет перейти на другой узел, как если бы вы просто простроили связь от одного узла к другому. На изображении ниже в обоих случаях произойдет переход с ветки 0 на ветку 6:

image

  • при даблклике по узлу типа Jump To граф фокусится на целевом узле.

  • При нажатии ПКМ по узлу можно выбрать пункт очистки целевого узла.

Change Started

image

  • У этого узла тоже нет выходного пина, при даблклике ПКМ по узлу граф фокусится на целевом узле, при нажатии ПКМ по узлу можно выбрать пункт очистки целевого узла.

  • Узел позволяет задать стартовый узел типа Hub для запуска диалога с этого узла при следующем выполнении.

Instructions

image

  • С помощью этого узла можно менять значения переменным.

  • Также можно манипулировать состояниями квестов и предметов (об этом напишу отдельно).

  • В строке первый текстовый элемент - это имя переменной. Если в начале имени написано ключевое слово Private, то переменная относится к текущему диалогу. Если же в начале имени написан CharacterId персонажа, то переменная относится к персонажу. Также можно изменять публичные переменные (запись о них содержит имя категории)

  • После имени расположен выпадающий список операции. Для каждого типа есть свой список операций. При нажатии ЛКМ по этому полю появляется список, из которого можно выбрать нужное действие.

  • Третьим элементом строки расположено поле изменения значения.

  • Добавлять переменные в список можно нажатием ПКМ по этому узлу, далее в списке выбрать нужную переменную:

image

  • Удалять инструкцию изменения переменной можно предварительно выделив ее в списке и далее нажав на клавишу Del на клавиатуре.

Conditions

Conditions

  • С помощью этого узла можно задавать условия выполнения веток диалогов.

  • У узла, в отличие от остальных, имеется два выхода. Если условия не выполняются, то выполнение цепочки продолжается по соединению из выхода False.

  • Можно добавлять AND и OR условия. Все условия AND должны выполниться обязательно для перехода в выход Next. Одно из условий OR должно выполниться для перехода в выход Next.

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

  • В записи сначала пишется ключевое слово (IF, OR, AND), далее принадлежность и имя переменной, третим элементом условие сравнения (можно выбрать из списка, нажав на поле ЛКМ) и значение, с которым нужно сравнить.

  • При нажатии ПКМ по узлу появляется контекстное меню, из которого можно выбрать какую переменную добавить и какое условие ей задать (OR или AND)

  • Узел также работает с предметами и квестами (об этом напишу отдельно).

Режимы редактора

EDITING MODE

В этом режиме отображаются все вкладки для редактирования диалога. Также в этом режиме toolbar содержит кнопки для редактирования.

image

  1. Слот стартового хаба диалога (с этого хаба начнется выполнение диалога по умолчанию). Задать хаб можно перетаскиванием из списка узлов (пример будет ниже).

  2. Опция Clipboard to Phrase. Если она включена, то при создании фразы ее текст автоматически заполняется из буфера обмена. Удобно для заполнения диалога.

FromClipboard

  1. Опция Phrase editing mode. Если она включена, то при выбре узла фразы сразу же включается редактирование текста.

  2. Опция Export to String Table. Сохраняет текст в таблицу строк и текст нативного языка будет браться из таблицы. Также изменять текст на других языках можно только если нативный текст берется из таблиц. Таблица создается в папке StringTables в том же каталоге где ассет диалога. Имеет такое же имя как имя ассета диалога за исключением префикса.

Details

image

  • Здесь отображаются параметры выбранного узла. Иногда (например в случае с узлом блока комментария) они нужны, но в большинстве случаев работать в редаткоре можно без этой панели.

  • У всех узлов без исключения есть параметр Index Proprity. Он иногда полезен, когда нужно в списке выбора показать вариант не по Y позиции на графе. При получении списка веток сначала проверяется Index Proprity, а потом уже Y позиция.

  • У Branch, One Phrase и Choice Hub в списке свойств присутствует Level Sequence. Так то она заполняется при работе в режиме SEQUENCER, но в своствах можно изменить ассет.

Nodes List

image

  • Содержит список всех размещенных узлов на граф (кроме комментариев и фраз).

  • Можно искать по тексту нужный узел:

SearchNode

  • Можно сортировать список по расположению узлов. Автоматически пока не сортирует (возможно сделаю сортировку автоматически перед сохранением).

SortNodes

  • При выборе элемента списка граф фокусится на выбранном узле.

  • Перетаскиванием можно назначить цель узлам типа Jump To, Change Started, а так же можно назначить стартовый узел по умолчанию для текущего диалога.

DragDropListElement

Variables

image

  • Содержит список приватных переменных диалога.

  • В разделе выше Variables уже было описано, как раотать с переменными.

Items и Quests

  • в этих панелях распологаются списки предметов и квестов.

  • о работе с предметами и квестами напишу отдельно.

DEBUGGING MODE

Режим предназначен для проигрывания и отладки созданных диалоговых сценариев. В этом режиме отображаются две вкладки - Player и Debug Values.

Player

image

В верхней части имеется панель с кнопками:

  1. Play - при нажатии на эту кнопку стартует диалог, если задан стартовый хаб. Если диалог проигрывается, кнопка неактивна.

  2. Stop - останавливает выполнение диалога.

  3. Clean Messages - очищает поле сообщений. При этом команда не останавливает выполнение диалога и не очищает сохраненный прогресс по выполненным узлам.

  4. Clean Progress - очищает прогресс по переменным, квестам, предметам, выполненным узлам.

  5. Skip Phrases - пропускает фразы до развилки с выбором или до окончания диалога. Как будто бы вместо вас нажимает на кнопку Next.

  6. Following to playing node - показывает на графе, какой узел в данный момент проигрывается. Полезно для просмотра дальнейшей цепочки.

  7. Next - переключает проигрывание на следующую фразу. В этом же блоке отображаются варианты ответов, если перед игроком появляется выбор.

В центре панели распологается список с фразами и событиями диалога. При двойном клике по записи граф фокусится на узле, который к ней относится:

JumpToNode

Debug values

image

  • Панель содержит список всех переменных, предметов, квестов, которые участвуют в текущем диалоге.

  • Обновляется список при начале проигрывания.

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

  • Изменяются значения при выполнении инструкций

ChangeDebugValue

SEQUENCER MODE

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

  • Содержит всего одну вкладку Sequencer Tools

  • При выборе узла типа Branch или Choice Hub во вкладке появляется опция Make Level Sequence. Если же к узлу уже привязана какая то секвенция то появляются другие опции.

  • При нажатии на Make Level Sequence появляется диалоговое окно создания секвенции, где пользователю предлагается ввести имя. По умолчанию имя генерируется из имени диалога и из имени узла:

image

  • При нажатии на кнопку Make создается ассет в подпапке Seqences и привязывается созданная секвенция выделенному узлу.

  • Внимание! У важдой фразы ветки должно быть задано либо своство Duration, либо Voice Sound. Потому что в секвенции расставляются маркеры по длительности фраз. Если же не задана длительность то маркеры расставляются с учетом что каждая фраза длится секунду. Можно задать автоматически длительнсть фраз выбрав пункт Set Duration of Phrases, либо в поле Details для важдой фразы задать длительность вручную. Автоматически рассчитываются фразы, беря значения из настроек плагина, и умножая на количество символов в фразе:

image

  • Во вкладке Sequencer Tools, если узлу присвоена секвенция, отображаются следующие опции:

image

  • Edit Sequence in current Level - открывает редактирование секвенции для текущего открытого уровня.

image

  • Reset Markers - пересоздает маркеры с учетом новых длительностей фраз.

  • Remove Sequence - убирает связывание секвенции с веткой (очищает свойство Level Sequence) но не удаляет сам ассет.

Локализация

Я постарался сделать процесс локализации диалогов наглядгнее и проще. Подобно редактору виджетов, в моем редакторе имеется возможность включить превью просмотр языка. Но текст диалогов должен быть сохранен в String Table. Сохранить текст легко, достаточно нажати на кнопку Export to StringTable:

ExportToST

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

  • Также, если у вас добавляются новые фразы или ветки диалогов, то существующие записи не удаляются, но добавляются новые. Те же строки, которые были либо переименованы либо удалены, удаляются из таблицы, тем самым в ней не копится ненужный мусор.

  • При изменении нативного текста, он сразу же изменяется в таблице.

  • После того как создана таблица, нужно "собрать" все тексты, нужно добавить папку с StringTables в пути Localization Dashboard (открывается в меню Tools -> Localization Dashboard). Сдесь в массиве путей к пакетам добавьте либо путь к папке с диалогами (если папки таблиц со строками тоже лежат в этой папке), либо путь к папке с таблицами:

image

  • Соберите тексты проекта:

image

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

PreviewLocalization

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

Loc

После того как вы закончили вносить переведенный текст, снова соберите тексты проекта (1) и после завершения операции скомпилируйте текст (2):

image

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

PlayLoc

Запуск диалога в Blueprints

Запустить диалог очень просто. Достаточно вызвать метод Play подсистемы SmartDialogueSubsystem:

PlayDialogue