Створення редактора квестів і діалогів для Unreal engine: Частина 1 опис плагіна

image

Привіт мене звуть Дмитро. Я займаюся створенням комп'ютерних ігор Unreal Engine в якості хобі.

На певній стадії створення вашої гри, виникає необхідність написати діалоги та квести. На жаль Unreal engine не має вбудованого інструменту для вирішення цієї задачі. Тому я написав плагін для редагування квестів і діалогів. Як завжди всі вихідні матеріали будуть надані в кінці статті.

Я вирішив поділити статтю на дві частини у першій частині я опишу сам плагін та розповім як ним користуватися. А в другій частині я розповім про технічно аспекти.

Тому я перейду відразу до розповіді про плагіні. Для початку потрібно створити ассет StoryGraph. На панелі справа ви створюєте сюжетні об'єкти це можуть бути:

1)Quest — Це ваші квести після створення цього об'єкта з'являється можливість додати стартову ноду квесту(підтримується drag and drop) до якої можна вже прив'язувати фази квесту.

2) Character — Персонаж це об'єкт який містить всередині себе ще один граф, це редактор діалогів цього персонажа. Крім того, об'єкт персонаж має зовнішню посилання на об'єкт ACharecter_StoryGraph це похідний об'єкт від ACharecter. Персонаж має кілька станів це Alive (живий) і Dead (мертвий) ці стани можна вважати (про це далі). У ці стани його як-раз і перемикає ACharecter_StoryGraph. Персонаж може отримувати повідомлення від головного графа.

3) PlaceTrigger — Тригер це итерактивный об'єкт який можна зустріти на карті. Теж має зовнішні посилання на об'єкт APlaceTrigger_StoryGraph який є похідним від AActor. Тригер як і персонаж має всередині себе редактор повідомлень за рахунок якого можна з ним взаємодіяти.

Тригер має всього два стани активний і неактивний. Крім того він має кілька режимів роботи:

UnInteractive — Тригер неактивний а перемикання його станів ви повинні реалізувати самі за допомогою Blueprint функції ChangeState.

Interactive — Тригер активний, коли ви підходите до нього досить натиснути клавішу e і він перейде в Активний стан.

AdvanceInteractive — Коли ви підходите до неї і натискаєте e то відкривається вікно взаємодії з повідомленнями які визначені у редакторі повідомлень.

Також тригер як і персонаж може отримувати повідомлення від головного графа.

4) DialogTrigger — Об'єкт введений мною для взаємодії діалогів і повідомлень з головним графом. Теж маю два стану (Активний, неактивний). Перемикаються в редакторі діалогів персонажа та редакторі повідомлень тригера.

5) InventoryItem — Сюжетний предмет інвентарю. Може мати кілька станів котрі задаються властивості. Ці стани приблвляются до вже існуючих (неактивний, на рівні і в інвентарі). Стану змінюються поперше шляхом підбору предмета і крім того їх можна задавати в редакторі діалогів персонажа та редакторі повідомлень тригера як і стану DialogTrigger. Предмет інвентарю теж може отримувати повідомлення.

6) Others — Предмети, які не належать до вище перелічених але беруть участь в розвитку сюжету. Ці предмети не мають станів але можуть приймати повідомлення і в залежності від них зміняться.

Хочу зауважити, що завдяки тому що квестові об'єкти та об'єкти, які знаходяться на карті це різні об'єкти. То можна працювати паралельно. Наприклад, ви створюєте сюжет а ваш друг створює карту. І коли все буде готово можна їх об'єднати.

Після створення сюжетних предметів можна вже починати створювати квести. Тут треба уточнити що всі ноди поділяються на два види, це незалежні ноди які можна розміщувати коли захочеш, і залежні ноди які з'являться лише після створення об'єктів, які від них залежать. Крім того плагін підтримує технологію drag and drop тому якщо ви перетягніть об'єкт на полі графа то вам запропонують створити всі ноди які залежать від даного об'єкта.

Всі ноди мають два типи зв'язків це вертикальні зв'язки і горизонтальні. Вертикальне дерево це основа вашого квесту саме воно визначає його структура і порядок виконання. Горизонтальні ноди це модифікатори конкретної фази квесту (нода фази має як вертикальні, так і горизотальные зв'язку). Вони можуть додати якісь об'єкти на радар або відправити повідомлення об'єкту, все це станеться коли активується конкретна фаза квесту.

Отже давайте випробуємо щось створити. Спочатку створюємо квест. Після цього можна розмістити стартову ноду квесту. До цієї ноде можна прикріплювати ноди трьох видів:

1) AddQuestPhase — Нода додає в квест нову фазу коли активується.
2) GetObjectState — Ця нода активується коли конкретний сюжетний об'єкт переходить у конкретну стадію, зазначену у властивостях ноди. Якщо нода активувалася то вона активує ноди розташовані за нею. Представте собі трубопровід який бере початок від стартової ноди, тоді нода GetObjectState буде вентилем який до певного часу закритий і не пропускає воду далі але якщо він відкриється то вода далі піде.
3) GameOver — З назви зрозуміло що як тільки ця нода активується відбувається завершення гри.

