Search Unity

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
    Yeah something like that. It will be convenient for when you make changes to a Task, and its parameters' needed to be set on all nodes which use that task..
     
  2. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,030
    Hey,
    I have added this to the TODO list. It's a bit tricky to get it right UI wise, but I will try and see how it goes :)
    Thanks for the suggestion!
     
  3. sanpats

    sanpats

    Joined:
    Aug 24, 2011
    Posts:
    343
    Having a small search box on the top of the NC Editor tab similar to Unity's Project and Hierarchy tab that you can type the task name in and the editor will focus on the first of those node, with previous and next buttons to continue the search.
     
  4. nors

    nors

    Joined:
    Oct 22, 2015
    Posts:
    3
    If you create a float graph variable and name it "speed" you could use that same value from "speed" by creating another float graph and naming it "speed". If you change the value of "speed" in one node they all update to the new value. They don't have to be connected to each other. and you don't have to connect a single "speed" node to multiple places making the graph messy. Its just a cleaner way of organizing the graphs.

    Basically you can take a variable and use it somewhere else in your graph with out having to connect it to the original just a copy. Hopefully that makes sense. Its used allot in LabView software to prevent the graph from becoming unreadable.
     
  5. nuverian

    nuverian

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

    You can already do this by using the Blackboard Variables at the top right of the editor.
    So basicaly you can "link" a Variable node, to a Blackboard Variable and all nodes linked to the same Blackboard variable will have the same value.
    For example:
    2015-10-29_19h07_11.png

    Isn't that what you mean?

    Thanks :)
     
  6. nors

    nors

    Joined:
    Oct 22, 2015
    Posts:
    3

    Yes that's exactly it. Awesome. Is there any documentation for flowcanvas other than the quick start guide? Thanks again for a wonderful plugin.
     
  7. ViktorKom

    ViktorKom

    Joined:
    Feb 24, 2015
    Posts:
    29
    Don`t work Set Value to GlobalValue if used Finish or SetActive(false) at the end (((

    http://f2.s.qip.ru/wEDEcOpo.jpg
    I need a script is activated when the work is over. But either it is switched off completely and does not work, or works completely and forever.
     
  8. yangfengb

    yangfengb

    Joined:
    Nov 2, 2015
    Posts:
    3
    how to read the property from custom class in prepared type?
    Code (CSharp):
    1. namespace GameAir
    2. {
    3.     public class User
    4.     {
    5.         public string Name;
    6.     }
    7. }
     
  9. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,030
    Hello,
    I just tried replicating your issue, but everything is working as expected.
    2015-11-03_11h42_08.png
    The Finish node simply disables the FlowScript. If you don't want to disable the flowScript, please don't use the Finish node. Once the flowScript is disabled, the OnDisable event is triggered by the way.

    If you want to filter the execution of the script, please consider using some of the FlowController nodes like "DoOnce", or "Switch Comparison".
    I can't really tell what you are after here, but if you can tell me what you want to do, I will be able to provide better help and a solution.

    Please let me know
    Thanks.

    Hello,
    FlowCanvas can get/set properties but not fields and what you have there is not really a property :)
    Here is how you could do this:
    Code (CSharp):
    1. namespace GameAir
    2. {
    3.     public class User
    4.     {
    5.         public string _name;
    6.  
    7.         public string Name{
    8.             get {return _name;}
    9.             set {_name = value;}
    10.         }
    11.     }
    12. }
    Then within the flowScript, at any point where you have a reference of your "User" type, you can simply drag&drop a connection on empty canvas to read the Name property (or any other property) from that reference.
    Let me know if this works for you.

    Thanks
     
  10. yangfengb

    yangfengb

    Joined:
    Nov 2, 2015
    Posts:
    3
    ok it's work ,thanks
     
  11. eagleeyez

    eagleeyez

    Joined:
    Mar 21, 2013
    Posts:
    351
    what is with publish to android? can I do that?
     
  12. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,030
    Hello,
    Yes, you can publish to android with FlowCanvas :)

    Thanks
     
  13. eagleeyez

    eagleeyez

    Joined:
    Mar 21, 2013
    Posts:
    351
    Okay, I will buy now thank you.


    Okay, I will buy now thank you.
    I will even write a review now, before even testing it. The reasons whill be clear in my review.

    p.s. make it clear in your description that it is possible to publish to android, you do not list it or IOS
     
  14. eagleeyez

    eagleeyez

    Joined:
    Mar 21, 2013
    Posts:
    351
    Hi, quick question.
    Where is the line of code, so I can change when pressing the space bar that the menu opens at the mouse position at the top left of the menu instead of the bottom left?

    thanks
     
  15. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,030
    Hey,
    Thanks a lot for your purchase and review! It is indeed motivational and what you write makes total sense :)
    I will do my best to upload resources and the site in the comming days as well as some of the others suggestions you mention.
    Thanks again!

    The menu normaly opens up at the top left of the menu, and at bottom left only if there is not enough space to show the whole menu from top left. So if your mouse cursor is high enough, it will open at top left while if it's low enough it will open at bottom left. I don't think changing this behaviour to always open at the top left will be good, since this is a standard behaviour for menus :)
     
  16. eagleeyez

    eagleeyez

    Joined:
    Mar 21, 2013
    Posts:
    351
    [QUOTE="The menu normaly opens up at the top left of the menu, and at bottom left only if there is not enough space to show the whole menu from top left. So if your mouse cursor is high enough, it will open at top left while if it's low enough it will open at bottom left. I don't think changing this behaviour to always open at the top left will be good, since this is a standard behaviour for menus :)[/QUOTE]

    Thank you for your reply, but I really do need the menu to allways open top left of the mouse and not the bottom ever. my reasons for this are complicated but if you could tell me how I could do this, it would mean me being able to use this asset much, much easier.

    How long before some documentation and small samples?
    You wrote onthe May 23rd:


    " Regarding platforms, Android is supported (I forgot to add that in the description). iOS is not and unfortunately probably never will, due to how FlowScripts specificaly work.
    Further documentation, is in the writing. I really expect it done within the week :)
    If you have any more questions, by all means do ask and I will be glad to answer them.
    Thanks a lot and cheers! "
     
    Last edited: Nov 14, 2015
  17. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,030
    Thank you for your reply, but I really do need the menu to allways open top left of the mouse and not the bottom ever. my reasons for this are complicated but if you could tell me how I could do this, it would mean me being able to use this asset much, much easier.

    How long before some documentation and small samples?
    You wrote onthe May 23rd:


    " Regarding platforms, Android is supported (I forgot to add that in the description). iOS is not and unfortunately probably never will, due to how FlowScripts specificaly work.
    Further documentation, is in the writing. I really expect it done within the week :)
    If you have any more questions, by all means do ask and I will be glad to answer them.
    Thanks a lot and cheers! "[/QUOTE]

    Hey,
    Yeah, I know I've said that before, but there were a lot of sudden family matters that came up and had limited time in these past months, but I have enough time again now to work on FC!
    I apologize for the delays.

    Regarding the menu popup position, the relevant class is called CompleteContextMenu.cs. As you will see, it derives unity's PopupWindowContext and as such, the position in which is apearing is handled by unity in a good way that takes into account the view space on the screen and in a way that the whole popup window apears within the screen. Thats why it sometimes apears with the cursor being at the bottom instead of at the top when there is not enough space to show it. This is just how menus work in Unity (and as far as I know any other program) :), but feel free to change the code if you like at line #35 method "Show". The Vector2 pos argument that is passed there, is always the mouse cursor position. You can instead of using it, set a specific position to for the popup to always show at.

    Cheers!
     
  18. cybervaldez

    cybervaldez

    Joined:
    Aug 16, 2014
    Posts:
    87
    Hi, I was surprised to read this but i'm about to start building my game so I'd like to confirm if it's still true that iOS will not be supported? Thanks
     
  19. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,030
    Hello,
    Right now iOS is not supported. Although it might be in the future, I can't really promise that right now :)
    Thanks
     
  20. eagleeyez

    eagleeyez

    Joined:
    Mar 21, 2013
    Posts:
    351
    Thanks for your reply,

    Ok, then I will have to work this out for myself. I waas kind of hoping that you would tell me what to change to do this, like have the popup left corner appear at the mouse position but never mind as I am going to have to leave this asset alone until examples are provided.

    This should be scripting without scripting and after a weekend with this asset I am stil lost and puzzling around a lot, I am not getting anywhere and now I am back to playmaker.

    We need examples and documentation!
    without this you don't need to develop further as you will not get your sales and you and everyone including yourself ill just give up and go to the next asset.

    That would be a shame as this asset does look very good indeed if we could just get into it with a few examples and explenations.

    all the best
    Chris.
     
  21. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,030
    Hello Chris,

    I'm sorry to hear that, but I'd like to let you know that I'm working on this matter for the last days non-stop, so expect more docs/examples very soon. This time for real.
    Regarding your question about the window popup position, it is already set to open at the top left, but like I stated earlier, Unity handles the popup windows automaticaly and there is not much that can be done in this matter, unless I completely change the popup window code. So the reason I didn't provide a certain code "fix" is that there isn't any for this case, but instead I will have to change it completely if it is to work otherwise.

    Thanks for your understanding,
    Gavalakis Vaggelis

    PS: There is an mini unofficial example project created by Andy that is posted in the first page, that you might want to take a look at until I complete the official ones.
     
  22. sanpats

    sanpats

    Joined:
    Aug 24, 2011
    Posts:
    343
    Man, chill out. It still a paid beta.

    Playmaker is a Finite State Machine visual editor. FlowCanvas is a visual scripting editor, which is much lower level than FSM. You still need to know a bit about programming logic and understand basic algorithm. You just use a visual scripting instead of typing code in c#.

    You may request your specific needs to nuverian. I did that plenty and he is always polite and helpful. But to expect an asset store developer to always code for you a feature that won't be on his product is not quite a realistic expectation. And you can always right click to get the same menu in a different presentation starting from top left.
     
    nuverian likes this.
  23. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,030
  24. lugard

    lugard

    Joined:
    Nov 27, 2015
    Posts:
    21
    First, I like the framework infrastructure and with proper approach can make a stable system of interaction without the presence of an unpredictable logic. This I say based on my years of experience with machine states and flow calculations for processing the raw data in the field of process automation.
    I bought both products, because I think that the control should be done through the FSM and the actions - through the Flow. It is easier to show and explain "what is happening" to other members who are not programmers or just juniors.
    I have a few questions:
    1. How to work with AsyncOperation? - I'm a bit stuck here. I have got AssetManager, which makes downloading resources during the game and doing it through the WWW class, and then it loads resources through LoadLevelAsync function or similar. Unfortunately I have not had time to get used to and small templates with async operations will be very helpfull.
    2. Did you do the performance test of the combination of NodeCanvas (FSM) and the FlowCanvas?
    3. I have JSON.Net library for Unity3D. Can I replace the serialization / deserialization without painful using this library and reduce code size?
    4. SpaceInvaderExample not works Unity 5.3 WebGL version. Console.log: "Deserialization Error: 'Constructor of FlowCanvas.Nodes.ReflectedFunctionNode`... threw exception ...". But small FSM works perfect with this example.
     
  25. lugard

    lugard

    Joined:
    Nov 27, 2015
    Posts:
    21
    1. How to fast to append several types within "Preferred types"? UnityEngine.UI is almost last element in the list. (Filter? In the code?)
    2. How much times the function "GameObject.FindWithTag " will be called within the graph at the image below? Do i need the BB variable for storing a result of the function?
    performance-check.png
     
  26. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,030
    Hey,
    Thanks a lot! I'm glad you like the products and thanks for getting them :)
    Indeed having an FSM at the top level and flowScripts for states is a good organization plan as well.
    Regarding your questions:
    1) I will look a bit into this and provide a better answer a bit later :)
    2) If you are having a slow deserialization, I just want to let you know that this has been fixed yesterday and I am pushing the new version in a bit.
    3) It would be a lot of work to do, but if the reason to use another json library is the deserialization speed, like state above, this has been fixed :) I've done a heavy lot of optimizations and changes.
    4) I will take a look a this. I probably missed adding a parametless constructor to a class.

    1. This could be done in code relatively easy like this:
    Code (CSharp):
    1.     void AppendTypes(){
    2.         var types = UserTypePrefs.GetPreferedTypesList(typeof(object), false);
    3.         types.Add(typeof(MyType));
    4.         //...add more
    5.         UserTypePrefs.SetPreferedTypesList(types);
    6.     }
    2. The FindWithTag here will be called just once from the Awake node, because you've set it to be callable. If it wasn't set to be callable, this would have been called every time the value is fetched. This is the most important reason callable exists at all :)

    Please let me know if you have any other questions, suggestions or otherwise.

    Thanks a lot!
     
    Last edited: Dec 16, 2015
  27. lugard

    lugard

    Joined:
    Nov 27, 2015
    Posts:
    21
    Thanks for your reply! I hope troubles with WebGL builds will be resolved soon.
    Here full text of error message:
    Deserialization Error: 'Constructor of FlowCanvas.Nodes.ReflectedFunctionNode`4[UnityEngine.Object,UnityEngine.Vector3,UnityEngine.Quaternion,UnityEngine.Object] threw an exception when creating an instance'
    Deserialization Error: 'Constructor of FlowCanvas.Nodes.SimplexNodeWrapper`1[FlowCanvas.Nodes.ConvertTo`1[System.Single]] threw an exception when creating an instance'
    Deserialization Error: 'Constructor of FlowCanvas.Nodes.SetVariable`1[System.Single] threw an exception when creating an instance'
    Deserialization Error: 'Constructor of FlowCanvas.Nodes.ReflectedActionNode`4[UnityEngine.Transform,System.Single,System.Single,System.Single] threw an exception when creating an instance'


    I have more questions:
    1. Is it possible to draw lines "from-to" value ports other color in the edit mode?
    2. How offen do i need to call "Generate AOT Dummy Classes"?
     
  28. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,030
    Hey,
    Thanks for the info. The problem is different than I though and is relevant to AOT as you found out. The Generate AOT Classes though, is not fully implemented to work with FlowCanvas nodes yet. This is exactly what I am working towards now. Once that is done, the errors for WebGL will also cease, as well as for any other AOT only platforms :) The Generate AOT classes will also become more trasparent and become part of the Preferrerd Types editor.

    Regarding for having different colors for value connections, yes that is possible but only by changing it in code.
    If you want, you can open up BinderConnection(T).cs and add this within the #if UNITY_EDITOR section:
    Code (CSharp):
    1.         protected override Color defaultColor{
    2.             get {return new Color(0.5f,0.5f,0.5f);}
    3.         }
    2015-12-17_15h59_23.png
    Is this what you mean? Maybe I keep it by default :)

    Thanks!
     
  29. lugard

    lugard

    Joined:
    Nov 27, 2015
    Posts:
    21
    Yeah! I've changed the code and it works like a charm! Thanks!
    These settings would be useful.

    I'll be patient... I still have a month and a half before the project submission! :)
    The main thing it works with WebPlayer!
     
  30. lugard

    lugard

    Joined:
    Nov 27, 2015
    Posts:
    21
    Hey,
    I've got the error message after append custom event to flow script.
    A custom event is forwarded from animation through my script:
    Code (CSharp):
    1. public class TargetsEvent : MonoBehaviour
    2. {
    3.     public GraphOwner[] owners;
    4.  
    5.     void Send(string name)
    6.     {
    7.         if(owners != null && owners.Length > 0)
    8.         {
    9.             for (int i = 0; i < owners.Length; ++i)
    10.             {
    11.                 owners.SendEvent(name);
    12.             }
    13.         }
    14.     }
    15. }
    Failed to call AnimationEvent Send of class MessageRouter.
    The function must have either 0 or 1 parameters and the parameter can only be: string, float, int, enum, Object and AnimationEvent.
     
  31. Cdngater

    Cdngater

    Joined:
    May 29, 2014
    Posts:
    58
    Your not indexing into owners.

    Change line 11 to look like

    owners[ i ].SendEvent(name);

     
  32. lugard

    lugard

    Joined:
    Nov 27, 2015
    Posts:
    21
    ...oh! [ i ] was eaten by "code" insertion. Any way I have not compilation errors.
     
  33. lugard

    lugard

    Joined:
    Nov 27, 2015
    Posts:
    21
    Refinements:
    Sending goes through "TargetsEvent" script linked to the "MainSplash" object. Only one owner is selected. It's "Loader" object.
    Situations:
    1. All ok - no errors. Target and owner are not equal or the flow script controller of the "MainSplash" object is disabled.
    AllOk.png
    2. Errors. Target and owner are equal.
    Err.png
     
  34. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,030
    Hey,
    I am not sure what the issue is. Can you please provide more info?
    Thanks
     
  35. unitywlp

    unitywlp

    Joined:
    Jan 3, 2014
    Posts:
    144
    Hi
    i use playmaker it was very good tool i try to use many other solutions but many plugins does not have required actions or may come with little tutorials to start using.
    I bought blox plugin since it support for generating actions for the third party plugins but i always assume is there any possible solution for replacing programming instead of making custom actions.
     
  36. sanpats

    sanpats

    Joined:
    Aug 24, 2011
    Posts:
    343
    What is the best way to update to the new version? Should I delete the old one first?
     
  37. sanpats

    sanpats

    Joined:
    Aug 24, 2011
    Posts:
    343
    you have not uploaded the DT FlowScript package to the web btw.
     
  38. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,030
    Hello,

    FlowCanvas is able to make use of any existing code by generating nodes for you. It's more difficult to use than an fsm like playmaker, but also more flexible.
    Let me know if you have any questions.
    Thanks :)

    Hey,
    Yes, it's best to remove the previous installation first to avoid duplicate files in cases where files where move from one folder to another for example.

    Thanks for reminding me. I've just uploaded it now on the website :)
    Cheers!
     
  39. lugard

    lugard

    Joined:
    Nov 27, 2015
    Posts:
    21
    Good day!
    I just upgraded to the new version of the library. I made SpaceInvaderExample WebGL build and got the errors:

    Deserialization Error: '/Users/builduser/buildslave/unity/build/Tools/il2cpp/il2cpp/libil2cpp/icalls/mscorlib/System.Reflection.Emit/DynamicMethod.cpp(21) : Unsupported internal call for IL2CPP:DynamicMethod::create_dynamic_method - System.Reflection.Emit is not supported.'
    ''

    <b>Please report bug</b>

    62e200e8-e05f-4ddd-9f62-29607bda8fb4:1:194823

    NotSupportedException: /Users/builduser/buildslave/unity/build/Tools/il2cpp/il2cpp/libil2cpp/icalls/mscorlib/System.Reflection.Emit/DynamicMethod.cpp(21) : Unsupported internal call for IL2CPP:DynamicMethod::create_dynamic_method - System.Reflection.Emit is not supported.
    ....

    Do you have any idea to resolve this?
     
  40. JoshPeterson

    JoshPeterson

    Unity Technologies

    Joined:
    Jul 21, 2014
    Posts:
    4,040
    @lugard

    I'm not sure about all of the details here, but emitting code at runtime is not supported by AOT compilers like IL2CPP, so System.Reflection.Emit will not work with WebGL. Maybe there is an AOT-friendly code path you can try here?
     
  41. lugard

    lugard

    Joined:
    Nov 27, 2015
    Posts:
    21
    Thanks for replay. I know about this problem, but the example is made using only FlowCanvas and i don't know how fix it in this situation.
     
  42. JoshPeterson

    JoshPeterson

    Unity Technologies

    Joined:
    Jul 21, 2014
    Posts:
    4,040
    @lugard

    Ahh, ok. Unfortunately I can't offer any help on FlowCanvas, as I am unfamiliar with it. I hope that others here can help.
     
  43. sanpats

    sanpats

    Joined:
    Aug 24, 2011
    Posts:
    343
    AFAIK FlowCanvas doesn't support AOT yet, so I think you have to build it to other platform?
     
  44. lugard

    lugard

    Joined:
    Nov 27, 2015
    Posts:
    21
    I found the cause of the problem - the function Send in the MessageRouter is called by the animation system. I renamed my function and now there is no error.
     
  45. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,030
    Hello everyone and sorry for the late reply! I am on a holidays trip :)

    FlowCanvas doesn't yet support AOT-only platforms due to the use of generics, thus the errors.
    This is exactly what I will start working on supporting though, right after I get back from the trip.

    Cheers and happy holidays!
     
  46. lugard

    lugard

    Joined:
    Nov 27, 2015
    Posts:
    21
    Happy holidays and fun trip!
     
  47. SONB

    SONB

    Joined:
    Jul 24, 2009
    Posts:
    88
    Hi nuverian!
    Does flowcanvas work with nodecanvas lite version?
     
  48. Cdngater

    Cdngater

    Joined:
    May 29, 2014
    Posts:
    58
    Is there a way to support dictionaries? Eg: Dictionary<String,String>

    I only see ILists.

    Thanks
     
  49. nuverian

    nuverian

    Joined:
    Oct 3, 2011
    Posts:
    2,030
    Thanks! I'm back now :)

    Hey!
    I've just send a new updated version of NodeCanvas Lite to the asset store, updating it's framework.
    FlowCanvas will work fine with this new version, yes :)

    Hello,

    Even though I don't personaly suggest using dictionaries in a flowscript due to their complexity, here is a CreateDictionary variable node to create Dictionaries<string, T>.
    Code (CSharp):
    1. using System.Collections.Generic;
    2. using System.Linq;
    3. using UnityEngine;
    4. using ParadoxNotion.Design;
    5.  
    6.  
    7. namespace FlowCanvas.Nodes{
    8.  
    9.     [Description("Create a collection of <T> objects")]
    10.     public class CreateDictionary<T> : VariableNode, IMultiPortNode {
    11.  
    12.         [SerializeField]
    13.         private int _portCount = 4;
    14.         public int portCount{
    15.             get {return _portCount;}
    16.             set {_portCount = value;}
    17.         }
    18.  
    19.         public override void SetVariable(object o){
    20.             //...
    21.         }
    22.  
    23.         protected override void RegisterPorts(){
    24.             var keys = new List<ValueInput<string>>();
    25.             var values = new List<ValueInput<T>>();
    26.             for (var i = 0; i < portCount; i++){
    27.                 keys.Add( AddValueInput<string>("Key" + i.ToString()) );
    28.                 values.Add( AddValueInput<T>("Value" + i.ToString()) );
    29.             }
    30.             AddValueOutput< IDictionary<string, T> >("Dictionary", ()=>
    31.             {
    32.                 var k = keys.Select(x => x.value).ToList();
    33.                 var v = values.Select(x => x.value).ToList();
    34.                 return k.ToDictionary(x => x, x => v[k.IndexOf(x)]);
    35.             });
    36.         }
    37.     }
    38. }

    From this node, or any other node where you have a Dictionary reference, you can then drag and drop the dicitonary output port into the empty canvas to get context menu of the possible methods and properties like the image bellow:
    CreateDictionary.png
    If you'd like, I can provide more dictionary related nodes, similar to how lists have for you, but I don't plan to include dictionary nodes in the package by default due to their complexity in use.

    Let me know.

    Cheers!
     
  50. GraphXCreations

    GraphXCreations

    Joined:
    Jul 6, 2014
    Posts:
    121
    Hi Nuverian,
    I like what I see,
    Quick question:
    I dont see any video tutorials, are there any?
    or any examples included in the purchase, i mean, something We can start learning from?

    or you only just provide the asset and the online documentation?

    I mean documentations looks ok, but without any examples or video tutorials the learning curve gets high,

    one more thing,
    Does flowcanvas work with ulink networking or previously old unity networking? cuz I dont really want to go back and forth with graphs and regular scripting at the same time, rather do all in graphs, unless it really necessary to script which i am comfortable with, not proficient but know my way ok with C#.


    regards