1.19 Release Notes
Release date: Q4 2023
CAUTION
This release is out of support and won't receive any new features or bug fixes. Consider upgrading to the latest stable or preview release as soon as possible.
Highlights
Compatibility
Supported Unity version range: 2019.4 - 2022.3. Only latest patches of the LTS streams in the range are supported; compatibility issues with newer Unity releases (once they reach LTS) will be addressed in the next Naninovel releases. Be aware, that alpha, beta and non-LTS releases (eg 2022.1 or 2022.2) are not supported. They may work, but we won't be able to provide any support for using Naninovel with them.
Recommended Unity version: 2019.4.40. It's not uncommon for Unity to introduce regressions even in LTS patches (let alone major releases), so we highly recommend using this version to minimize production risks.
Upgrade Guide
WARNING
This release has major breaking changes requiring potentially labor-heavy upgrade procedures, namely:
- All the custom UIs built with legacy uGUI text have to be upgraded to use TMPro text instead;
- All the scenario script localizations have to be redone from scratch;
- All the auto-voicing has to be re-mapped from scratch.
Consider the above when deciding whether to upgrade projects in late development stages and especially shipped projects. Complete upgrade guide can be found below.
When importing the package to a project with Naninovel version 1.17 or older first follow v1.18 release upgrade guide, then continue with the following instructions:
- Remove
Naninovelfolder from the project before importing the updated package. - In case using extension packages, update them: Live2D, Spine, Inventory, PlayMaker, AdventureCreator. Spreadsheet tool is now embedded to the core package, so if you have it installed, remove the folder with the tool.
- Due to removal of the legacy (uGUI) text components and text reveal revamp, you may have to re-setup various UI objects; eg: customized built-in UIs, text printers, font settings, etc.
- In case using line breaks via
\nin managed text values, replace them with<br>. - In case using expressions for generic line author (eg,
{mc}: Hi), use display name instead. (guide) - In case having existing tips managed text documents, either remove
Tipsfrom managed text config'sMultiline Categorieslist or format existing documents in multiline (same as script localization documents). - In case having existing script localization documents, delete and re-create them with the new system. (guide)
- In case having existing voice mappings via voice map utility, re-map the clips. (guide)
- To use new adapt to input mode feature, add
Page,Tab,Delete,NavigateX,NavigateY,ScrollYandToggleConsolebindings in input config with enabledAlways Processoption (actual action bindings are configured via Unity's input system actions asset); check input example project for reference setup. - In case using custom Title UI, enable
Visible on Awakeon the UI prefab to show it after engine is initialized. - In case using bridging (VS Code extension or web editor), install Newtonsoft Json via Unity's package manager. (the package is only used in editor and is not required by Naninovel runtime in builds)
- In case using custom commands and VS Code extension, purge cached metadata in VS Code by pressing
Ctrl+Shift+Pand selectingNaninovel: Purge cached Metadata.
Remember to keep NaninovelData folder when updating the engine to preserve project configuration and asset references. If an error about failing to load an asset is logged after the upgrade, restart Unity editor.
Be aware, that in-game saves (slots in save/load menu, values in settings menu and global game state) created with previous versions could cause unexpected behavior when loaded with the updated version; when patching a shipped project with a new Naninovel version, make sure existing saves work as expected.
In case using VS Code IDE extension, check for updates for both the Naninovel package and VS Code itself (only the latest version of VS Code is supported).
Don't forget to backup the project before upgrading or use a VCS.
Added
- Added adapt to input mode feature, which detects current active input mode (mouse and keyboard, gamepad or touch) and adapts the UI look and navigation accordingly. (guide)
- Default UI has been updated for more consistent look and better UX.
- Added utilities for automated end-to-end scenario testing and coverage. (guide)
- Added community localization feature. (guide)
- Added
Stable Identificationoption to script configuration menu; when enabled, Naninovel will automatically write unique persistent IDs to each localizable text parameter on script import. This allows preserving text association (eg, for localization or auto voicing) while editing text content. (guide) - Language is now switching faster and text is updated instantly in all the printers and UIs, including backlog.
- Added Character Extractor utility allowing to find all the unique text characters ever displayed to the player by Naninovel; useful for optimizing TMPro atlases, especially for CJK languages. (guide)
- Added
Render Cameraoption to layered actors allowing to render the prefab content with a camera, which lifts all the previous limitations (such as lacking stencil support) and allows rendering non-trivial objects, like particle systems, trails, etc. (guide) - Added
Render OnlyandDefault Appearanceoptions to layered behavior component allowing to outsource appearance handling to external mechanisms, such as Unity'sAnimator. (guide) - Added
Slack Opacityoption to revealable text; when below 1 will change opacity of the text that was printed before last append. - Added
Reveal Paginatorcomponent allowing to split the revealed text between virtual pages in case of overflow; enabled by default inFullscreenprinter. - Added event tags allowing to execute arbitrary actions when printed text is revealed. (guide)
- Added dedicated commands for all the built-in effects:
@blur,@bokeh,@glitch,@rain,@shake,@snow,@sun. - Added
Load On Gotooption to script player configuration; when enabled (default) will showILoadingUIwhen@gotocommand requires loading another script to mask the loading process with the loading screen. - Added
ColorContextandVectorContextparameter value context attributes. - Added
Engine.UseLoggermethod allowing to inject custom logger to be used by the engine. - Added clickable link to the script asset that is missing translation when using localization utility.
- Added
timeparameter to initialize engine method allowing to override time service used by Naninovel (eg, to make it use custom time/unscaledTime instead of Unity.Time values). - Added
Font Sizesasset (created viaCreate -> Naninovel -> Font Sizesasset context menu) assignable to font configuration of custom UIs and printers; can be used to share common font sizes across multiple UIs. - Added
Include Childrenoption to font change configuration; when enabled, font changes will affect all the text components of the children game objects. - Added
Reveal Instantlyoption to text printer metadata; when enabled, the printer will always show full message instantly, no matter speed settings. - Added
Languagesoption to localization configuration menu allowing to change pre-defined language tag -> display name mappings. - Added
Font Loaderoption to UI configuration allowing to modify loader behaviour for font assets. - Added
Debug Only Consoleoption to engine configuration; when enabled, development console will only be available in debug (development) builds. - Added concatenate operator for constant expressions of IDE metadata allowing to combine multiple constants; find usage examples in built-in
@charand@backcommands where the concatenation is used to combine shared with actor-specific poses. - Added check for duplicates when grag-dropping script assets to the resources list; the duplicates won't be added and warning will be logged.
- Added
resetAuthorparameter to@resetTextcommand allowing to also reset author of the text printer (disabled by default). - Added
Modal Groupoption to custom UI, which allows preventing UI from yielding modal status when another UI with the same group is made modal. When*is assigned, the UI will never yield modal status (useful for debug UIs that should always remain interactable). - Added
Player Resolve Modeoption in player configuration allowing to select how player should handle missing playback spots when loading state: find nearest playable line (next or previous), restart current script or throw an error. - IDE metadata for actor poses (both shared and actor-specific) is now generated providing auto-completion for VS Code and standalone editor.
- It's now possible to omit label when navigating to the currently played script with
@goto; the script will be played from the start in this case. - Text reveal effect now supports printer rotation.
- IDE extension now supports go to definition for navigation parameters (eg,
@gosubandgotoparameter in@choicecommand); by default, the action is activated withF12key when editing script or label navigation parameter or by holdingCtrlwhen hovering over the parameters. (example) - IDE extension now reports errors in all the project scripts, not only the opened ones; can be disabled in configuration.
- IDE extension now allows folding label regions.
Text IDauto voice mode (previouslyContent Hash) now support voice languages.- Spreadsheet tool is now embedded to the core package and doesn't modify source scripts on import. (guide)
- Legacy (old) input backend is no longer required when using new input system.
- Script import error now contains link to the associated script asset and line.
- Development console GUI will now scale up when screen resolution is above 1920x1080 for better UX on devices with small screens.
- Development console now has completion list of registered commands shown when starting typing a known command; shows all available command when input starts with a space. Pressing
Tabwill complete first command in the list. - Development console now support string parameters with whitespace (via wrapping them in double or single quotes).
- Development console will now persist input buffer (previously entered commands) between editor play sessions.
- It's now possible to escape author assign (
:) symbol in generic text lines, eg:author\: messagewill printauthor: messagewithout assigning author id to the printed message.
Changed
- Removed all the components that used legacy (uGUI) text; all the built-in UIs are now using TMPro text. Non-TMPro text printers have been removed; TMPro printers have been renamed, eg:
TMProWideis nowWide. - Revamped text reveal effect: instead of modifying text shaders the effect is now applied to text mesh via C# API, making it more robust and customizable (doesn't require setting custom material, works with all TMPro features, no font-specific masking issues, etc). (guide)
- Input indicator object is now expected to be part of the text printer prefab, external assets will no longer be automatically instantiated (use nested prefab instead).
- Removed
Load Start Delayoption from state configuration. The related operations will now asynchronously wait for loading UI to appear (in case the UI is available) before starting. - Character display names will now be fetched from managed text even when under source locale and will override values set in actor configuration.
Font Sizesproperty of font change configuration property is changed to asset reference to allow sharing font sizes between UIs.- Font assets are no longer assigned directly in UI configuration to prevent asset duplication when using addressables; path to font resource is expected instead.
- Removed
Clear On Locale Changeoption from built-in backlog UI; all the localizable text will now be updated for the target locale when changing language, so it's no longer required to clear it. - Default key frame delimiter of
@animatecommand is now,(comma); colon|is still supported for backward compatibility, but refrain from using it in new projects, as it may be removed in future release. - Script navigator UI prefab has been moved to default UIs and can be accessed and controlled in the same way as other UIs via
IScriptNavigatorUIinterface.Enable NavigatorandNavigator Orderoptions in scripts configuration have been removed; they can be controlled on the UI prefab directly.Show Navigator On Initoption has been renamed toShow Script Navigatorand will make the UI show and refresh automatically on initialization (disabled by default). - Line breaks in managed text document values should now be inserted with
<br>tags (\nis no longer supported). - Expressions in generic text line author segment are no longer supported; use display names instead.
- Default managed text document format for unlockable tips is changed to multiline (same as script localization documents); can be changed back to old inline format by removing
TipsfromMultiline Categorieslist in managed text configuration. - Script localization system has been revamped: localization documents are now
.txtinstead of.naniand contain only the localizable text, so it's no longer required to preserve inlined commands, script expressions, author names, etc. Content Hashauto voice mode renamed toText IDand is now the default; clips are no longer associated with script lines content hash, but with localizable text IDs.- Removed MP3 to Unity's audio clip converter and associated third-party lib from the distributed package (was used with local and google drive resource providers only); you can add back the converter by overriding provider manager service. (example)
- Spreadsheet tool is now exporting sheets in
.csvformat instead of.xlsx, contain only localizable text and doesn't modify source scripts on import. - Audio of video backgrounds is now routed to BGM audio mixer group; audio of video characters is routed to Voice group (previously both were routed to Master group). This can be changed by overriding
MixerGroupproperty of VideoActor class. - When using "Apply On Locale" font option, the font will now be changed back to default when changing to locale that doesn't have an associated font.
- All built-in UIs are now configured to be affected by font changes (font type only, size is still only applicable to text printers); can be changed per-UI via
Font Change Configurationoption. - "Toggle Console Key" option has been removed from engine configuration; it's now controlled via
ToggleConsoleinput binding. - Default font changed to Inter.
- "Show Title UI" option has been removed from engine configuration and instead Title UI now has "Visible On Awake" enabled. Any UI with the option enabled will now be shown after engine initialization.
- When generic line doesn't contain any text to print (via either plain text or inlined print commands), it will no longer wait for input after all the inlined commands are executed.
- Bridging (communication with VS Code extension and web editor) now requires Newtonsoft Json extension installed via Unity's package manager. The package is only used in editor and is not required by Naninovel runtime in builds.
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 VS Code extension not opening played lines of scripts stored in sub-folders.
- Fixed input events propagated to scene while typing in dev console when new input system is used.
Patches
2023-12-10Fixed error not logged when expression evaluation inifcommand parameter fails.2023-12-29Fixed warning not logged when unknown group is specified in layered expression.2024-01-25Fixed warning not logged when playing unknown voice.2024-02-10Fixed incorrect month formatting in game save slots.2024-02-25Fixed choice button not creating via assets context menu.2024-03-01Fixed script graph loosing state when saving and re-entering play mode twice.2024-03-01Fixed custom variables with unsupported names accepted w/o warning in the editor.2024-03-02Fixed error thrown when character message sound is not preloaded.2024-03-15Fixed text shader changed when changing font.2024-03-19Fixed built-in variable input UI missing pre-defined value changed handler.2024-03-21Fixed tips button on printer control panel incorrectly shown when display aspect ratio is changed.2024-03-21Fixed initialization script conflicting with title.2024-03-22Fixed title script played before engine is initialized.2024-03-27Fixed control panel of dialogue printer affected by font size change.2024-03-27Fixed movie played w/o sound after playing a movie which had no sound.2024-04-01Fixed UI selectables not cleared when re-enabling associated component.2024-04-01Fixed language dropdown UI not updating labels on locale switch.2024-04-01Fixed input indicator incorrect position when placed after quotes.2024-04-08Fixed backlog UI capacity not enforced correctly.2024-04-08Fixed consequent text reveal completed instantly when print requested while revealing.2024-04-12Fixed input trigger touches not detected correctly when using new input system.2024-04-15Fixed choice not added to backlog when the choice command is followed by stop and other choice command.2024-04-18Fixed settings menu bleeding exit input when gamepad scheme is active.2024-04-22Fixed voice continue playing on rollback and game load.2024-04-22Fixed preview printer ignoring min auto delay setting.2024-04-28Fixed CG gallery failing to show previously selected texture after changing page.2024-04-28Fixed malformed save files causing nullref on load.2024-05-01Fixed button label color tween being affected by time scale.2024-05-10Fixed text reveal fade effect with slack setting below 1.0 not cleared on text reset.2024-05-15Fixed author pose in generic line prefix recognized as appearance.2024-06-06Fixed global save corruption when clicking exit button multiple times.2024-06-29Fixed state of chat printer instances not discriminated.2024-07-14Fixed generic line serialization regression caused by2024-05-15patch.2024-07-24Fixed incorrect sprite actor appearance after loading a save while using a localized appearance resource.2024-08-01Fixed script preload progress callback not invoked with 1.0 when script has no preloadable commands.2024-08-10Fixed package root path not cached on consequent requests.2024-08-15Fixed leading inlined@charcommand interpreted as a prefix when serializing generic script lines.2024-08-22Fixed input events associated with continue input triggers propagating to the UIs shown with@showUIcommands when using legacy input.2024-08-24Fixed@playSfxFastunloads audio resource before it's played when it's the only command in a transient script.2024-09-22Fixed voice map utility error when target script has dynamic text values.2024-09-24Fixed settings not saved when exiting the menu with a gamepad.2024-09-24Fixed voice map utility ignores voiced lines containing dynamic values.2024-09-29Fixed inactive modal UIs handling input.