# Пользовательские переменные

Функция пользовательских переменных позволяет создавать специализированные переменные, изменять и использовать их для управления условным выполнением сценариев Naninovel или других систем. Например, пользовательские переменные могут использоваться для выбора одного из нескольких сценариев Naninovel для воспроизведения (руты сценариев), основанных на решениях, принятых игроком в прошлом. Другой часто используемый сценарий – это экран статистики игрока (например, результаты, деньги, ресурсы и т.д.), основанный на выборах, которые игрок совершает на протяжении всей игры.

Пользовательские переменные могут быть созданы, изменены и использованы в сценариях Naninovel через команды @set и @if команды и в скриптах C# с помощью сервиса движка ICustomVariableManager.

Например, следующая команда сценария присвоит пользовательской переменной score значение в зависимости от выбора игрока:

@choice "I'm humble, one is enough..." set:score=1
@choice "Two, please." set:score=2
@choice "I'll take your entire stock!" set:score=999

А следующая будет перенаправлять выполнение сценария на основе значения переменной score:

@goto MainRoute if:"score > 1 && score <= 900"
@goto BadEnd if:score>900

Дополнительные примеры см. в справочнике API по командам @set и @if.

Все пользовательские переменные автоматически сохраняются вместе с игрой. По умолчанию переменные хранятся в локальной области. Это означает, что если вы назначите какую–то переменную в ходе игрового процесса, а после игрок начнет новую игру или загрузит другой сохраненный игровой слот, где эта переменная не была назначена – значение будет потеряно. Это используется для большинства типов переменных. Однако если вы хотите сохранить переменную в глобальной области, добавьте к ее имени G_ или g_, например: G_FinishedMainRoute или g_total_score. Глобальные переменные могут использоваться для указания некоторой общей информации, например, количества раз, когда игрок закончил какой-то рут, или общего счёта, основанного на всех прохождениях игры.

Вы можете установить предварительно определенные пользовательские переменные (как глобальные, так и локальные) с начальными значениями в меню конфигурации "Custom Variables".

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

# Внедрение переменных

Можно внедрить (встроить) пользовательскую переменную в значения параметров сценария Naninovel, используя фигурные скобки.

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

; Разрешить пользователю ввести произвольный текст и назначить его пользовательской переменной состояния `name`.
@input name summary:"Choose your name."
; Команда Stop необходима для остановки выполнения скрипта до тех пор, пока пользователь не отправит вводимые данные.
@stop

; Теперь можно ввести назначенную переменную `name` в сценарии Naninovel…
Archibald: Greetings, {name}!
{name}: Yo!

; … или используйте её внутри набора и условных выражений.
@set score=score+1 if:name=="Felix"

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

@set PlayerName="Felix";PlayerYPosition=0.1;PlayerTint="lightblue"

; Следующее выражение вызовет ошибку, так как `PlayerTint` не является числом…
@char {PlayerName} pos:50,{PlayerTint} 

; … а это будет выполнено корректно..
@char {PlayerName} pos:50,{PlayerYPosition} tint:{PlayerTint}

# Переменные триггеры

При создании пользовательского интерфейса или других систем вам может потребоваться реагирование событий на изменения значений переменных. Например, при построении экрана статистики персонажей вы хотите, чтобы текст изменялся вслед за переменными. Хотя обычным способом реализации такого поведения было бы использование скрипта C#, вы также можете использовать компонент Custom Variable Trigger. Компонент будет вызывать события Unity при изменении переменной с указанным именем. Вы можете связать совместимые команды с определёнными событиями, такими как обновление текстовых значений.

# Отладка переменных

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

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

При изменении значения переменной в списке появится кнопка "SET", которую можно нажать, чтобы применить изменения.

Список переменных автоматически обновляется при изменении пользовательских переменных во время воспроизведения.

Обновлено: October 5, 2020