my new dialogue system for Unity has just been approved by the Asset Store.
Here is a short synopsis of what it is:
Purpose:
Dialogical was created to be best-in-class, lightweight, intuitive, extensible, applicable to any kind of project - dialogue management solution for your game. Modern looking, polished and fast, this extension was just what you need if your game features complex branching dialogue between characters. From a visual novel to a complex RPG, we got you covered.
It wasnât designed to create the GUI for you, but to allow you to integrate it with any kind of GUI solution out there. It also wasnât designed to provide any kind of visual coding support, but to allow your code to plug in at the right places. This is in line with the general philosophy of extensibility and adaptability, and thus allows you to use any kind of complex logic or variable type. This dialogue system is totally abstracted from the UI implementation and your variables and logic - it just feeds data through events.
Features:
Intuitive Node System: quick, slick and polished.
Nodes have their text, audio, a set of responses and series of events that call your code in a specific way.
Native Multilanguage Support (no automatic translation).
âChoice Nodeâ that lets your code (or random choice) decide which node should go next.
Unique âMinimapâ node view for maximum convenience with large number of nodes.
Ability to hide options (your runtime code decides).
Specially designed Event System that allows you to not only call events on Dialogue steps, but call unique node-specific events for every option on every node. Those events allow you to do these things from your code side:
Access and set any type of variable, and not just base types.
Create any kind of logic, and later act on that logic with a Choice Node.
Not clutter the canvas with visual scripting or variables management.
Integrate Dialogical with any kind of Inventory and Quest System.
Ability to display your variables in dialogue text or options.
Timed Events to allow Automatic choosing of a certain option at a certain time.
Ability to go back in dialogue; multiple nodes can to lead to the same node.
Provided working Examples with detailed comments of:
Implementation of Old Unity GUI
Basic Scene: how it all works.
Basic Scene with events: where and how to call events.
Basic Scene Multilanguage
Choice Node Example
Portrait Switching Example for dialogue with multiple NPCs
Example showing Parameters from code.
Example with timed option auto-choice.
Example with choosing a random node with random delay (e.g. for ambient sounds).
Implementation with New Unity GUI
Basic Example.
Saves to Scriptable Object format, which is a standard âUnity wayâ and allows editing even in Play mode. Small asset footprint.
Automatic node resize for maximum visibility.
Dialogue Tree validation.
Unity Rich text support.
Automatic and manual Saving.
Works with all platforms, and both Unity Personal and Professional.
Full Source. Code is tidy and well commented (C#).
A detailed and comprehensive manual/tutorial.
New in v1.1:
Updated to work with unityserializer-ng, which allows saving dialogues mid-conversation if you are already using this solution to save your game.
How is it different and unique:
You can do anything you could do in any other kind of dialogue system, and more.
Native Multi-language interface (no auto translations).
Minimap view for super-quick navigation with large number of nodes.
Performs well.
Event based, and not variable based system your code plugs into. No visual scripting or variable management on the canvas. All logic is in your methods that plug in specific places.
GUI is provided only as examples. It is meant to plug into your unique GUI and not cookie-cutter anything. Examples with legacy GUI and New Unity GUI, and it would be possible to integrate it with any kind of GUI.
If you have any questions or issues, email me at dialogical[dot]help{at}ennoble-studios.com or post here.
This is another major release that is this time less focused on a single giant feature and more on a collection of medium and smaller features.
Added grayed out options, in addition to existing disabled options. See section âWorking with Node Options & Node Optionâs Eventsâ.
UnityLegacyGUIBasic script has been updated to support disabled options.
All the scripts previously used only for demonstration and test scenes have been separated to a namespace Dialogical.TestEventHandlers to minimize ânamespace pollutionâ. In addition, these test scripts have been renamed corresponding to their function.
Parameter sets no longer require casting in handler methods. See section âTechnique 4: Using Parameter Setsâ for details.
Added âSearch All Dialoguesâ menu option, see section with the same name for details.
Corrected a small bug where window wouldnât close if some other window was open.
Added âSearch the open dialogue treeâ option, see a separate section for details.
Added âOnce per conversationâ option parameter, see dialogue node options section for more info.
Slightly tweaked fonts and colors to further aid readability.
Added âLong range modeâ option, see section with the same name for details.
Added âReference Nodeâ, see section with same name for details.
Corrected bug where newer example scenes wouldnât load in some earlier versions of Unity.
The list is quite large, but most important points are:
Grayed out options, by user request, have been integrated. Previously grayed out options would be achieved by modifying source files, but this is no longer required. Now we support both disabled and grayed out options.
Search options. This is the feature I would personally want in an asset of this type and there are now 2 search options, both for a specific purpose and optimized so the navigation is very convenient.
âOnce per conversationâ node option parameter, something that would previously require considerable âhousekeepingâ on the user side has now been integrated as one click in the interface.
âLong range modeâ is something that users of especially large conversation trees will be able to appreciate. The connecting of even very distant nodes should now be very convenient and quick.
âReference Nodeâis the second most brilliant feature of Dialogical. It removes so much visual clutter and creates neat trees that always seem to flow from left to right.
Overall, I would like to impress upon you how much care and work goes into assets like this. You, as asset creator, have to test on various versions of Unity, consider what happens with every feature when play mode is entered/exited, Unity is closed, what happens when the project is built, how to handle existing configurations from previous versions where customers have projects in progress and want to minimize upgrade hassles with new versions, and never introduce any breaking changes. Overall itâs a lot of thought that mostly goes towards creating a respectable framework of high quality, while at the same time providing maximum flexibility for potential future features. Problems faced with every framework are faced here, all the way from interface button positions, to saved data at existing users, to existing variable names. There are inherent dilemmas when to introduce breaking changes for the sake of refactoring. Dialogical v1.3 does not introduce any such changes, in fact all the features âjust workâ with existing projects.
the localization is selected by a dropdown in the lower left corner, where there is also a language manager window. By changing the dropdown the all the text in the nodes changes to the selected language, also the audio clips. There is currently no .csv import/export.
The handling methods such as conditions and effects are the methods created by users, and the script(s) that contain them is attached to the same GO that has the dialogue script. There is no automatic code generation or anything like that. The method names are then pasted into the input field on the dialogue node and there are 2 ways to send parameters. In general the dialogue tree can be validated to prove the signatures match and other things. There are static properties that are set by users in the handling methods to signal specific effects, such as the node being disabled or grayed out or other things.
There is no scroll wheel zoom on the main window and none is planned for technical reasons. For this use case, minimap exists and it has zoom in/out, best fit option, and it is also possible to pan the view quickly by dragging the view box of the minimap. It is shown in a picture above.
No .csv, any plan?
Localization need to be entered in the graph or is there a text file asset thatâs generated as you fill in the boxes?
Regarding condition/effect, any example of how this is done?
The localization should be entered in the graph, the same way for all languages. The dropdown just selects which language is shown in the graph currently. The nodes and the view stay the same, just the text changes. The .csv option can be done, but it depends on the interest and number of licences. Feel free to PM me about this. Also, it takes 2 weeks at least for Unity to verify any change submitted to any asset.
There is an extensive manual, the same one with the package available here: http://ennoble-studios.com/sirgru/Dialogical/User Manual.pdf and the section Working with Node Options & Node Optionâs Events should be relevant. The procedure is generally something like this:
Attach the Dialogue script to a GO.
Create another script that will hold the event handlers for this conversation and attach it to the same GO.
Create the method that will handle the conversation event there. The signature will depend if there are parameters and this is explained in detail in the manual.
Paste the method name in the dialogue graph node and enter the parameters if required.
To make the dialogue option not shown, for example, set Dialogue.lastCheckPassed = false; in the handling method.