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

Див. сцена Narative Demo → NarrativeDesignerRuntimeAPI → Run Usage Examples як приклад.
Базове Налаштування
Додайте NarrativeDesignerRuntimeAPI.prefab на сцену з Narrative Designer Menu.
Призначте посилання на Narrative Designer Menu на сцені в Menu.
В Narrative Designer Menu, натисніть Save All Data as JSON, щоб зберегти всі системні дані у файл для читання під час виконання.

Коли компонент API підключено до меню та json-файлу, що містить поточні системні дані, з нього легко витягти будь-яку інформацію. Різні приклади використання доступні всередині методу NarrativeDesignerRuntimeAPI → ExampleUsage().
Runtime Використання (Script-частина)
Глобально це 2 речі: вибір подій та читання даних. Редагування даних ND в збірці не підтримується.
Дозволяє призначити 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). Усі операції з селекторами відбуваються в межах одного компонента.

Приклади Викликів Методів
Вибір Події
Можливий двома способами: за порядковим номером у списку або за допомогою селектора, незалежно від порядку подій на часовій шкалі. 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