Використання (Runtime & Збірка)

Для викликів в рантаймі.

Перед кожною збіркою для релізу важливо експортувати всі дані бази даних для її оновлення!

Більшість компонентів Narrative Designer призначені для роботи з редактором і не включаються до збірки. Однак система підтримує перетворення всіх даних у компактний JSON-файл для подальшого використання під час виконання. Також можна отримати доступ до медіафайлів, що зберігаються в scriptable об'єктах, під час виконання.

Див. сцена Narative Demo → NarrativeDesignerRuntimeAPI → Run Usage Examples як приклад.

Базове Налаштування

  1. Додайте NarrativeDesignerRuntimeAPI.prefab на сцену з Narrative Designer Menu.

  2. Призначте посилання на Narrative Designer Menu на сцені в Menu.

  3. В Narrative Designer Menu, натисніть Save All Data as JSON, щоб зберегти всі системні дані у файл для читання під час виконання.

NarrativeDesignerRuntimeAPI

Коли компонент API підключено до меню та json-файлу, що містить поточні системні дані, з нього легко витягти будь-яку інформацію. Різні приклади використання доступні всередині методу NarrativeDesignerRuntimeAPI → ExampleUsage().

Runtime Використання (Script-частина)

Глобально це 2 речі: вибір подій та читання даних. Редагування даних ND в збірці не підтримується.

Вибір подій (Select Event)
Читання даних (з JSON & scriptable objects)

Дозволяє призначити Current Selected Event під час виконання зі збереженням між сеансами.

Дозволяє зчитувати будь-які дані з бази даних без їх зміни.

Після вибору поточна подія зберігається в окремий JSON-файл на пристрої гравця за допомогою SaveSelectedEventToFile(). На Start() поточна подія призначається з пам'яті за допомогою LoadCurrentSelectedEvent(). Поточна подія зберігається, доки не буде обрана інша. Використання поточної події є доцільним для керування маршрутами NPC, музикою, загалом як опорної точки для написання решти логіки.

Для вилучення базових типів даних (string, int, float), використовується JSON-файл з меню. Наприклад, для вилучення позицій точок на дошці поточної події.

Для вилучення медіаданих, таких як зображення або звуки, використовуються прямі посилання на scriptable об'єкти. Наприклад, для вилучення ілюстрації поточної події з бази даних або галереї персонажа з Character Brain.

У збірці використовуйте посилання типу NarrativeDesignerRuntimeAPI dataInserter; та викликайте методи з таблиці через нього. Наприклад:

   public class YourGameController : MonoBehaviour 
{
   public NarrativeDesignerRuntimeAPI dataInserter; // API reference
   
   void Start()
   {
       // Отримати основну інформацію про гру
       string gameTitle = dataInserter.GetGameTitle();
       
       // Вибрати подію за індексом та отримати її дані
       dataInserter.SelectEvent(3);
       string eventDescription = dataInserter.GetCurrentEventDescription();
       
       // Перевірити стан персонажа за іменем
       float playerState = dataInserter.GetCharacterCurrentState("Player");
       
       // Отримати медіа-ресурси
       List<AudioClip> sounds = dataInserter.GetSoundLibrary();
       Texture2D eventImage = dataInserter.GetCurrentEventIllustration();
   }
}

Runtime Використання (Event Selector-частина)

Система підтримує селектори, які дозволяють призначити одну або кілька подій для подальшого вибору незалежно від позицій на часовій шкалі (підхід на основі GUID). Усі операції з селекторами відбуваються в межах одного компонента.

Event Selector список

Приклади Викликів Методів

Вибір Події

Можливий двома способами: за порядковим номером у списку або за допомогою селектора, незалежно від порядку подій на часовій шкалі. EventSelector'и можна створювати в редакторі в тому ж компоненті NarrativeDesignerRuntimeAPI та отримувати до них доступ за назвою або послідовним індексом.

Приклад виклику методу
Опис
Джерело даних
Ідея використання

bool success = SelectEvent(eventIndex);

Вибрати подію за позицією на часовій шкалі

JSON file (Global Events Array)

Базувати історію на виборах гравця

var selector = GetSelectorByIndex(0);

Вибрати event selector за індексом

Component (Event Selectors List)

Організувати події за категоріями

var selector = GetSelectorByName("Event Selector 1");

Вибрати event selector за назвою

Component (Event Selectors List)

Організувати події за категоріями

bool success = SelectFirstFromSelector(selector);

Вибрати першу або єдину подію з selector

Component + JSON (Event Selector)

Базувати історію на виборах гравця

bool success = SelectRandomFromSelector(selector);

Вибрати випадкову подію з selector

Component + JSON (Event Selector)

Додати випадковості до зустрічей або подій

bool success = SelectBestEventForCharacter(selector, "Sorh");

Вибрати подію з найбільш позитивним впливом на персонажа