Після того як ви створили «вертикальне» дерево. До нього можна додавати горизонтальні ноди ось їх опис:

1) Activate/deactivate dialog(message) — Активує або де активує гілка діалогу або повідомлення.
2) Active/deactive object — Активує або де активує об'єкт. Мається на увазі що при де активації, об'єкт просто пропаде з гри. Наприклад вам уже не потрібен якийсь об'єкт від нього можна позбутися, або навпаки об'єкт знадобиться на якомусь етапі гри і що-б персонаж не знайшов його раніше часу його теж можна де активувати.
3) Cancel quest — Скасувати квест, наприклад, якщо квести суперечать один одному і персонаж почав виконувати один з них інший можна скасувати.
4) Send Message — Надіслати повідомлення сюжетного предмету щоб він якось змінився. Сама зміна визначається Blueprinte у всіх зовнішніх об'єктів є event GetMessegeFromStoryGraph який спрацьовує при активації цієї ноди.
5) Add Screen Message — Вивести на екран повідомлення, яке побачить гравець.
6) Add to radar — об'єкт Додати на радар. Об'єкт буде виводиться на радарі до тих пір поки фаза квесту до якої прикріплена нода буде активна.
7) Print quest phase on screen — Вивести вміст конкретної фази квесту на екран. Може бути корисно ну наприклад на початку гри показати персонажу що ви від нього хочете.
8) Send message to level blueprint — Теж саме що Send Message але посилає повідомлення в blueprin рівня. Щоб ця нода заробила потрібно змінити базовий клас для level blueprint з ALevelScriptActor на ALevelScriptActor_StoryGraph.

Як поміняти базовий клас блюпринта:image

До речі щоб нові рівні створювалися з потрібним level blueprint можна змінити налаштування проекту: ProgectSettings → GeneralSettings → LevelScriptActorClass.

9) Print string — ця нода стоїть окремо, оскільки вона має як вертикальні зв'язки так і горизонтальні. Вона виводить експериментальне повідомлення щоб ви могли протестувати ваш сценарій.

Крім головного редактора в якому створюються квести, є ще й допоміжні. Це редактор діалогів для персонажа і редактор повідомлень для тригера. Ось опис нсд використовуються у цих редакторах. Оскільки вони подібні я наведу опис для них обох.

1) New dialog (message) brunch — Створити нову гілку діалогу або нове повідомлення. Кожен діалог повинен починатися з цієї ноди. Вона може бути активним і тоді ця гілка буде відображатися відразу або неактивна і тоді її потрібно буде з початку активувати.
2) Dialog (message) node — Ноди з яких складається гілка діалогу має один вхід і кілька виходів (в залежності від кількості відповідей).
3) Dialog (message) end — Якщо після того, як гілка діалогу пройшла до кінця вона більше не потрібна. Постав ті наприкінці цю ноду, гілка де активується і більше не з'явиться.
4) Dialog (message) exit — Здійснює вихід з вікна діалогу.
5) Set dialog trigger — Встановлює значення тригера діалогу.
6) Activate trigger — Нода присутній тільки в редакторі повідомлень тригера. Вона як можна здогадатися активує сам тригер.

Після того як все буде зроблено, ви запустите гру і нічого не станеться, що б сюжет почав працювати потрібно перетягнути об'єкт StoryGraph на рівень або скористатися відповідним пунктом контекстного меню.

Я хочу зауважити, що на рівні можна розмістити кілька різних об'єктів StoryGraph. Скажімо в одні помістити всі основні квести, а в іншій всі додаткові або навіть кожен квест помістити в окремий об'єкт.

У наступній статті я розповім про технічні аспекти, і про проблеми, які у мене виникли при створенні плагіна.

Друга частина:
Створення редактора квестів і діалогів для Unreal engine: Частина 2 технічні аспекти

Ось исходники

А якщо ви хочете просто пограти в демку (її сюжет можна бачити на першій картинці), то завантажити її тут.

Управління в грі стандартне:

i — інвентар
j -журнал
f — перемикання виду
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.