Naninovel ассет для Unity, позиционируемый как движок для создание визуальных новелл.
За своё недолгое (относительно других похожих решений) существование, он успел обзавестись фанатской базой и пройти не малый путь разработки. Каждая последующая версия - большая работа над исправлениями и новыми возможностями. А самое главное: Naninovel занимается наш соотечественник. Однако движок популярен и на зарубежном пространстве, в том числе за свою гибкость, одновременную простоту и глубину разработки и возможность отдельного использования встроенных компонентов.

Скоро автор обещает выпустить 1.20 версию, в которой будет много новых фич и не только.

В этой статье перевод и небольшой разбор чейнджлога.

Naninovel 1.20

Поддерживает Unity 2022.3.45 - 6. Рекомендованная - 2022.3.45.

ДОБАВЛЕНО:

  1. Локализация компилятора. Теперь скриптовый язык Nani можно переназначать. Будет полезно для сценаристов отличных от английского языков, кто мог бы испытывать проблемы с определёнными спец. символами при написании, или же проблемы со скоростью печати из-за необходимости менять раскладки для спец. символов сценарного языка Nani. [doc]

    В целом это можно использовать для более плавного перехода вашего сценариста из RenPy в Nani.

  2. Концепт вложенности. Теперь можно создавать вложенные блоки команд, появились команды @while, @delay, @await, @random, @group [doc]

  3. Добавлены boolean-флаги, как более короткий вариант.
    Вместо visible:false, теперь можно использовать !visible. [doc]

  4. Модификации @print через generic-параметры [doc]. Достигается командой <

    Первая часть предложения будет выведена с 50% скоростью, в то время как вторая с 250%:
    Lorem ipsum[< speed:0.5] dolor sit amet.[< speed:2.5]

  5. Пустая встроенная команда: [] [doc]

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

    @group
    Some text []
    [] continuation.[< join!]

  6. На смену статической и динамической политики ресурсов, добавлена консервативная и оптимистичная. Различия заключаются в использовании оперативной памяти, загрузочных экранах и ролбэках. [doc]

  1. Имена скриптовых файлов более не обязаны быть уникальными. Теперь на скрипты можно ссылаться по локальным путям:

     @goto Prologue/Day1

  2. Больше не требуется указывать сборки для кастомных типов.

  3. Nani теперь можно установить как UPM пакет.

  4. Live2D and Spine extension теперь являются частью Nani, так что более не потребуется устанавливать их отдельно.

  5. Улучшена инициализация движка за счёт кэширования.

    Стоит сделать пометку: движок Nani инициализируется некоторое время, в том числе подгружает сервисы и встроенные/пользовательские UI.

  6. Ресурсы сценариев теперь загружаются по требованию, а не заранее.

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

  7. Опция Label By Scripts, связанная с использованием ресурсов и оптимизации их загрузки. [doc]

  8. Прогресс чтения теперь не расходует излишние ресурсы, поскольку данные кешируются во время сборки. Опция Count Total Commands теперь включена по умолчанию.

  9. Добавлена опция @Remove Actors (используется по умолчанию автоматически), которая удаляет неиспользуемых актёров и связанные ресурсы при выгрузке ресурсов сценария. [doc]

    Актёром в nani называются такие участники сцены как персонажи и фоны.

    Полезная фича, так как раньше в определённых ситуациях нужно было убирать актёров самостоятельно, например при помощи @remove параметра некоторых команд.
    У меня такая потребность возникала в многослойных персонажах (с отдельной render камерой, учитывая особенности Unity и Nani) с кастомной реализацией моргания.

  10. Async Instantiation как дефолтная настройка инициализации движка, чтобы перенести нагрузку из основного потока.

  11. Generic, Live2D and Spine actors теперь поддерживают применение нескольких образов. [doc]

  12. Join Lines утилита, позволяющая хранить общие строки в одной строке [doc]

  13. Аннотации внутри документов по локализации теперь также включают суть переведенного контента [doc]

  14. В команду @choice добавлен параметр @lock, позволяющий заблокировать/отключить выбор. [doc]

    Соответственно один из многих вариантов использования: подвязать @lock к какой-либо переменной или предыдущим выборам.

  15. Auto Detect Locale опция для определения локали при первом запуске игры. [doc]

  16. Добавлено приглашение продолжить ввод для отображения нумерации страниц.

  17. Экземпляры многоуровневых префабов актеров теперь вложены в связанный игровой объект актера; это добавляет поддержку поведения, которое зависит от преобразования объекта, например освещения, интерактивных пятен и т. д.

    К слову, персонажи в Nani реализованы не через Sprite Renderer, а используют юнитовский Graphics.DrawMesh для рендера. Что помимо плюсов может нести и некоторые неудобства. Например, невозможность выставить sorting layer у персонажа, отличный от default, что привело в моём случае к перекрытию партиклов на generic-фоне.

  18. Опция Camera Mask, позволяющая указать дополнительные слои камеры, которые необходимо сохранить при рендеринге актера; используйте для поддержки функций рендеринга, для которых требуются специальные слои камеры, такие как 2D Light Unity.

  19. В конфигурацию персонажа добавлен параметр Has Name [doc]

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

  20. Добавлена возможность предоставить шрифт с локализацией сообщества (да, Nani поддерживает опцию локализации сообществом, вместо взлома). [doc]

  21. Добавлен Separator Literal во встроенный UI с подсказками. Позволяет изменять символ, используемый для разделения заголовка, категории и текста подсказки в управляемых текстовых записях.

  22. Добавлен Selected Prefix во встроенный UI с подсказками. Позволяет изменить префикс разблокируемого идентификатора, как указание того, что префикс был просмотрен хотя бы раз.

  23. TipsPanel.HasUnselectedItem() метод во встроенном UI с подсказками. Позволяет проверить содержит ли панель невыделенные элементы

  24. Добавлен Build Resources эдитор, чтобы создавать связанные с Nani сборки.

  25. Добавленlazy флаг к командам @char@back@camera@slide чтобы не завершать их в случае пропуска текста.

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

  26. Добавлен способ создания идентифицированных текстовых ссылок путем добавления & к идентификатору. [doc]

  27. Добавлена ​​возможность указать псевдоним и документацию для пользовательских expression функций.

  28. Параметры функции числового выражения больше не ограничиваются значением double

  29. Play SFX While Skipping опция для звуков. Отвечает за проигрыш звука при скипе.

  30. Добавлен as параметр в команду @print. Позволяет установить собственную метку имени; в сочетании с параметром author, теперь обрабатывает несколько авторов (разделенные знаком ,) [doc]

  31. Добавлен способ включения выражений сценария в документы локализации и принудительной повторной оценки при изменении локали. [doc]

  32. Добавлен корректный обработчик отсутствующих шрифтов: предупреждение регистрируется, и вместо выдачи исключения используется шрифт по умолчанию.

  33. Добавлен @block параметр в команду @movie, чтобы блокировать взаимодействие игрока во время воспроизведения видео, в том числе предотвратить пропуск.

  34. Добавлен SkipMovie input binding, привязанный к пропуску видео, (раньше за это отвечал Cancel бинд).

  35. Добавлена ​​отдельная команда @remove для удаления актеров. [doc]

    Раньше это был параметр к другим командам.

  36. Добавлено опция Support Custom Opacityдля эффекта исчезновения текста; при включении эффект будет учитывать теги <alpha> и ограничивать максимальную непрозрачность при полном раскрытии за счет некоторых затрат на производительность.

  37. Добавлен type параметр в команду @input указать тип значения вводимой переменной.

  38. Include Author To Backlog опция текстовых принтеров, позволяющая не включать автора в backlog (встроенный UI, хранящий историю сообщений). Выключено по умолчанию для Fullscreen-принтера.

  39. Scene Path Root опция в настройках бэкграунда,  позволяющая изменить корневой каталог ресурсов сцены, связанных с внешним видом актера. 

  40. Движок теперь имеет собственный парсер CSV и больше не зависит от сторонней библиотеки.

    К слову Nani вместо стандартного DOTween использует свою собственную реализацию.

  41. Некоторые улучшения для IDE (VS code)

Да, Нани обладает собственным расширением для VS code с подсветкой скриптового языка и кастомных команд. Также имеется web-версия для написания скриптов.

Комментарии (1)


  1. p4p
    26.10.2024 05:16

    То есть вместо того, чтобы презентовать ассет скриншотами из интерфейса и примерами использования, вы отправляете чейнджлог людям, которые впервые слышат об этом движке? Сильно хотелось рекламы, но было лень заморачиваться.