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]Может пригодиться для явного указания где начинается и заканчивается фраза (например, если это не ясно из-за того, что начало и конец строки могут содержать пробелы).
@groupSome 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, чтобы блокировать взаимодействие игрока во время воспроизведения видео, в том числе предотвратить пропуск. -
Добавлен
SkipMovieinput 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