Component + JSON (Event Selector)

Вибирати події на основі переваг персонажа

ClearEventSelection();

Очистити вибір поточної події

Runtime State

Скидання до нейтрального стану або головного меню

bool hasEvent = HasSelectedEvent();

Перевірка, чи наразі вибрано якусь подію

Runtime State

Перевірка на наявність події

Читання Даних

Приклад
Опис
Джерело Даних
Ідея використання

string gameTitle = GetGameTitle();

Отримувати назву гри з глобального контексту

JSON file (Global Context)

Відображати назву гри в інтерфейсі або файлах збереження

int eventCount = GetEventCount();

Отримувати загальну кількість подій у базі даних

JSON file (Global Events Array)

Показувати прогрес або перевіряти індекси подій

List<AudioClip> allSounds = GetSoundLibrary();

Отримувати всі звуки з бібліотеки

Scriptable Object (Global Context)

Перемикати фонову музику залежно від сцени

List<Texture2D> allImages = GetDesignGallery();

Отримувати всі зображення з галереї

Scriptable Object (Global Context)

Створювати випадкові декорації середовища

Texture2D boardTexture = GetBoardBackgroundTexture();

Отримувати текстуру фону дошки

Scriptable Object (Character Database)

Встановлювати фон сцени для взаємодії персонажів

List<Texture2D> playerImages = GetCharacterImageGallery("Vitazis");

Отримувати зображення для конкретного персонажа

Scriptable Object (Character Brain)

Створювати портрети персонажів, вирази обличчя, налаштування

string relation = GetCharacterRelation("Player", "Sineid");

Отримувати стосунки між двома персонажами

JSON file (Character Relations)

Регулювати тон діалогу або розблоковувати спеціальні взаємодії

string description = GetCurrentEventDescription();

Отримувати опис поточної події

JSON file (Selected Event)

Відображати текст наративу події

Texture2D eventTexture = GetCurrentEventIllustration();

Отримувати зображення поточної події

Scriptable Object (Global Event)

Показувати ілюстрацію події в інтерфейсі

bool knows = DoesCharacterKnowCurrentEvent("Player");

Перевіряти, чи знає персонаж про поточну подію

JSON file (Character Memory)

Фільтрувати варіанти діалогу або реакції

float effect = GetCurrentEventCharacterStateChange("Player");

Отримувати числовий ефект персонажа від події

JSON file (Character Effects)

Обчислювати зміни репутації або стосунків

string impact = GetCurrentEventCharacterImpact("Player");

Отримувати текстовий опис впливу на персонажа

JSON file (Character Effects)

Показувати детальні наслідки у тексті

var eventData = GetCharacterEventData("Player");

Отримувати повні дані події персонажа

JSON file (Character State Events)

Отримувати доступ до станів до/після та деталей впливу

Vector2 boardPos = GetCharacterPositionOnEventBoard("Citrakis");

Отримувати позицію персонажа на дошці події

JSON file (Event Board Positions)

Розташовувати персонажів у тактичних або візуальних компонуваннях

Color boardColor = GetCharacterColorOnEventBoard("Citrakis");

Отримувати колір персонажа на дошці події

JSON file (Event Board Positions)

Позначати персонажів кольором за фракцією або статусом

float boardSize = GetCharacterSizeOnEventBoard("Citrakis");

Отримувати розмір персонажа на дошці події

JSON file (Event Board Positions)

Візуально масштабувати важливість або вплив персонажа

string closestCharacter = GetClosestCharacterOnBoard("Citrakis");

Знаходити найближчого персонажа на дошці

JSON file (Event Board Positions)

Запускати взаємодії на основі близькості

float distance = GetDistanceBetweenCharactersOnBoard("char1", "char2");

Обчислювати відстань між персонажами

JSON file (Event Board Positions)

Ігрові механіки на основі дальності

float playerState = GetCharacterCurrentState("Player");

Отримувати поточне значення стану персонажа

JSON file (Character State)

Умовний контент на основі стану персонажа

var affectedCharacters = GetCurrentEventAffectedCharacters();

Отримувати всіх персонажів, які постраждали від поточної події

JSON file (Character Effects)

Показувати групові наслідки або динаміку команди

List<string> charactersOnBoard = GetCharactersOnBoard();

Отримувати всіх персонажів, розташованих на поточній дошці

JSON file (Event Board Positions)

Ініціалізувати тактичні сценарії або соціальні сцени

bool isOnBoard = IsCharacterOnBoard("characterName");

Перевіряти, чи знаходиться персонаж на поточній дошці

JSON file (Event Board Positions)

Включати/виключати персонажів з механік дошки

List<string> nearby = GetCharactersNearby("Player", 0.3f);

Отримувати персонажів в межах відстані від цілі

JSON file (Event Board Positions)

Запускати події зони дії або розмови

Last updated