FlowCanvas - Visual Scripting Similar to Unreal Blueprints

Hey,
Yes, I have seen it of course, but Im not trying to copy paste it’s GUI, thus any more specific feedback would be great :slight_smile:

Cheers Steve.

You are welcome. Yes the Conditional Event node gives some flexibility indeed and as you stated, with just a simple value connected there is really not much of a drop.

If anyone comes up with node ideas, I will be more than happy to add them.

Hey,
The price right now and until early access period ends, is 50$ which is 40% off the final.
I think thats a very fair price :slight_smile:

Cheers!

Hey :slight_smile:
In this first release no, but very soon after, I will provide integration nodes for example to use a FlowScript as an FSM State, in the usual inline “nested” fashion. I am just holding of a while, for FC to become a bit more mature after people’s feedback, which I am very eager to hear, before expanding in further directions.

Cheers!

Hey,
Thanks for your interest. Like Elecman stated, it’s sumbited and pending review right now. It’s not yet live on the asset store. You don’t need NodeCanvas, no. It’s a standalone asset :slight_smile:

Thanks.

Hello,

In this first release there are no samples included. I will add some samples later on though for sure :slight_smile:
Cheers!

Very cool asset and idea.

Is the run time feature working only when in the editor? Reason for asking is that I’m interested to create the nodes in game.

damage, though it would be useful.

I sense a roadblock Nuvi!

How goes it? :smile:

-Steven

Hey, Thanks :slight_smile:
Visual editing nodes is only possible in the Unity editor, since the editor is using a lot of unity’s editor only classes.
Is that what you are asking?

Thanks.

Hey,
I know. I will certainly add examples later on :slight_smile:

Hey Steve!
It’s been submited for about 8 days now and pending. It usualy takes as much for new assets to apear rather than updates :slight_smile:

Cheers!

Has it only been 8 days? Okay never mind! :smile:

Thanks man

-Steven

Hiho.

FlowCanvas is available in the asset store - yeah. Purchased & downloaded. After importation I got several errors which are more or less related as I have NodeCanvas already installed:

Assets/NodeCanvas/Framework/_ParadoxNotion (shared)/Design/Attributes.cs(46,22): error CS0101: The namespace ParadoxNotion.Design' already contains a definition for LayerFieldAttribute’

Using Unity 5.0.1p2. Are Flow & Node currently not play nicely together or do I have to set something?

Thx

Just curious, what are the pros/cons of NodeCanvas vs FlowCanvas?

Would you use them together? How would you propose interacting them?

Hey,

Yeah just saw it is now online :slight_smile:
Thanks a lot for the purchase.
If you have NodeCanvas in the project, simply delete the folder “Framework” from within the “FlowCanvas” folder or from within the NodeCanvas folder. Within, the same scripts exist, which are the core node framework.

Thanks!

Hey there,

There are not really pros and cons between these two, since they are totaly different tools for different tasks :slight_smile:
NodeCanvas contains Behaviour Trees, FSMs and Dialogue Trees systems.
FlowCanvas contains FlowScripts system.

In the very near future I will add integration nodes between one another.
Once again, they are quite different systems :slight_smile:

Thanks!

Bought :slight_smile:

Hey, Thanks a lot!

Is the full documentation available somewhere or is it just the quick start guide for now?

Hey,

I am writing more extensive documentation which will be available online soon. I need to make some website changes and “house” all assets in a common place.
Meanwhile, by all means please do ask any questions you may have here and I will be more than glad to answer them :slight_smile:

Thanks!

Starting to test it :slight_smile:

Short question: In the quickstart there are displayed for e.g. a value for a value box or for example ‘Cube’ in the box for transform on page 9. How can I get those displayed? I don’t see them (the big yellow identifiers)?

Using 5.0.1p2 personal.

Thx

Looks cool. I really enjoyed Unreal’s blueprint system, though it was largely because I didn’t want to pick up C++. I do know C# well and don’t really have issues with scripting, but I am interested in visual scripting for prototyping, or for when it seems like a good fit.

Does FlowCanvas work well when combined with scripting? By this, I do not necessarily mean writing custom nodes, but more like mixing components together. For example, having my character motor component in plain C#, and having my player’s attack logic done in FlowCanvas. The attacking may want to interact with the motor, say to slow movement down. Would this be done via the reflection aspect? Would I write a custom node that calls the motor?

Thanks!

Next question I have:

Are there any actions available to search for childrens of an GameObject and return all of those childrens - or one by one?

Are there any actions available to get / remove / insert / add values for Lists?

Another question with regards to reflections:
How can I access and change for example the text of an NGUI Label in the scene?
How can I access and change a target transform of the AIPathAgent of the A*Pathfinder?
Under reflections I can’t find those 3rd Party frameworks.

Maybe I need to get a hang on the structure and flow coming from UScript :slight_smile:

Thx in advance
Wyl

Hey :slight_smile:

These nodes with the big identifiers, are variable nodes. If you add a variable node “Variables/GraphVariable(T)/” the value of the variable will show in the node. You can also drag and drop an object reference to create a variable for an object. Can you please confirm that?

Thanks!

Hello and thanks,

Yes, this can be done :slight_smile:
Generaly speaking, if you want to interact from the flowscript with a component, this can be done by calling or getting/setting some of the components methods and properties via reflection nodes. Now, reflection is not simply an Invoke. It’s heavily optimized and fast in runtime. Alternatively, you can of course write custom nodes if you want, but doing this via reflection nodes is great as well. I would personaly write a custom node only if it’s something more than simply a function call or a property get/set.

