Skip to content

1.21 Release Notes

Release date: Q4 2025 (ETA)

NOTE

This is a preview work-in-progress release, which may have breaking changes introduced at any time. Choose it if you're in the early development stages or need a specific feature unavailable in the stable release. Note that preview releases are not published on Unity's Asset Store and have to be installed from GitHub.

Compatibility

Supported Unity versions range: 6000.0.23 - 6000.1

Only LTS releases in the range are supported. Any issues with the future Unity releases will be addressed in the next Naninovel releases. Compatible Unity versions for past releases are specified in the release notes ↗.

Upgrade Guide

When upgrading a project with Naninovel version 1.18 or older first follow v1.19 release upgrade guide, then continue with the following instructions:

  1. Backup the project or use a VCS ↗ to be able to rollback in case something goes wrong.
  2. In case using VS Code extension, update both the extension and VS Code itself to the latest versions.
  3. Run upgrade script via Naninovel/Upgrade/v1.20 to v1.21 Unity editor menu.

WARNING

In-game saves (slots in save/load menu, values in settings menu and global game state) created with previous versions may cause issues when loaded with the updated version; when patching a shipped project with a new Naninovel version, make sure existing saves work as expected.

Added

  • Added relative and wildcard endpoint syntaxes allowing to simplify navigation paths. [doc]
  • Added lazy resource policy mode. [doc]
  • Added @unless command, which works as the logical inverse to @if.
  • Added default assignment operator ?= allowing to declare and assign variable only in case it's not already assigned. [doc]
  • Eased control flow exit requirements: @stop commands are no longer required to gracefully terminate control flow; also, it is now allowed for nested blocks to not have exit lines.
  • Added a dedicated "Keyboard" input mode with the associated control legend for better accessibility.
  • Printer character commands (Char Commands property of the Revealable Text Printer Panel component found on the printer prefabs) are now awaited allowing to use @wait commands to control the reveal process.
  • Text of Toast UI (@toast command) is now updated on locale change.
  • Added Expose Source Locale option to the localization configuration (enabled by default). When disabled, the source locale won't be available for the end-users (players). [doc]
  • Added loop parameter to @shake command allowing to enable/disable continuous shake effect instead of using count:0 and count:-1.
  • Added script reference helper, which simplifies referencing script assets in a stable manner. [doc]
  • Added LastGameState property to state manager providing access to the last de-/serialized game state.
  • Added filtering for locale-specific fonts so that they're not included to the font selection in game settings.
  • Improved nesting diagnostic in VS Code–it know indicates the extra indentation in the affected line and clearly states the reason for the warning.
  • Added an option to refresh script resource paths. [demo] ↗
  • Improved error when missing a localization document–it now points to the specific missing resource and locale.
  • Added VirtualResourceProvider option to the resource loaders configuration allowing to add resources at runtime.
  • Added [Command.Group] attribute allowing to assign a category to script command; used by standalone editor to group the commands and associate them with icons.
  • Improved hot reload stability and fixed several edge cases which caused inconsistent behavior.
  • Hot reload is now available at runtime via reload console command and IHotReload engine service.
  • Made most built-in UIs pixel-perfect to prevent pixel alignment issues when running outside of the native resolution.
  • @input command will now automatically pull predefined value in case the assigned variable already has a value.
  • @choice and @input commands no longer require adding @stop to halt script playback until the user interaction is committed. In case a playback halt is not required, use the added skip parameter.
  • Added condition context to lock parameter of @choice allowing to assign expression without wrapping the value in curly braces.
  • It's now possible to use boolean flags with parameters of the expression context.

Changed

  • Min. supported Unity version changed to 6.0.
  • Changed label delimiter from . to # to support the new relative endpoint syntax; use Naninovel/Upgrade/v1.20 to v1.21 tool in Unity editor menu to automatically upgrade the scripts.
  • Layered actors no longer attempt to align an underlying game object with the render texture, as that was causing rendering issues. Perfect alignment is not possible anyway due to render effects, such as look direction flipping. When the alignment is required, use generic or custom implementations.
  • Command attribute [Command.CommandAlias] renamed to [Command.Alias], parameter attribute [Command.PrameterAlias] removed—use [Command.Alias] instead.
  • Removed Google Drive resource provider; use Local Provider pointing to a directory synced with Google Drive (or other similar services) instead.
  • @input and @choice commands will now auto-halt the playback, so you no longer have to add @stop after them. For backward compatibility @stop after the commands is a no-op. play parameter in the commands is replaced with skip to allow disabling the auto-halt.
  • Changed the type of lock parameter of @choice to string with condition context to allow assigning expression without wrapping the value in curly braces.

Fixed

Most fixes associated with bugs found during the pre-release stage are backported to the previous stable release and are not listed here; find them at the "Patches" section of the previous release changelog.

  • Fixed ICustomVariableManager.OnVariableUpdated event not invoked on game load and rollback.
  • Fixed parameter values without whitespace has wrapping quotes removed when formatting with VS Code or with stable identifier in Unity.
  • Fixed layered actors clipping when scaled and the local position is not balanced.
  • Fixed warnings on hot reload after editing a line before the currently played one.
  • Fixed video resources failing to load in WebGL build when addressable system is not installed.
  • Fixed video resources duplicated in WebGL build when addressable system is installed.