Naninovel – ассет для Unity, позиционируемый как движок для создание визуальных новелл.
За своё недолгое (относительно других похожих решений) существование, он успел обзавестись фанатской базой и пройти не малый путь разработки. Каждая последующая версия - большая работа над исправлениями и новыми возможностями. А самое главное: Naninovel занимается наш соотечественник. Однако движок популярен и на зарубежном пространстве, в том числе за свою гибкость, одновременную простоту и глубину разработки и возможность отдельного использования встроенных компонентов.
Скоро автор обещает выпустить 1.20 версию, в которой будет много новых фич и не только.
В этой статье перевод и небольшой разбор чейнджлога.
Naninovel 1.20
Поддерживает Unity 2022.3.45 - 6
. Рекомендованная - 2022.3.45
.
ДОБАВЛЕНО:
-
Локализация компилятора. Теперь скриптовый язык Nani можно переназначать. Будет полезно для сценаристов отличных от английского языков, кто мог бы испытывать проблемы с определёнными спец. символами при написании, или же проблемы со скоростью печати из-за необходимости менять раскладки для спец. символов сценарного языка Nani. [doc]
В целом это можно использовать для более плавного перехода вашего сценариста из RenPy в Nani.
-
Концепт вложенности. Теперь можно создавать вложенные блоки команд, появились команды
@while
,@delay
,@await
,@random
,@group
[doc]
-
Добавлены boolean-флаги, как более короткий вариант.
Вместоvisible:false
, теперь можно использовать!visible
. [doc] -
Модификации
@print
через generic-параметры [doc]. Достигается командой<
Первая часть предложения будет выведена с 50% скоростью, в то время как вторая с 250%:
Lorem ipsum[< speed:0.5] dolor sit amet.[< speed:2.5]
-
Пустая встроенная команда:
[]
[doc]Может пригодиться для явного указания где начинается и заканчивается фраза (например, если это не ясно из-за того, что начало и конец строки могут содержать пробелы).
@group
Some text []
[] continuation.[< join!]
-
На смену
статической
идинамической
политики ресурсов, добавленаконсервативная
иоптимистичная
. Различия заключаются в использовании оперативной памяти, загрузочных экранах и ролбэках. [doc]
-
Имена скриптовых файлов более не обязаны быть уникальными. Теперь на скрипты можно ссылаться по локальным путям:
@goto Prologue/Day1
-
Больше не требуется указывать сборки для кастомных типов.
-
Nani теперь можно установить как UPM пакет.
-
Live2D and Spine extension теперь являются частью Nani, так что более не потребуется устанавливать их отдельно.
-
Улучшена инициализация движка за счёт кэширования.
Стоит сделать пометку: движок Nani инициализируется некоторое время, в том числе подгружает сервисы и встроенные/пользовательские UI.
-
Ресурсы сценариев теперь загружаются по требованию, а не заранее.
Отличная фича, которую ждал уже давненько, потому как в случае, если сценарист не разбил сценарий на более мелкие скрипты, особо большие фрагменты сюжета могли подгружаться несколько дольше.
-
Опция
Label By Scripts
, связанная с использованием ресурсов и оптимизации их загрузки. [doc] -
Прогресс чтения теперь не расходует излишние ресурсы, поскольку данные кешируются во время сборки. Опция
Count Total Commands
теперь включена по умолчанию. -
Добавлена опция
@Remove Actors
(используется по умолчанию автоматически), которая удаляет неиспользуемых актёров и связанные ресурсы при выгрузке ресурсов сценария. [doc]Актёром в nani называются такие участники сцены как персонажи и фоны.
Полезная фича, так как раньше в определённых ситуациях нужно было убирать актёров самостоятельно, например при помощи
@remove
параметра некоторых команд.
У меня такая потребность возникала в многослойных персонажах (с отдельной render камерой, учитывая особенности Unity и Nani) с кастомной реализацией моргания. -
Async Instantiation
как дефолтная настройка инициализации движка, чтобы перенести нагрузку из основного потока. -
Generic, Live2D and Spine actors теперь поддерживают применение нескольких образов. [doc]
-
Join Lines
утилита, позволяющая хранить общие строки в одной строке [doc] -
Аннотации внутри документов по локализации теперь также включают суть переведенного контента [doc]
-
В команду
@choice
добавлен параметр@lock
, позволяющий заблокировать/отключить выбор. [doc]Соответственно один из многих вариантов использования: подвязать @lock к какой-либо переменной или предыдущим выборам.
-
Auto Detect Locale
опция для определения локали при первом запуске игры. [doc] -
Добавлено приглашение продолжить ввод для отображения нумерации страниц.
-
Экземпляры многоуровневых префабов актеров теперь вложены в связанный игровой объект актера; это добавляет поддержку поведения, которое зависит от преобразования объекта, например освещения, интерактивных пятен и т. д.
К слову, персонажи в Nani реализованы не через
Sprite Renderer
, а используют юнитовскийGraphics.DrawMesh
для рендера. Что помимо плюсов может нести и некоторые неудобства. Например, невозможность выставитьsorting layer
у персонажа, отличный отdefault
, что привело в моём случае к перекрытию партиклов на generic-фоне. -
Опция
Camera Mask
, позволяющая указать дополнительные слои камеры, которые необходимо сохранить при рендеринге актера; используйте для поддержки функций рендеринга, для которых требуются специальные слои камеры, такие как2D Light Unity
. -
В конфигурацию персонажа добавлен параметр
Has Name
[doc]Если этот параметр отключен, ни отображаемое имя, ни идентификатор актера не будут отображаться в пользовательском интерфейсе принтера. Полезно для персонажей типа диктора со связанными принтерами.
-
Добавлена возможность предоставить шрифт с локализацией сообщества (да, Nani поддерживает опцию локализации сообществом, вместо взлома). [doc]
-
Добавлен
Separator Literal
во встроенный UI с подсказками. Позволяет изменять символ, используемый для разделения заголовка, категории и текста подсказки в управляемых текстовых записях. -
Добавлен
Selected Prefix
во встроенный UI с подсказками. Позволяет изменить префикс разблокируемого идентификатора, как указание того, что префикс был просмотрен хотя бы раз. -
TipsPanel.HasUnselectedItem()
метод во встроенном UI с подсказками. Позволяет проверить содержит ли панель невыделенные элементы -
Добавлен
Build Resources
эдитор, чтобы создавать связанные с Nani сборки. -
Добавлен
lazy
флаг к командам@char
,@back
,@camera
,@slide
чтобы не завершать их в случае пропуска текста.Полезная фича, которую давно хотели увидеть. Поможет создавать более плавные, асинхронные анимации.
-
Добавлен способ создания идентифицированных текстовых ссылок путем добавления
&
к идентификатору. [doc] -
Добавлена возможность указать псевдоним и документацию для пользовательских
expression
функций. -
Параметры функции числового выражения больше не ограничиваются значением
double
-
Play SFX While Skipping
опция для звуков. Отвечает за проигрыш звука при скипе. -
Добавлен
as
параметр в команду@print
. Позволяет установить собственную метку имени; в сочетании с параметромauthor
, теперь обрабатывает несколько авторов (разделенные знаком,
) [doc] -
Добавлен способ включения выражений сценария в документы локализации и принудительной повторной оценки при изменении локали. [doc]
-
Добавлен корректный обработчик отсутствующих шрифтов: предупреждение регистрируется, и вместо выдачи исключения используется шрифт по умолчанию.
-
Добавлен
@block
параметр в команду@movie
, чтобы блокировать взаимодействие игрока во время воспроизведения видео, в том числе предотвратить пропуск. -
Добавлен
SkipMovie
input binding, привязанный к пропуску видео, (раньше за это отвечалCancel
бинд). -
Добавлена отдельная команда
@remove
для удаления актеров. [doc]Раньше это был параметр к другим командам.
-
Добавлено опция
Support Custom Opacity
для эффекта исчезновения текста; при включении эффект будет учитывать теги<alpha>
и ограничивать максимальную непрозрачность при полном раскрытии за счет некоторых затрат на производительность. -
Добавлен
type
параметр в команду@input
указать тип значения вводимой переменной. -
Include Author To Backlog
опция текстовых принтеров, позволяющая не включать автора вbacklog
(встроенный UI, хранящий историю сообщений). Выключено по умолчанию дляFullscreen
-принтера. -
Scene Path Root
опция в настройках бэкграунда, позволяющая изменить корневой каталог ресурсов сцены, связанных с внешним видом актера. -
Движок теперь имеет собственный парсер CSV и больше не зависит от сторонней библиотеки.
К слову Nani вместо стандартного
DOTween
использует свою собственную реализацию. -
Некоторые улучшения для IDE (VS code)
Да, Нани обладает собственным расширением для VS code с подсветкой скриптового языка и кастомных команд. Также имеется web-версия для написания скриптов.
Автор: Bicardine