Search Unity

  1. Unity 2019.1 is now released.
    Dismiss Notice

[RELEASED] Modulo - Visual Scripting Framework

Discussion in 'Assets and Asset Store' started by Okaniku, Jul 25, 2018.

  1. Okaniku

    Okaniku

    Joined:
    Mar 8, 2018
    Posts:
    5

    Hi, we're Okaniku, a small team of developers brought together by our passion for games! We're proud to present the Modulo Visual Scripting Framework for Unity, which we are currently using in our own projects.

    Modulo provides a method of visual programming in Unity by building state machines using logic nodes. Rather than being 'yet another visual scripting tool' aimed at making games without code, Modulo is specifically designed to help programmers and designers collaborate. It provides a simple but powerful framework for programmers to script logical building blocks that designers can then configure, combine, and experiment with. It is an effective tool for constructing and visualizing the flow of complex logic trees, such as dialog trees or behavioural AI.


    Asset Store
    Official Website

    Online Documentation
    Contact Us

    Current version: 1.3
    Unity version: 2017.1.1 or higher

    Features:
    System:
    • A fully Unity-integrated editor is provided for editing visual scripts (called modules).
    • Each module contains a number of state machines which act similarly to methods/functions in programming.
    • Designers can define variables to pass around data within a module. These can be references to scene objects (via the built-in Persistent Object System).
    • A sophisticated execution model supports multiple coroutines of execution, and keeps track of state machine invocations on a context stack.
    • Transition conditions are state-machine nodes too, and these can be chained in AND/OR configurations to construct complex decision trees.
    • Debugging features: Set breakpoints, log messages to the console, automatically follow execution of a module, modify and watch variables during play mode.
    • Common usability features: zooming, panning, resizing of UI components, node grouping, copy/paste, tabs, annotations, undo/redo.
    • Nodes and groups can be color-coded.
    Scripting:
    • Creating new node types is simple and intuitive. A collection of base node classes are provided to hide the complexity of common use cases.
    • The system can be easily extended to support additional types of Modulo variables, including ones that act as references to objects in scenes.
    • Object allocation is kept to a minimum to avoid GC spikes.
    • Custom editor scripts are defined for nodes in the usual Unity way, meaning that how a node is configured is entirely up to the programmer.
    • A mechanism is provided for saving and loading the state of all module runners in a scene.
    • A robust mechanism is provided for checking modules for errors.
    • Get/set global variables, and run/pause module runners via scripting.
    • Module runners can be instantiated during runtime.
    Please check out the store page for screenshots.
    All questions and suggestions are welcome!
     
    Last edited: Oct 8, 2018
  2. Okaniku

    Okaniku

    Joined:
    Mar 8, 2018
    Posts:
    5
    A FREE evaluation version of Modulo is now available in the asset store! See the original post for a link.
     
  3. Okaniku

    Okaniku

    Joined:
    Mar 8, 2018
    Posts:
    5
    Version 1.3 has been released! This removes the need for the user to move the 'Editor Default Resources' folder to the root directory of the project, which means that no steps are required to manually set up Modulo for use.
     
  4. RemDust

    RemDust

    Joined:
    Aug 28, 2015
    Posts:
    263
    Hi guys !
    I've got a few questions about your framework (which seems really nice !)

    1/ Can you tell me more about the "Persistent Object System" ?
    2/ What classes type are the "modules" ?
    3/ Is the system working with Scriptable Objects or traditional monobehaviors ?

    I'm planning on testing the free version, I'll let you know how good it worked for me ;)
    Thank you !
     
  5. Okaniku

    Okaniku

    Joined:
    Mar 8, 2018
    Posts:
    5
    Hi there, thanks for your interest in Modulo! Looking forward to hearing your feedback on the free version, all comments and suggestions are greatly appreciated!

    To answer your questions:

    1) The Persistent Object System is a system included as part of the framework as a workaround for the limitation in Unity where references to scene objects cannot be stored within asset files. This limitation is an issue because modules are stored as Unity asset files. Modules could very well use a system similar to how a Playable Director binds gameobjects to Timeline tracks, and such a system is possible using a module's global variables, though for some cases it would be so much simpler to be able to refer to any specific object in a scene directly from a module. To do this you can simply add the Persistent Object component to any gameobject in the scene, and that gameobject will be automatically added to a database which is used by modules to look up the gameobject at runtime (assuming the scene containing it is loaded).

    Please see the following pages of the documentation for more information:
    https://www.modulo.okaniku.com/docs/v1.3/manual/systemGuide/persistentObjects.html
    https://www.modulo.okaniku.com/docs/v1.3/manual/scriptingGuide/persistentObjectReferences.html

    2) Modules are represented by the Module class in the Modulo namespace. Generally speaking, you shouldn't ever have to use this class directly from code since a module itself is kind of like a script file, and creating a module is handled by the editor. Modules are assigned to 'module runner' components which execute the module at runtime.

    3) Sorry but I'm not entirely sure I understand this question, but as stated in the reply to (2), modules are assigned to module runner components, which are monobehaviours that can be attached to a game object in the scene. Internally, a module is made up of a number of classes derived from ScriptableObject, including node types and variable types, which are the two main things that you'll be scripting as part of using Modulo.

    Hopefully this answers your questions adequately! If not, please get back to me.

    For more info, please check out the online docs:
    https://www.modulo.okaniku.com/docs/

    Cheers!