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:
- Backup the project or use a VCS to be able to rollback in case something goes wrong.
- In case using VS Code extension, update both the extension and VS Code itself to the latest versions.
- 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 theRevealable 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 usingcount:0
andcount:-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 andIHotReload
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 addedskip
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; useNaninovel/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 withskip
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.