Now if you want to interact from your script with the flowscript, the most prominent ways would be to either send the flowscript an event, or get/set some of it’s variables.
Furthermore, there is a “Code Event” event node, which can subscribe to a c# event on one of your monobehaviours on the game object.

I am definetely looking for more “interaction” ways for the future. All suggestions are very welcome :slight_smile:
If you have any other questions or need some clarifications on the subjects above, please let me know.

Cheers!

Hey,

You can use the “For Each” node with a Transform value to iterate the transform’s children.
(This is possible because Transform is an IEnumerable)

2093740--137003--Foreach Transform.png

Regarding lists, I have negleted adding specific actions for them, but you can certainly use reflection to do that. By dragging any value output port in the canvas, the context menu poped-up will first show a category for the reflected methods and properties of the type you draged. So in the case of the list, you will get a category including all methods/properties of type List<> like in the image. Within that category, Add, Remove, RemoveAt, Count etc will exist.

2093740--137004--ListContext.png

But, to make this more streamlined, here are a couple of nodes List related.
List Nodes

using System.Collections;
using System.Collections.Generic;
using ParadoxNotion.Design;

namespace FlowCanvas.Nodes{

    [Category("Actions/Lists")]
    public class ClearList : CallableFunctionNode<IList, IList>{
        public override IList Invoke(IList list){
            list.Clear();
            return list;
        }
    }

    [Category("Actions/Lists")]
    public class AddListItem<T> : CallableFunctionNode<List<T>, List<T>, T>{
        public override List<T> Invoke(List<T> list, T item){
            list.Add(item);
            return list;
        }
    }

    [Category("Actions/Lists")]
    public class InsertListItem<T> : CallableFunctionNode<List<T>, List<T>, int, T>{
        public override List<T> Invoke(List<T> list, int index, T item){
            list.Insert(index, item);
            return list;
        }
    }

    [Category("Actions/Lists")]
    public class RemoveListItem<T> : CallableFunctionNode<List<T>, List<T>, T>{
        public override List<T> Invoke(List<T> list, T item){
            list.Remove(item);
            return list;
        }
    }

    [Category("Actions/Lists")]
    public class RemoveListItemAt<T> : CallableFunctionNode<List<T>, List<T>, int>{
        public override List<T> Invoke(List<T> list, int index){
            list.RemoveAt(index);
            return list;
        }
    }

    [Category("Functions/Lists")]
    public class GetListItem<T> : PureFunctionNode<T, List<T>, int>{
        public override T Invoke(List<T> list, int index){
            try {return list[index];}
            catch {return default(T);}
        }
    }

    [Category("Actions/Lists")]
    public class SetListItem<T> : CallableFunctionNode<List<T>, List<T>, int, T>{
        public override List<T> Invoke(List<T> list, int index, T item){
            try { list[index] = item; return list; }
            catch { return default(List<T>); }
        }
    }
}

You can put this code into a new .cs file and they will apear in the menu.
2093740--137007--ListNodes.png

Regarding reflection. To keep the menu of available nodes cleaner, instead of showing nodes for every single type in there, only the most common ones are shown. But this does not stop you from using other types of course :slight_smile:

You can drag and drop a component from the inspector into the editor canvas and it will pop a menu where you are able to either add it as a variable, or of course call get/set some of it’s functions or properties. So for example you can drag an NGUI Label in there and select Set Text under Actions category.
Here is an animated example (with camera)

2093740--137008--DragDrop.gif

Let me know if this clarifies your questions or probably you have more :slight_smile:

Cheers and thanks!

1 Like

Thx for the intense reply :slight_smile:

Getting more and more a hang of the flow (even if it is a bit different to what I’m used to).

The drag&drop functionality is very cool. Time for a manual :slight_smile:

The forEach worked great as well - I didn’t think even to use it that way.

As for the colors and showing the values itself here is a pic how it look like in the u5 personal edition:

As you can see - it misses the colors for the actions/etc/events and even don’t provide the value or link to the variable for the value.

Another question from my side - as I’m using NGUI how can I integrate the OnClick/OnPress etc functions from them?
Do I have to make an custom node-event?

Some ideas for enhancements for the UI itself:

  • Would it be possible to add a dockable window with search function instead of a right-click to add a new action/event/function/etc?
  • When pressing play in the editor (using full screen) and end it, the canvas loose its focus even the gameobject with a flowcanvas is still selected (the window states please select a graph owner).
  • In the flow script controller component under ‘on enable’ and ‘on disable’ it refers to behaviors - most probably as it use the same core framework or?
  • if selecting multiple actions the hitting delete key for deleting does nothing. Right-click on any action and hitting the delete key deletes only the last selected action.
  • if selecting multiple actions the STRG-D/Ctrl-D does nothing. Right-click any action and hitting the duplicate key (STRG-D/Ctrl-D) only duplicates the last selected action.

Thx in advance
Wyl

Testing some further :slight_smile:

When using a Transform-Var of the gameobject, I can iterate with the for-each loop. If I choose GameObject as value input it denies connecting from the value of the gameobject to the value of the for each node.

Furthermore, I included the cs.file you provided (many thanks for that :slight_smile: ). According tot he ‘Current’-Output of the for-each node, it provides an object. If I create a Object it denies to connect the current-output with the ‘#Item’ input of the AddList node:
2093806--137021--upload_2015-5-1_14-0-59.png

I tried it with an GameObject List as well, but it doesn’t work again.

Thx for help :slight_smile:

In general, I really like the workflow and even testing it for only a few hours it feels very natural :slight_smile: But I may still needs to get trained :slight_smile:

BR
Wyl