# Спецэффекты

Спецэффекты активируются с помощью команды @spawn, за которой следует имя эффекта. Например:

@spawn ShakeBackground

— вызовет тряску фонового изображения.

Вы можете контролировать параметры эффекта через параметр params. Например:

@spawn ShakeCharacter params:Kohaku,1

— встряхнёт персонажа с ID "Kohaku" один раз вместо стандартных 3.

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

@spawn ShakePrinter params:,,0.5

— обратите внимание, что первые два параметра (ID принтера и количество встряхиваний) пропущены и будут иметь значения по умолчанию, а третий параметр (длительность встряхивания) установлен на 0,5 секунды.

Вы можете обновить параметры эффекта, не перезапуская его, с помощью последовательных команд @spawn, например:

; Начать медленно трясти персонажа `Kohaku` зацикленно, 
; не дожидаясь окончания анимации (поскольку цикл бесконечен)
@spawn ShakeCharacter params:Kohaku,0,,,0.1 wait:false
Kohaku: It's rumbling!
; Встряхнуть ещё 3 раза с увеличенной амплитудой
@spawn ShakeCharacter params:Kohaku,3,,,0.8

Некоторые эффекты являются постоянными по умолчанию и должны быть остановлены вручную командой @despawn. Например:

; Начать дождь
@spawn Rain
; Остановить дождь
@despawn Rain

Команды @despawn некоторых эффектов также могут принимать параметры (например, для управления длительностью затухания), например:

; Остановить дождь постепенно в течение 10 секунд
@despawn Rain params:10

Если значения params не указаны, то будут использоваться параметры по умолчанию. Вы можете найти как параметры "start" (принимаемые командой @spawn), так и "stop" (принимаемые командой @despawn), доступные для каждого эффекта, а также их значения по умолчанию в приведенной ниже документации.

Можно запустить несколько эффектов одного и того же типа, добавив ID, отделенный символом # после имени эффекта, например:

; Встряхнуть обоих `Kohaku` и `Yuko` зацикленно
@spawn ShakeCharacter#1 params:Kohaku,0 wait:false
@spawn ShakeCharacter#2 params:Yuko,0 wait:false

При остановке или обновлении таких воспроизводимых эффектов не забудьте указать ID:

; Перестать трясти `Yuko`, увеличить амплитуду для `Kohaku`
@despawn ShakeCharacter#2
@spawn ShakeCharacter#1 params:k,0,,,1

