Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

FlowCanvas - Visual Scripting Similar to Unreal Blueprints

Discussion in 'Assets and Asset Store' started by nuverian, Apr 14, 2015.

  1. sanpats

    sanpats

    Joined:
    Aug 24, 2011
    Posts:
    343
    Creating nested FlowScript Node within an FSM Graph and choose to create new FlowScript .asset will result in one error and many warnings. It seems to have no negative impact on anything so far, but I will report anyway to help your product better. :)

    Error
    Warnings (I got 52, all of which relate to "DarkSkin" with various elements such as arrowLeft, windowShadow etc. I posted one as an example.)
     
  2. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,087
    Hm.. I dont get any of these. Have you removed and re-import the packages anew?
     
  3. Der_Kevin

    Der_Kevin

    Joined:
    Jan 2, 2013
    Posts:
    517
    Maybe this is a really stupid question but...
    What is the differences between node canvas and flow canvas?
    Do i "need" both or are they doing the same? And if not are they working together?
    Somehow iam confused :D
     
  4. sanpats

    sanpats

    Joined:
    Aug 24, 2011
    Posts:
    343
    Yes, completely remove and import anew. But these warning always exist for me in these two new packages you set. May be because I use Unity 5.2.0b4?

    Edit: Tested, doesn't happen with the released 0.88 Beta, but happen in the two new versions you sent me.

    Also happen with Unity 5.1.2p1.

    The 1 error and many warnings happen when the file .asset save dialog window popup when click to create new FlowScript from an empty nested FlowScript Node in FSM graph.

    I use OSX btw, but it should not matter.
     
    Last edited: Jul 30, 2015
  5. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,087
    Hey,

    NodeCanvas is a suite of 3 different tools:
    • Behaviour Trees
    • FSMs
    • Dialogue Trees
    FlowCanvas is a whole different thing. Is a visual scripting system similar in design to Unreal Blueprints.
    • FlowScripts/FlowGraphs
    NodeCanvas and FlowCanvas serve a different purpose, and different means to achieve a task.
    They are not the same ( else why would there be both by the same developer :) )
    You definetely don't need both, but they can work together nicely :)

    If you are after creating AI behaviours, then you probably be better with Behaviour Trees, FSMs (NodeCanvas).
    If you are after creating player interactions, controls or similar event based outcomes, you'd probably be better with FlowScripts (FlowCanvas).

    Of course, let me know if you have any further questions.
    Cheers.

    Hey,
    Hm. That could certainly be the reason. I will have to investigate this further. Thanks for letting me know. Will take a look at this a bit later.
     
  6. sanpats

    sanpats

    Joined:
    Aug 24, 2011
    Posts:
    343
    I've investigated a bit further, please see the edit in my last post. ;)
     
  7. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,087
    I honestly can't think what might be wrong here, especialy since the previous version is working fine for you.
    I also tried importing in a new project and all was fine. Can you please check that just to confirm?
    Is there like any other errors at all, or just this which pops only once when you click the button?

    Thanks
     
  8. sanpats

    sanpats

    Joined:
    Aug 24, 2011
    Posts:
    343
    I think I found how to fix it. The problem is if I delete the old version and import the new, when it first compile after reimported, the Editor can't find the FlowScriptState.cs, which have to import from the Integration package. This cause some error/corruption in the old Graph with nested FlowScript nodes. The correct way is to import the Integration package only first, then import the FlowScript.cs before import the rest of the package.
     
  9. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,087
    Hey,
    Missing nodes should by no means corrupt the graph and should recover when the node is once again found in the project. I've put a great effort to make sure this happens :) and I'd be very interesting if this happens to you again and you can, to export and PM me the JSON file through "File/Export JSON".

    Thanks!
     
  10. sanpats

    sanpats

    Joined:
    Aug 24, 2011
    Posts:
    343
    Hey I will export and PM you if it is happen again. :)
     
    nuverian likes this.
  11. n_k-

    n_k-

    Joined:
    Nov 20, 2013
    Posts:
    2
    Hello,

    How to do a long press gesture on button(uGUI)?
    when I use UI POINTER events,but it could not use repeat actions...
     

    Attached Files:

  12. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,087
    Hey,
    I have just added a "Pressed" output in the UIPointer Event node for convenience. Meanwhile you can do it like this until the update is on the asset store:
    UIPointer.png

    Thanks
     
  13. n_k-

    n_k-

    Joined:
    Nov 20, 2013
    Posts:
    2
    Thanks for the quick reply.
    I was well resolved!! :)
     
  14. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,087
    You are welcome ;)
    By the way, I've also fixed the light theme that the event node's title is not showing.

    Cheers
     
  15. sanpats

    sanpats

    Joined:
    Aug 24, 2011
    Posts:
    343
    As the camera's movement control should be done in LateUpdate, anyway to access it in a FlowScript? Currently, I use a work around to use a nested FlowScript state enables a MonoBehavior component on OnEnable, then disables it in OnDisable.
    And what is the order of execution of OnEnable, OnUpdate, and OnDisable in various Graphs. It seems that in the current state of one graph will call OnEnable and immediately follows by OnUpdate before moving to the next graph, all in the same frame. I think it is this way because I sent an event on OnUpdate of a graph to another graph in another GameObject. The receiver graph cannot receive the event on the first time, have to use the second frame to get it to receive the event. I have to use a workaround because the first graph only run OnUpdate 1 time only. But the transition on the same graph as the sender will receive the event in the first frame. May be the receiver graph isn't turn on yet at the time the sender graph was run.

    And it seems the transition check will not happen until OnUpdate as if I sent and event locally to transition to another state in OnEnable, there will be no transition.
     
  16. sanpats

    sanpats

    Joined:
    Aug 24, 2011
    Posts:
    343
    If I use a reflection node in a graph, and I change the code that may change the type of a property I've used in the graph or a class name, it will not cause problem only on that node, but may effect many part in that graph that have nothing to do with the node. This also happen in the blackboard, it may lose all variables if I delete or rename a class that have a variable in that blackboard.
     
    Last edited: Aug 2, 2015
  17. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,087
    Hey,

    I've just added OnLateUpdate and OnFixedUpdate event nodes. Here how to add this now:
    1) Open up MonoManager.cs and add this code:
    Code (CSharp):
    1.         public event Action onLateUpdate;
    2.         void LateUpdate(){
    3.             if (onLateUpdate != null){
    4.                 onLateUpdate();
    5.             }
    6.         }
    2) Here is the LateUpdate event node. Create a new LateUpdateEvent.cs script and add this code:
    Code (CSharp):
    1. using NodeCanvas.Framework;
    2. using ParadoxNotion.Design;
    3. using ParadoxNotion.Services;
    4.  
    5. namespace FlowCanvas.Nodes{
    6.  
    7.     [Name("On Late Update")]
    8.     [Category("Events/Graph Events")]
    9.     [Description("Calls a constant Flow per-frame, which is called after normal Update")]
    10.     public class LateUpdateEvent : EventNode {
    11.  
    12.         private FlowOutput o;
    13.  
    14.         protected override void RegisterPorts(){
    15.             o = AddFlowOutput("Out");
    16.         }
    17.  
    18.         public override void OnGraphStarted(){
    19.             MonoManager.current.onLateUpdate += this.LateUpdate;
    20.         }
    21.  
    22.         public override void OnGraphStoped(){
    23.             MonoManager.current.onLateUpdate -= this.LateUpdate;
    24.         }
    25.  
    26.         void LateUpdate(){
    27.             o.Call(new Flow(1));
    28.         }
    29.     }
    30. }
    Make sure to add it in the "Nodes/Events/Graph" folder so that when you update to the next version, there is no conflict.

    The order of execution is the same as Unity's:
    OnEnable
    OnUpdate
    OnLateUpdate
    OnDisable

    Where OnEnable and first OnUpdate call, happen in the same frame, again like Unity calls.
    It's a bit hard to understand what you mean regarding the events not received.
    Can you please PM me a project so that I can understand better, or explain a bit more.

    Thanks.

    I will take a better look at refactoring and reflection based nodes. Changing parameters of a method should be easy to be refactored. I also have some ideas for when changing the method name, but changing the class name which the method belongs to, I really don't think it would be possible to refactor that change in a reflection based node.

    Regarding the blackboard, thanks for letting me know about this bug. I will fix this ASAP.
     
  18. sanpats

    sanpats

    Joined:
    Aug 24, 2011
    Posts:
    343
    Thanks, it's working great.

    I understand the limitation of reflection. I just wish the error will be contained to the nodes involved, and not effect the other parts of the graph. Is that possible? Have to fix the whole graph because of changing that effect 1 node is a bit troublesome.

    I've changed my graph to eliminate the need to send event so can't send you the project.

    But I will explain more.

    I have a GameMaster gameObject and a Character gameObject that has an FSM graph attached to both GameObject.

    The GameMaster graph has a Start Node in a nested FlowScript that do the scene initialization on OnEnable and then send a Global Event "Level Initialized" on OnUpdate. This start node have a transition link that check event for the "Level Initialized" to move to the next State.

    The Character graph has a Start node in a Action Task that just run forever doing nothing until the transition link receive the event "Level Initialized"

    You can see that the transition is the same for both start nodes in both graph.

    In the first frame, the GameMaster's transition will receive the global event and move to the next state, but the Character's transition will fail to receive the event and stuck.

    The Character's graph need 2 frames to pick up the global event, but the GameMaster will be already move to the next state by the 2nd frame.
     
  19. AndyGFX

    AndyGFX

    Joined:
    Jan 13, 2012
    Posts:
    98
    Hi,

    a strange behaviour I found with HOTween Pro, when is component DOTween Animation component added after Flow Graph Controller, then doesn't work (AutoPlay and DOPlay from FC too, doesn't works). In reverse order works very well.

    Andy.
     
    Last edited: Aug 3, 2015
  20. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,087
    Hey,

    How does it affect the rest of the graph? Can you please provide some more info?
    I've gone and fixed refactoring parameter types, count and return type by the way.

    Also thanks for the events explanation. Yeah, if it's the first frame of the application as a whole, that other event receiver can possibly not be initialized yet, since each one is initialized at OnEnable of the GraphOwner component and as Unity usual the order of OnEnable calls is not deteministic. I will take a look if something can be done there.

    Thanks!

    Hey,

    Can you post an image so that I understand a bit better?
    Meanwhile, here are some DOTween nodes for convenience :)

    Code (CSharp):
    1. using UnityEngine;
    2. using System.Collections;
    3. using ParadoxNotion.Design;
    4.  
    5. using DG.Tweening;
    6.  
    7. namespace FlowCanvas.Nodes{
    8.  
    9.     [Category("Actions/Tweening")]
    10.     public class TweenPosition : LatentActionNode<Transform, Vector3, float, Ease, bool>{
    11.         public override IEnumerator Invoke(Transform transform, Vector3 position, float duration, Ease easeType, bool relative){
    12.             var active = true;
    13.             var tween = transform.DOMove(position, duration);
    14.             tween.SetEase(easeType);
    15.             if (relative) tween.SetRelative();
    16.             tween.OnComplete( ()=> { active = false; } );
    17.             while (active) yield return null;
    18.         }
    19.     }
    20.  
    21.     [Category("Actions/Tweening")]
    22.     public class TweenRotation : LatentActionNode<Transform, Vector3, float, Ease, bool>{
    23.         public override IEnumerator Invoke(Transform transform, Vector3 rotation, float duration, Ease easeType, bool relative){
    24.             var active = true;
    25.             var tween = transform.DORotate(rotation, duration);
    26.             tween.SetEase(easeType);
    27.             if (relative) tween.SetRelative();
    28.             tween.OnComplete( ()=> { active = false; } );
    29.             while (active) yield return null;
    30.         }
    31.     }
    32.  
    33.     [Category("Actions/Tweening")]
    34.     public class TweenScale : LatentActionNode<Transform, Vector3, float, Ease, bool>{
    35.         public override IEnumerator Invoke(Transform transform, Vector3 scale, float duration, Ease easeType, bool relative){
    36.             var active = true;
    37.             var tween = transform.DOScale(scale, duration);
    38.             tween.SetEase(easeType);
    39.             if (relative) tween.SetRelative();
    40.             tween.OnComplete( ()=> { active = false; } );
    41.             while (active) yield return null;
    42.         }
    43.     }
    44. }

    Cheers
     
  21. sanpats

    sanpats

    Joined:
    Aug 24, 2011
    Posts:
    343
    Links and nodes can disappear. It seems random on what will disappear.



    Well if it's limitation of Unity, it's ok. :)
     
  22. Karsten

    Karsten

    Joined:
    Apr 8, 2012
    Posts:
    187
    hi,
    i bought this some days ago now trying it
    the first question i came across was , there is OnEnable OnDisable and OnUpdate event , but where are the other monobehavior events you usually use in scripts like for example FixedUpdate or Awake and all that , how to use them
    i think it should be possible but how or is it not yet implemented?They should be EventNodes or how is this done or planed`? Thanks
     
  23. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,087
    I'm prety sure that this issue is resolved in the new version :)

    Hey,
    The next version will have all those nodes you miss :)
    I will make a post about the new version changes in a while, so please keep an eye for it ;)
     
  24. sanpats

    sanpats

    Joined:
    Aug 24, 2011
    Posts:
    343
    When will the next version be released?
     
  25. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,087
    Hey,
    Doing some final checks and going to submit later today :)
     
    sanpats likes this.
  26. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,087
    So here is a list of what everyone can expect in the next version!
    There are a lot of fixes, improvements and new stuff here and this will be the last "early access beta" version of FC :)
    Thus, bringing FlowCanvas to v1.0 will also come with a dedicated website, docs, support forums as well as examples
    Macro and Nodes downloads, that will be comming around soon!

    Without further ado, the change log:


    WORKFLOW
    • Blackboard variables can now automaticaly be synced over the network, selectively.
    • Creating non simplex custom nodes is now easier to understand. Non Simplex nodes are ones that have any number of inputs and/or outputs and are generaly more customizable than simplex nodes which follow specific rules.
    Code (CSharp):
    1. using System;
    2. using UnityEngine;
    3. using FlowCanvas;
    4.  
    5. public class ExampleNode : FlowNode {
    6.  
    7.     public Func<float> someFloat;
    8.     public Func<bool> someBool;
    9.  
    10.     public Action<Flow> Out;
    11.  
    12.     public void Do1(Flow f){
    13.         Debug.Log(someFloat());
    14.         Out(f);
    15.     }
    16.  
    17.     public void Do2(Flow f){
    18.         Debug.Log(someBool());
    19.         Out(f);
    20.     }
    21. }
    ExampleFlowNode.png

    NODES
    • Event Node Targets, can now be set from a Blackboard variable.
    • Added LateUpdate, FixedUpdate Event nodes.
    • Added BecameVisible, BecameInvisible Event nodes.
    • Added Cusom Input Axis Event node (able to define any number of axis names).
    • Added Switch String Flow Controller node.
    • Added Switch Object Tag Flow Controller node.
    • Added CacheValue<T> node.
    • Flow Merge nodes AND and OR, can now take multiple inputs instead of two.
    • Added "Pressed" output in UIPointer Event node.
    • Added "Reset" in Sequence Flow Control node.
    • Added Task Action and Task Condition nodes for using NodeCanvas made Tasks directly in a FlowScript, thus being able to use any current 3rd party integration available already (Such nodes do no expose value inputs/outputs)
    • The Set Variable node now includes operations for floats and integers to Set, Add, Subtract, Multiply and Divide the input value with the variable.

    MACROS

    • Fixed Macro node connection being lost.
    • Fixed renaming Macro inputs/outputs from removing connections.
    • Fixed node context menu not showing all Macros in the project.
    • Drag and Droping ports on the Macro Input or Macro Output Node, allows for "promoting" the port to a Macro Input or Output automaticaly.
    PromotePort.gif


    EDITOR

    • Fixed node connections that were visualy shown messed up the first time the editor gets opened.
    • Fixed dragging and dropping a gameobject from the hierarchy and selecting a function from throwing errors.
    • Flow Excecution exceptions (typical in reflection nodes) are now catched and the UI indicates the failed node in red.
    • The Editor UI has been improved to make Object type references more visible.
    • Default port values are now shown transparent instead of not showing at all.
    NodeUIImprove.png
    • Preferred Types List can now be saved/load to a preset file.
    • Improved Context Menus filtering when draging value ports, to include the draged type in generic node definitions.
    • Fixed light theme not showing some node titles.
    • Fixed when draging Flow ports, that they looked like they can be connected to string value ports.
    • Improved on showing which ports the draged connection can be made to.
    • Switch Enum node type, can now also be set by simply drag and droping an enum port over the node.
    SetSwitchEnum.gif


    MISC
    • Vector types are now color coded in orange.
    • Variable nodes are now color coded in white.
    • Visual Debuging is now more snappy and per-frame updates remain constant yellow instead of flashing on/off.
    • Reorganized node categories.
    • Modified node help description to be more consistent in terminology.
    • Fixed Blackboard deserialization of missing variable types.
    • Refactoring method parameters and return types for reflection nodes, is now handled.



    CURRENT ROADMAP
    These are the things that are in my very near TODO list:
    • To add Macro local variables.
    • To add ability to Bind Macros.
    • To add ability to convert a multi node selection to a Macro.
    • Class FlowScript.


    Cheers!
     
  27. sanpats

    sanpats

    Joined:
    Aug 24, 2011
    Posts:
    343
    Great job! Both the new features and the TODO list, Class FlowScript seems very interesting.

    Some suggestion:
    • Have you consider allow an option to have Input/Output node in nested FlowScript that can be configure FSM graph inspector? Or do you think it's redundant?
    • An ability to let FlowScript create Dynamic Variable on Blackboard easily (as I understand, it can be done but only through Blackboard reflection node)
    • Nested FlowScript for Behavior Tree.
    • An ability to bind blackboard variable to stuffs on different GameObject.
    • An ability to select on-preferred type from context menu for a rarer used Class.
    These may not be necessary, but just give for your consideration.

    Question: Currently, can we have multiple GraphOwners/Blackboards on the same GameObject?
     
  28. sledgeman

    sledgeman

    Joined:
    Jun 23, 2014
    Posts:
    389
    Does this release get "nested FlowScript" inside BehaviorTree ?
     
  29. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,087
    Hey, Thanks :)

    • I think that since the blackboard variables are propagated from the FSM to the FlowScript, I can't see why adding Input/Output nodes, since in the FlowScript you can read/write to the variables normaly. Wouldn't that add an extra step? :)
    • You can create dynamic variables now, by adding the "Variables/Set Blackboard Variable/Set Of Type<T>" node. You can then select Dynamic Variable from the dropdown. Is that what you ask?
    • Just added Nested Flowscipt in Behaviour Trees! :)
    • I've been asked before for the ability to bind properties from game objects other than the one the blackboard is on. I could expose a game object variable in the inspector. Practicaly the only reason I have not already, is to keep things more user-safe in design and consistent. Other than that is quite doable. I still need to think a bit more about allowing it.
    • What do you mean by your last suggestion?

    Yes, you can use multiple GraphOwner on the same game object, but only one blackboard. I could expose the target Blackboard variable on the GraphOwner inspector though so that you can assign any blackboard you want for usage. (it was like that some time ago).

    Thanks!

    Hey,
    So, I actualy went ahead and squezed Behaviour Trees Nested FlowScript in this version too!



    So here is how NC Behaviour Tree + FC FlowScript works:

    NC Behaviour Tree
    BTFlowScript.png

    FC FlowScript
    BT FlowScript.png

    There is a new FlowScript node, "Finish". This node disables the flowscript and also take a boolean parameter, thus the flowscript can be disabled and return Success or Failure for the Behaiviour Tree to continue accordingly!
    The Finish node is also relevant to nested FlowScripts in FSMs, since when the Finish node is called, "OnFinish" transition will be called.
    Works very smoothly in both cases. I hope you like it :)

    Cheers!
     
  30. sanpats

    sanpats

    Joined:
    Aug 24, 2011
    Posts:
    343
    Finish Node is nice addition indeed!
     
  31. Der_Kevin

    Der_Kevin

    Joined:
    Jan 2, 2013
    Posts:
    517
    Awesome! Cant wait for my vacation to end to get my hands on it :D ...
    By the way, what are blackboard variables?
     
  32. sledgeman

    sledgeman

    Joined:
    Jun 23, 2014
    Posts:
    389
    woaah....awesome! thx for all these great new features !... so happy with this new release !
     
  33. Karsten

    Karsten

    Joined:
    Apr 8, 2012
    Posts:
    187
    how do you instantiate objects from classes other components need? look screenshot is this correct?
     

    Attached Files:

  34. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,087
    Thanks. Sometimes simple things are better :)

    Glad to hear :)
    Blackboard variables are a way to store and retrieve data, like strings, floats, gameobjects etc. It's similar to having variables for a MonoBehaviour script and altering those through the inspector.
    Enjoy your vacations!

    Hey, you are welcome! I'm glad to hear that :)
    Cheers!

    Hello,
    The graph in the image is correct yes. The moment you draged the Config port from StartServer node and created the ConnectionConfig variable node, an instance was created.
    So that variable is actualy a 'ConnectionConfig' instance, otherwise the variable node would have read "NULL" for it's title :)
     
  35. Karsten

    Karsten

    Joined:
    Apr 8, 2012
    Posts:
    187
    Did you post the new version already to the Assets store? i heard its rediculous how long it sometimes take until UT reviewed assets and activate it to show on the Asset
    store page.
     
  36. OrdinaryMoose

    OrdinaryMoose

    Joined:
    Nov 4, 2013
    Posts:
    1
    This may have been addressed already but didnt see it in my read through the posts. When I switch between flowscript windows on different gameobjects, the zoom level and scroll position from the previous window gets applied to the window I am trying to look at. This results in having to scroll and zoom to find the nodes I am working on. Is there a setting to make the window position and zoom levels persistent for each flowscript?
     
  37. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,087
    I took me a bit more than expected but it's submited yes. It might take a bit more due to summer, but hopefully not :)
    Cheers!

    Hey,
    Yes thats a known issue which has been fixed for the new version amongst all other fixes, improvents and additions made :) It will no longer happer.
    Meanwhile, until the new version goes live, please use the "F" shortcut key which Focuses the canvas at the nodes and will save you a lot of time.

    Thanks!
     
  38. AndyGFX

    AndyGFX

    Joined:
    Jan 13, 2012
    Posts:
    98
    Hi,

    I'm today little bit nervous, because I few days ago my menu flow prototype made with FC was in fully working state. Today after reopen and run I got this error:

    Code (CSharp):
    1. (19:47:13.2882)
    2. Error:
    3. Deserialization Error: 'Cannot create an instance of an interface or abstract type for FlowCanvas.Nodes.ReflectedMethodNode'
    4. <b>Please report bug</b>
    5.  
    6. StackTrace:
    7. '  at ParadoxNotion.Serialization.FullSerializer.fsMetaType.CreateInstance()
    8.    None: line 0
    9.  at ParadoxNotion.Serialization.FullSerializer.Internal.fsReflectedConverter.CreateInstance()
    10.    None: line 0
    11.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalDeserialize_3_Inheritance()
    12.    None: line 0
    13.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalDeserialize_2_Version()
    14.    None: line 0
    15.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalDeserialize_1_CycleReference()
    16.    None: line 0
    17.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.TryDeserialize()
    18.    None: line 0
    19.  at ParadoxNotion.Serialization.FullSerializer.Internal.fsReflectedConverter.TryDeserialize()
    20.    None: line 0
    21.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalDeserialize_5_Converter()
    22.    None: line 0
    23.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalDeserialize_4_Cycles()
    24.    None: line 0
    25.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalDeserialize_3_Inheritance()
    26.    None: line 0
    27.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalDeserialize_2_Version()
    28.    None: line 0
    29.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalDeserialize_1_CycleReference()
    30.    None: line 0
    31.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.TryDeserialize()
    32.    None: line 0
    33.  at ParadoxNotion.Serialization.FullSerializer.Internal.fsIEnumerableConverter.TryDeserialize()
    34.    None: line 0
    35.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalDeserialize_5_Converter()
    36.    None: line 0
    37.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalDeserialize_4_Cycles()
    38.    None: line 0
    39.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalDeserialize_3_Inheritance()
    40.    None: line 0
    41.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalDeserialize_2_Version()
    42.    None: line 0
    43.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalDeserialize_1_CycleReference()
    44.    None: line 0
    45.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.TryDeserialize()
    46.    None: line 0
    47.  at ParadoxNotion.Serialization.FullSerializer.Internal.fsReflectedConverter.TryDeserialize()
    48.    None: line 0
    49.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalDeserialize_5_Converter()
    50.    None: line 0
    51.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalDeserialize_4_Cycles()
    52.    None: line 0
    53.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalDeserialize_3_Inheritance()
    54.    None: line 0
    55.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalDeserialize_2_Version()
    56.    None: line 0
    57.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.InternalDeserialize_1_CycleReference()
    58.    None: line 0
    59.  at ParadoxNotion.Serialization.FullSerializer.fsSerializer.TryDeserialize()
    60.    None: line 0
    61.  at ParadoxNotion.Serialization.JSON.Deserialize()
    62.    None: line 0
    63.  at ParadoxNotion.Serialization.JSON.Deserialize[GraphSerializationData]()
    64.    None: line 0
    65.  at NodeCanvas.Framework.Graph.Deserialize()
    66.    None: line 0
    I can't find where was or is problem. (I have used last FC+NC from you via @).


    My question is, what is best practise for prevent loosing node connections or full diagram structure to the future?

    Thx,
    Andy.
     
  39. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,087

    Hello Andy,

    There have been lot of fixes after the version I've send you and these problems have now been fixed. These are related to when refactoring methods used in the flowscript, but this is now handled properly so there are no more similar errors. The last version with these fixes is still pending review by the unity asset store team, but I will send it to you at your email now.
    I'm sorry about these inconveniences. Hopefully they are all fixed for good now.
    Also, please consider making some frequent backups, especialy until v1 is out.

    Thanks
     
  40. AndyGFX

    AndyGFX

    Joined:
    Jan 13, 2012
    Posts:
    98
    Hi,

    thanks for answer.
    Isn' t problem because now I working from zero and FC part will be added after FC 1.0 release.

    Andy.
     
  41. sanpats

    sanpats

    Joined:
    Aug 24, 2011
    Posts:
    343
    Requesting features:

    • For a node that came from generic function like GetComponent<T>, can we have a GetComponent node that we can type in the Type T's name manually in the node inspector? This way we don't have to put everything in the preferred type list.
    • A global Verbose toggle option to turn on or off Log messages from your built-in nodes. In complex graph, the messages seems to overwhelm the Console... when I want to debug other stuffs.
    Note: Switch Comparison doesn't seem to work with string... It always return != even the strings are the same???
     
    Last edited: Aug 12, 2015
  42. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,087
    Hey,

    1. The thing with generic nodes, is that they are actualy open generic definitions and when you select to add such a node a type has to be selected beforehand so that an instance can be created. You can't have an instance of an open type like GetComponent<T> and as such the actual node created is an instance of GetComponent<Animator> for example.

    So the best point to do what you are requesting would be in the gui before node creation, otherwise the node created, from within which the type is selected, would have to be a dummy/temporary node replaced after the type selection.

    Sorry if this was a boring answer. I just felt the need to explain.
    The short answer is that, if such "Type Searching" was to be implemented one way or another, it would not be done soon priority wise, considering that the Preferred Types List suffice for now. :)

    2. Sure. I will add this option soon :)

    3. Thanks. This is now fixed.

    Cheers!
     
  43. TechnicalArtist

    TechnicalArtist

    Joined:
    Jul 9, 2012
    Posts:
    736
    Impressive visual script editor!!!
     
  44. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,087
    Thanks a lot! :)
     
  45. Polywick-Studio

    Polywick-Studio

    Joined:
    Aug 13, 2014
    Posts:
    307
    Code (CSharp):
    1. NullReferenceException: Object reference not set to an instance of an object
    2. FlowCanvas.Nodes.ReflectedFunctionNode`2[CGK_ManagerProject,System.String].Call (.CGK_ManagerProject a) (at Assets/FlowCanvas/Module/Nodes/Reflection/ReflectedMethodNode.cs:241)
    3. FlowCanvas.Nodes.ReflectedFunctionNode`2+<RegisterPorts>c__AnonStorey7E[CGK_ManagerProject,System.String].<>m__12E () (at Assets/FlowCanvas/Module/Nodes/Reflection/ReflectedMethodNode.cs:250)
    4. FlowCanvas.BinderConnection`1[System.String].GetValue () (at Assets/FlowCanvas/Module/BinderConnection(T).cs:62)
    5. FlowCanvas.ValueInput`1[System.String].get_value () (at Assets/FlowCanvas/Module/Ports.cs:158)
    6. FlowCanvas.Nodes.ReflectedActionNode`2+<RegisterPorts>c__AnonStorey79[UnityEngine.UI.Text,System.String].<>m__121 (Flow f) (at Assets/FlowCanvas/Module/Nodes/Reflection/ReflectedMethodNode.cs:149)
    7. FlowCanvas.FlowOutput.Call (Flow f) (at Assets/FlowCanvas/Module/Ports.cs:103)
    8. FlowCanvas.Nodes.UpdateEvent.Update () (at Assets/FlowCanvas/Module/Nodes/Events/GraphEvents/UpdateEvent.cs:19)
    9. FlowCanvas.FlowGraph.OnGraphUpdate () (at Assets/FlowCanvas/Module/FlowGraph.cs:44)
    10. ParadoxNotion.Services.MonoManager.Update () (at Assets/FlowCanvas/Framework/_ParadoxNotion (shared)/Runtime/Services/MonoManager.cs:51)
    11.  
    I keep getting a ton of these errors. Is there a way to get latest version?
     
  46. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,087
    Hey,
    Sure. I am sending you a PM :)
     
  47. Polywick-Studio

    Polywick-Studio

    Joined:
    Aug 13, 2014
    Posts:
    307
    It's fixed now. Now there is assignment and non-hook event issue.
     
  48. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,087
    Hey,

    Can you confirm that the Unity EventSystem is setup correctly?
    You can setup the event system through unity top menu -> "GameObject / UI / EventSystem".

    Also on the FlowScript Controller inspector and in runtime, is it active (does the Play button looks pressed like in the image bellow?)
    2015-08-14_17h31_29.png

    Thanks
     
  49. Polywick-Studio

    Polywick-Studio

    Joined:
    Aug 13, 2014
    Posts:
    307
    It's fixed now... restarted Unity and it's okay.
     
  50. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,087
    Thanks for letting me know.
    If it happens again for any reason, please let me know to check if there is any issue.