Вы можете использовать любую строку для ID (это может быть число, как указано выше, или что-то более значимое, например @spawn ShakeCharacter#Kohaku), просто убедитесь, что она уникальна среди других ID, которые вы используете с данным эффектом.

# Shake Printer

Встряхивает принтер с указанным ID, или же принтер по умолчанию.

Стартовые параметры

Имя Тип По умолчанию Описание
Printer ID String null ID принтера для встряхивания. Встряхнет принтер по умолчанию, если не указано.
Shake count Integer 2 Количество итераций встряхивания. Если установлено значение 0 или меньше, то эффект будет зациклен до тех пор, пока не будет остановлен с помощью @despawn.
Shake duration Decimal 0.15 Базовая длительность каждой итерации встряхивания, в секундах.
Duration variation Decimal 0.25 Рандомизированный дельта-модификатор, применяемый к базовой длительности эффекта.
Shake amplitude Decimal 0.5 Базовая амплитуда смещения каждой итерации встряхивания, в юнитах.
Amplitude variation Decimal 0.1 Рандомизированный дельта-модификатор, применяемый к базовой амплитуде смещения эффекта.
Shake horizontally Boolean false Следует ли перемещать актора по горизонтали (по оси x).
Shake vertically Boolean true Следует ли перемещать актора вертикально (по оси y).

Имейте в виду, что когда UI настроен на режим "Screen Space Overlay", амплитуда встряхивания должна быть примерно в 100 раз больше, чем по умолчанию, для заметного эффекта.

Примеры

; Встряхнуть стандартный принтер с параметрами по умолчанию
@spawn ShakePrinter

; Встряхнуть стандартный принтер по горизонтали 10 раз 
@spawn ShakePrinter params:,10,,,,,true,false

; Начать трясти стандартный принтер зацикленно, вывести текст, остановить встряску
@spawn ShakePrinter params:,0 wait:false
What a shaky situation!
@despawn ShakePrinter

# Shake Background

Встряхивает фон с указанным ID, или же основной фон.

Стартовые параметры

Имя Тип По умолчанию Описание
Background ID String null ID фона для встряхивания. Встряхнет основной фон, если не указано.
Shake count Integer 3 Количество итераций встряхивания. Если установлено значение 0 или меньше, то эффект будет зациклен до тех пор, пока не будет остановлен с помощью @despawn.
Shake duration Decimal 0.15 Базовая длительность каждой итерации встряхивания, в секундах.
Duration variation Decimal 0.25 Рандомизированный дельта-модификатор, применяемый к базовой длительности эффекта.
Shake amplitude Decimal 0.5 Базовая амплитуда смещения каждой итерации встряхивания, в юнитах.
Amplitude variation Decimal 0.5 Рандомизированный дельта-модификатор, применяемый к базовой амплитуде смещения эффекта.
Shake horizontally Boolean false Следует ли перемещать актора по горизонтали (по оси x).
Shake vertically Boolean true Следует ли перемещать актора вертикально (по оси y).

Примеры

; Встряхнуть основной фон с параметрами по умолчанию
@spawn ShakeBackground

; Встряхнуть фон `Video` дважды 
@spawn ShakeBackground params:Video,2

# Shake Character

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

Стартовые параметры

Имя Тип По умолчанию Описание
Character ID String null ID персонажа для встряхивания. Встряхнет случайного видимого персонажа, если не указано.
Shake count Integer 3 Количество итераций встряхивания. Если установлено значение 0 или меньше, то эффект будет зациклен до тех пор, пока не будет остановлен с помощью @despawn.
Shake duration Decimal 0.15 Базовая длительность каждой итерации встряхивания, в секундах.
Duration variation Decimal 0.25 Рандомизированный дельта-модификатор, применяемый к базовой длительности эффекта.
Shake amplitude Decimal 0.5 Базовая амплитуда смещения каждой итерации встряхивания, в юнитах.
Amplitude variation Decimal 0.5 Рандомизированный дельта-модификатор, применяемый к базовой амплитуде смещения эффекта.
Shake horizontally Boolean false Следует ли перемещать актора по горизонтали (по оси x).
Shake vertically Boolean true Следует ли перемещать актора вертикально (по оси y).

Примеры

; Встряхнуть персонажа `Kohaku` с параметрами по умолчанию
@spawn ShakeCharacter params:Kohaku

; Начать трясти случайного персонажа, вывести выбор для остановки и действовать соответственно
@spawn ShakeCharacter params:,0
@choice "Continue shaking" goto:.Continue
@choice "Stop shaking" goto:.Stop
@stop
# Stop
@despawn ShakeCharacter
# Continue
...

# Shake Camera

Встряхивает основную камеру рендера Naninovel.

Стартовые параметры

Имя Тип По умолчанию Описание
Camera Name String null Имя камеры для встряхивания. Встряхнет основную камеру рендера Naninovel, если не указано.
Shake count Integer 3 Количество итераций встряхивания. Если установлено значение 0 или меньше, то эффект будет зациклен до тех пор, пока не будет остановлен с помощью @despawn.
Shake duration Decimal 0.15 Базовая длительность каждой итерации встряхивания, в секундах.
Duration variation Decimal 0.25 Рандомизированный дельта-модификатор, применяемый к базовой длительности эффекта.
Shake amplitude Decimal 0.5 Базовая амплитуда смещения каждой итерации встряхивания, в юнитах.
Amplitude variation Decimal 0.5 Рандомизированный дельта-модификатор, применяемый к базовой амплитуде смещения эффекта.
Shake horizontally Boolean false Следует ли перемещать актора по горизонтали (по оси x).
Shake vertically Boolean true Следует ли перемещать актора вертикально (по оси y).

Примеры

; Встряхнуть основную камеру Naninovel с параметрами по умолчанию
@spawn ShakeCamera

; Встряхнуть основную камеру Naninovel горизонтально 5 раз 
@spawn ShakeCamera params:,5,,,,,true,false

# Animate Actor

Если вы хотите изменить (анимировать) параметры актора напрямую, воспользуйтесь командой @animate.

# Digital Glitch

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

Стартовые параметры

Имя Тип По умолчанию Описание
Duration Decimal 1 Длительность эффекта, в секундах.
Intensity Decimal 1 Интенсивность эффекта в диапазоне от 0.0 до 10.0.

Примеры

; Применить эффект глитча с параметрами по умолчанию
@spawn DigitalGlitch
; Применять эффект в течение 3.33 секунд с низкой интенсивностью
@spawn DigitalGlitch params:3.33,0.1

# Rain

Создать систему частиц, имитирующую дождь.

Стартовые параметры

Имя Тип По умолчанию Описание
Intensity Decimal 500 Интенсивность дождя (количество частиц, появляющихся в секунду).
Fade-in time Decimal 5 Система частиц будет постепенно увеличивать скорость появления частиц от 0 до целевого уровня в течение указанного времени, в секундах.
X velocity Decimal 1 Множитель горизонтальной скорости частиц. Используйте для изменения угла наклона капель дождя.
Y velocity Decimal 1 Множитель вертикальной скорости частиц.

Параметры остановки

Имя Тип По умолчанию Описание
Fade-out time Decimal 5 Система частиц будет постепенно снижать скорость появления частиц с целевого уровня до 0 в течение указанного времени, в секундах.

Примеры

; Начать интенсивный дождь в течение 10 секунд
@spawn Rain params:1500,10
; Остановить дождь за 30 секунд
@despawn Rain params:30

# Snow

Создать систему частиц, имитирующую снег.

Стартовые параметры

Имя Тип По умолчанию Описание
Intensity Decimal 100 Интенсивность снега (количество частиц, появляющихся в секунду).
Fade-in time Decimal 5 Система частиц будет постепенно увеличивать скорость появления частиц от 0 до целевого уровня в течение указанного времени, в секундах..

Параметры остановки

Имя Тип По умолчанию Описание
Fade-out time Decimal 5 Система частиц будет постепенно снижать скорость появления частиц с целевого уровня до 0 в течение указанного времени, в секундах.

Примеры

; Начать интенсивный снег в течение 10 секунд
@spawn Snow params:300,10
; Остановить снег за 30 секунд
@despawn Snow params:30

# Sun Shafts

Создать систему частиц, имитирующую солнечные лучи.

Стартовые параметры

Имя Тип По умолчанию Описание
Intensity Decimal 0.85 Интенсивность лучей (непрозрачность).
Fade-in time Decimal 3 Система частиц будет постепенно увеличивать скорость появления частиц от 0 до целевого уровня в течение указанного времени, в секундах.

Параметры остановки

Имя Тип По умолчанию Описание
Fade-out time Decimal 3 Система частиц будет постепенно снижать скорость появления частиц с целевого уровня до 0 в течение указанного времени, в секундах.

Примеры

; Создать интенсивные солнечные лучи в течение 10 секунд
@spawn SunShafts params:1,10
; Остановить лучи за 30 секунд
@despawn SunShafts params:30

# Depth of Field (Bokeh)

Имитирует эффект глубины резкости (боке), при котором объект в фокусе остаётся чётким, в то время как остальное изображение размыто.

Стартовые параметры

Имя Тип По умолчанию Описание
Focus Object Name String null Имя игрового объекта для установки фокуса (необязательно). При установке фокус всегда будет оставаться на игровом объекте, а параметр Focus Distance будет проигнорирован.
Focus Distance Decimal 10 Расстояние от камеры Naninovel до точки фокусировки. Игнорируется, если указано Focus Object Name.
Focal Length Decimal 3.75 Величина размытия, применяемая для областей вне фокуса; также определяет чувствительность фокуса.
Duration Decimal 1 Время интерполяции (как быстро параметры достигнут целевых значений).

Параметры остановки

Имя Тип По умолчанию Описание
Stop Duration Decimal 1 Длительность затухания (отключения) для достижения параметрами эффекта значений по умолчанию, когда эффект не виден.

Примеры

; Включить эффект с параметрами по умолчанию и зафиксировать фокус на игровом объекте `Kohaku`
@spawn DepthOfField params:Kohaku
; Отключить эффект за 10 секунд
@despawn DepthOfField params:10
; Установить точку фокусировки на расстоянии 10 единиц от камеры,
; фокусное расстояние до 0,95 и включить эффект за 3 секунды
@spawn DepthOfField params:,10,0.95,3

# Добавление пользовательских эффектов

# Автономные эффекты

Вы можете добавить пользовательский автономный эффект (реализованный через префаб, как встроенные эффекты "Rain" и "Snow"), добавив префаб эффекта через менеджеры создания ресурсов (Naninovel -> Resources -> Spawn) и используя команды @spawn и @despawn таким же образом, как и со встроенными эффектами.

Например, для приведённого здесь префаба Explosion.prefab, назначенного менеджером, следующие команды будут создавать и уничтожать префаб в сцене:

@spawn Explosion
@despawn Explosion

Если у вас есть много префабов для выведения и их неудобно назначать через меню редактора, можно просто поместить их в папку Resources/Naninovel/Spawn, и они автоматически будут доступны в сценариях. Вы можете дополнительно организовать их с помощью подпапок, если хотите; в этом случае используйте косую черту ( / ) при ссылке на них в сценариях Naninovel. Например, ассет префаба, сохранённый как Resources/Naninovel/Spawn/Explosions/Boom01 может использоваться в сценариях как Explosions/Boom01.

Кроме того, можно использовать систему адресируемых ассетов для ручного предоставления ресурсов. Чтобы предоставить доступ к ассету, назначьте адрес, равный пути, который вы использовали бы для его предоставления с помощью описанного выше метода, за исключением опущенной части "Resources/". Например, чтобы предоставить ассет префаба "Boom01", назначьте ему следующий адрес: Naninovel/Spawn/Boom01. Имейте в виду, что адресируемый провайдер по умолчанию не используется в редакторе; вы можете включить его, включив свойство Enable Addressable In Editor в меню конфигурации провайдера ресурсов.

Используйте встроенные префабы эффектов, хранящиеся в Naninovel/Prefabs/FX, в качестве референсов для реализаций.

# Эффекты камеры

Если вы хотите применить пользовательский эффект пост-обработки (aka эффект изображения или фильтр камеры, как встроенный эффект "Digital Glitch") к камере Naninovel, создайте префаб камеры, добавьте нужные компоненты эффектов к объекту камеры и присвоить префаб полю Custom Camera Prefab в меню конфигурации камеры (Naninovel -> Configuration -> Camera).

Вы можете переключать (включать, если отключено, и наоборот) добавленные компоненты с помощью скриптов Naninovel, используя нараметр toggle, и явно устанавливать состояние с помощью параметра set команды @camera. Например, предположим, что вы добавили компонент "Bloom Image Effect" к объекту камеры. Во-первых, выясните, каково имя типа компонента; обычно оно указывается в поле Script компонента.

В нашем случае имя типа компонента — BloomImageEffect. Используйте имя типа для переключения этого компонента во время выполнения следующим образом:

@camera toggle:BloomImageEffect

Вы можете переключать несколько компонентов одновременно, разделяя имена типов запятыми:

@camera toggle:BloomImageEffect,Sepia,CameraNoise

И в случае, если вы хотите явно включить или отключить компонент:

@camera set:BloomImageEffect.true,Sepia.false,CameraNoise.true

— будут включены компоненты BloomImageEffect и CameraNoise компонентов, а так же отключен компонент Sepia.

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

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

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