Search Unity

  1. Looking for a job or to hire someone for a project? Check out the re-opened job forums.
    Dismiss Notice
  2. Good news ✨ We have more Unite Now videos available for you to watch on-demand! Come check them out and ask our experts any questions!
    Dismiss Notice

[Released] uNode - Visual Scripting [Support C# Import/Export]

Discussion in 'Assets and Asset Store' started by wahid_rachmawan, Oct 18, 2017.

  1. steve_zeng

    steve_zeng

    Joined:
    Aug 6, 2019
    Posts:
    21
    Good news. The author of uNodeV2's official version has submitted it, and currently the official approval of Unity3D is under way. Now let's use the node happily together!
     
    vx4 and Stexe like this.
  2. wahid_rachmawan

    wahid_rachmawan

    Joined:
    Oct 4, 2017
    Posts:
    462
    uNode v2 stable version is now released on the Asset Store.

    What's New in V2:

    New Class Component, and Class Asset, and Singleton graph:
    The new graphs is designed to allowing you to more fast creating a game that allow you to execute the new graphs without need to compile it into c# ( unlike C# Graphs ).
    Advantage over C# Graphs:
    -Can be executed without need to compile it to c# scripts
    -No need to compile to referencing it's members ( variable, property, function ) each time you made a changes.
    -Auto compile to c# on build to ensure your graph is executed in native c# and get the same performance with c# scripts written by programmers.
    -Live Editable
    -Executed on reflection or native c#: use reflection for live editing and using native c# for performance, the best of both worlds

    New High Level API for creating nodes, action, and conditions
    The new HL API let you makes custom nodes with simples and the most easy way.
    The full documentation can be found on: http://maxygames.com/docs/unode/creating-custom-node/

    And much more like Improved Editor Workflow, Unity Console Integration, Improved C# Preview which will highlight generated code from selections and can ping node that's generate the code, Auto C# Generation on Build, new Graph Themes, etc.

    Asset Store link : https://assetstore.unity.com/packages/tools/visual-scripting/unode-visual-scripting-101176
    Download here : http://maxygames.com/download/
     
    Stexe, Szaruga, AthrunVLokiz and 2 others like this.
  3. vx4

    vx4

    Joined:
    Dec 11, 2012
    Posts:
    128
    Bug:
    The following graph should produce the following code:
    Screenshot 2020-11-14 155533.png

    Code (CSharp):
    1. #pragma warning disable
    2. using UnityEngine;
    3. using System.Collections.Generic;
    4.  
    5. namespace MaxyGames.Generated {
    6.     public class GameObject : MaxyGames.RuntimeBehaviour {
    7.  
    8.         public void Update() {
    9.             if(
    10.             Input.GetKeyDown(KeyCode.W)) {
    11.                 MonoBehaviour.print("pass");
    12.             } else {
    13.                 MonoBehaviour.print("failed");
    14.             }
    15.         }
    16.     }
    17. }
    18.  
    but following code gen(Semicolon should not be add to if statement condition):
    Code (CSharp):
    1. #pragma warning disable
    2. using UnityEngine;
    3. using System.Collections.Generic;
    4.  
    5. namespace MaxyGames.Generated {
    6.     public class GameObject : MaxyGames.RuntimeBehaviour {
    7.  
    8.         public void Update() {
    9.             if(
    10.             Input.GetKeyDown(KeyCode.W);) {
    11.                 MonoBehaviour.print("pass");
    12.             } else {
    13.                 MonoBehaviour.print("failed");
    14.             }
    15.         }
    16.     }
    17. }
    18.  
     
    Stexe likes this.
  4. wahid_rachmawan

    wahid_rachmawan

    Joined:
    Oct 4, 2017
    Posts:
    462
    Will be fixed in the next update, thanks for report it.
     
    Szaruga likes this.
  5. Szaruga

    Szaruga

    Joined:
    Jan 29, 2016
    Posts:
    382
    After the release of version 2.0. i shyly remind you to correct the "rich text" option. :rolleyes:
    --->
    2020-11-15_22-07-11.jpg
     
    moyashiking and Stexe like this.
  6. wahid_rachmawan

    wahid_rachmawan

    Joined:
    Oct 4, 2017
    Posts:
    462
    I'll improve it soon.
    thanks for the suggestion.
     
    Szaruga likes this.
  7. wahid_rachmawan

    wahid_rachmawan

    Joined:
    Oct 4, 2017
    Posts:
    462
    uNode v2.0.2 has been released.

    changelog v2.0.2:
    -Now after importing CSharpParser add-ons, uNode will compile scripts using Roslyn Compiler
    -Now uNode C# Graphs can use 'State Graph' if inherited from 'MonoBehaviour' or its sub classes
    -Added misleading color
    -Added support for fast Enter Play Mode
    -Added support for searcing deep member for Runtime Type ( Class Component, Class Asset, Class Singleton, and Graph Interface )
    -Added option to auto compile graph on entering play mode ( the compiled graphs will not saved in your project 'Assets', it will be saved in temporary folder for debugging purpose )
    -Added overflow / recursive node detection
    -Improved Code Generator: optimization for state graph code generator which will produce better code in term of performance and better readable ( you can enable from preference )
    -Improved Editor
    -Changed port that's connected to nodes now doesn't display a name
    -Fixed errors on generating script when 'Realtime C# Preview' window opened
    -Fixed cannot build & run
    -Fixed error when trying to clean temporary graphs on build
    -Fixed error on generating project + scenes
    -Fixed error when generating node convert to Runtime Type if using compatibility generation mode
    -Fixed bug cannot convert int, byte, short, and long to System.Enum
    -Fixed bug cannot create macro asset from project view
    -Fixed bug cannot create node by drag & droping Graph Interface
    -Fixed some UI bugs

    Download here : http://maxygames.com/download/

    Fast Enter Play Mode support allows you to faster prototyping & test ideas and if combined with Auto Compile On Play and CSharp Parser sub features ( Type Patcher + Roslyn Compiler ) you can even run your graphs in native c# and editing the graph in play mode and compile it will apply the changes to all of the instance in the game ( unlike live editing with reflection ).
    Here is the video in action without cut:
     
    Szaruga and vx4 like this.
  8. vx4

    vx4

    Joined:
    Dec 11, 2012
    Posts:
    128
    Bug:
    I can't use WaitForSecond or other Coroutine node inside state graph but still work in play mode.
    Example:
    Screenshot 2020-11-22 112358.png

    error state0.png
     
  9. wahid_rachmawan

    wahid_rachmawan

    Joined:
    Oct 4, 2017
    Posts:
    462
    I'll fix it soon, thanks for report it.
     
    vx4 likes this.
  10. wahid_rachmawan

    wahid_rachmawan

    Joined:
    Oct 4, 2017
    Posts:
    462
    uNode v2.0.3 has been released.

    changelog v2.0.3:
    -Added new Graph Hierarchy
    -Improved CSharp Parser
    -Improved Editor
    -Changed initial node name from 'Start' to 'Entry'
    -Fixed recursive detection bug
    -Fixed visual debugging bug
    -Fixed cannot using inherited protected members on c# graphs
    -Fixed GUI tooltip is not displayed
    -Fixed C# Graphs cannot add 'State Graph' events
    -Fixed UI bug when using maximize and minimize

    Download here : http://maxygames.com/download/

    With new Graph Hierarchy you can easy read the graph, navigate to node, inspect, or add / remove breakpoint.
    Graph Hierarchy.PNG
     
    moyashiking, Stexe, vx4 and 3 others like this.
  11. Szaruga

    Szaruga

    Joined:
    Jan 29, 2016
    Posts:
    382
    @wahid_rachmawan
    What version of Unity uNode 2.x works with?
    For me it works with unity 2019.4.x
    Does it also work with Unity 2020.1.x?
     
    vx4 likes this.
  12. wahid_rachmawan

    wahid_rachmawan

    Joined:
    Oct 4, 2017
    Posts:
    462
    From 2019.1 to latest version of Unity.
    Yes it work with 2020.1.x but i recommended to use Unity LTS version.
     
    Szaruga and vx4 like this.
  13. Szaruga

    Szaruga

    Joined:
    Jan 29, 2016
    Posts:
    382
    @wahid_rachmawan

    I have some questions about uNode Runtime. Currently I'm using the "old style" uNode scripts (uNode Class), and I need some information to decide if I should switch to uNode Runtime or not.

    1. It doesn't seem to be possible to compile a uNode Runtime script to C# code, but I can use "Preview" to see what that code would look like. So I assume the code is generated when "cooking" the game, is it true?

    2. How can I access the variables and functions from a uNode Runtime script instance in other scripts?

    3. What about assigning functions to an event in the inspector? I know it's possible with functions that don't get arguments by using ExecuteFunction. But, for example, I have a slider and I want to assign a function to its "OnValueChanged" event, and that function should get the current slider value as argument. Is it possible to do it with uNode Runtime?

    4. What are the general advantages of using uNode Runtime? So far I see that I can run the script immediately after making changes to it, without the need to compile it, I can make changes at runtime and it's easier to debug. But what would really convince me to use uNode Runtime is something like the ability to rename a class, function or variable automatically in all scripts where it's referenced.

    5. Is it advisable to use both kinds of scripts (uNode Class and uNode Runtime) in the same project? And if so, in which situations?
     
    Stexe likes this.
  14. Szaruga

    Szaruga

    Joined:
    Jan 29, 2016
    Posts:
    382
    Sorry, only now I noticed that uNode is already able to do this, it changes names in other scripts, both uNode class (even if they are not open in the editor) and in c# scripts.
    This is a great, wonderful feature - when was it implemented? The lack of this in earlier versions of uNode I considered a huge disadvantage and handicap in relation to traditional code writing, but now that it is...
    I find it hard to believe... o_O
    dreams come true... :rolleyes:;)
    and uNode becomes an incredibly wonderful tool. :D:):D;)

    Thank you so much for this great feature. :)

    edit//
    I can see that it only works for change variable names, but not for function and properties renames.
    Will it be possible to rename a function and properties in all scripts in the future? :rolleyes:

    edit2//
    If it was possible to rename classes, functions, and properties together with references... :rolleyes:
    And when I dream about it... :rolleyes:
    Sometimes I dream that Unode has the "find all references" function like in Visual Studio... it's... :rolleyes:no, it's probably too good to be true... :rolleyes:
     
    Last edited: Dec 16, 2020
    moyashiking and Stexe like this.
  15. wahid_rachmawan

    wahid_rachmawan

    Joined:
    Oct 4, 2017
    Posts:
    462
    Sorry for late answer because lately i am very busy.

    If you mean 'uNode Runtime' is Runtime Graph ( Class Component, Class Asset, and Singleton ) here it is:

    1. Yes you can use menu > 'Tools' > 'uNode' > 'Generate C# Scripts' to compile all runtime graphs in your project or build your project to automatically compiles all runtime graphs.

    2. Just like you're accessing regular c# scripts.

    3. Like point number 2, but if you want to trigger it from c# you can get the 'uNodeSpawner' component and then call 'InvokeFunction(name, object[])'

    4. Here is some advantage of using runtime graphs:
    -Live Editing
    -Run without need to compile
    -No need to compile every renaming class, variable, function, etc.
    -You can directly reference project asset ( prefab, material, etc ) inside of graph
    -Speed up development because there's no need to compile it.

    5. A simple example is using 'uNode class' to create a data and use Runtime graph to make the logic.

    The rename is implemented in v2.0b3: "-Now renaming variable, property, and function will refactor all reference graphs so after renaming there is no missing member"

    Hmm, i think there's a bug, i'll check and fix it soon.

    I have planned for adding it in the future, after i done with some improvement 'finding reference' will be added soon.
     
    Szaruga and vx4 like this.
  16. vx4

    vx4

    Joined:
    Dec 11, 2012
    Posts:
    128
    Bugs:
    The option "Compare return value" for State transition(Condition) block in state graph is not available:

    Condition block:


    con1.png


    State transition Condition block

    con2.png
     
    Last edited: Dec 22, 2020
  17. wahid_rachmawan

    wahid_rachmawan

    Joined:
    Oct 4, 2017
    Posts:
    462
    Fixed in the next update.
    Thanks for report it.
     
    vx4 likes this.
  18. Szaruga

    Szaruga

    Joined:
    Jan 29, 2016
    Posts:
    382
    @wahid_rachmawan
    I still don't understand some of that, so I have more questions.

    1. I tried to use the 'Generate C# scripts' option, but I'm not sure what happens when I do it. Where are the generated scripts?

    2. The problem is, when I have a normal C# script, it's a component of the type defined in the script, so I can use GetComponent<type> to access it and its members. But when I use a Runtime Graph, it's a component of the 'uNode Runtime' type, which is the same class for all graphs of this kind, and doesn't have the members defined by me. So I still don't know how to access them.

    3. Can you explain what uNode Spawner does?

    4. If I can directly reference a project asset inside of graph, what happens when that graph is compiled to a C# script?

    5. Another problem I have with Runtime Graphs is that I can't define things like interfaces and attributes for it. Especially interfaces are important, because I use them for some events, for example detecting that the mouse cursor was moved over an object (IPointerEnterHandler).

    Generally, it seems that using Runtime Graphs requires a different approach than the way I was using uNode so far, so probably I'm doing some things wrong...
     
  19. wahid_rachmawan

    wahid_rachmawan

    Joined:
    Oct 4, 2017
    Posts:
    462
    1. The generated script located on 'Assets > uNode.Generated' folder

    2. If the Runtime Graph is a Class Component: you can directly connect a GameObject or Component or its sub classes to the Runtime Graph type to get it ( it same as GetComponent<T> ).
    This is a old picture to invoke Graph Interface method but accessing Runtime Graph member is same like this:


    3. The Runtime Graphs is like a c# script asset in your project and the uNode Spawner is a attached component to instantiate the Runtime Graph to the GameObject.

    4. In runtime graph if a graph has reference a project asset the generator will generate a new unique variable and the generated variable will be assigned automatic when the graph is spawned with uNode Spawner.

    5. C# Interface / Attribute implementation is not supported in Runtime Graph because the graph can be run with reflection and reflection is not support it. The Runtime Graph can only implement interface from Graph Interface.
     
    Stexe, Szaruga and vx4 like this.
  20. TharaxisUnity

    TharaxisUnity

    Joined:
    Apr 2, 2015
    Posts:
    3
    Ever since installing uNode on Unity 2020.2.1f1 on Windows I cannot remove any assets without the editor complaining that "Some assets could not be deleted. Make sure nothing is keeping a hook on them, like a loaded DLL for example.". If I click Ok then the file remains, Unity proceeds to rebuild its assembly, and then if I delete the file again, I still get exactly the same error, but clicking Ok then doesn't rebuild the assembly and the file actually does get deleted

    This is EXTREMELY annoying and cumbersome. It appears that uNode is holding onto asset file handles or something when it shouldn't be.
     
  21. TharaxisUnity

    TharaxisUnity

    Joined:
    Apr 2, 2015
    Posts:
    3
    Additionally when manipulating graphs, moving links, etc. I often get multiple errors like "ArgumentException: Getting control 12's position in a group with only 12 controls when doing repaint.". This seems to happen in the ItemSelector.cs script.
     
  22. Szaruga

    Szaruga

    Joined:
    Jan 29, 2016
    Posts:
    382
    @wahid_rachmawan
    Thank you for trying to explain how uNode Runtime works.
    However, I could not get it under control, it is incomprehensible to me.
    I will stick to the old proven method of work, i.e. - uNode Class. My only regret is that I do not know what I am giving up, because any advantages and disadvantages of working with uNode runtime remain a mystery to me.

    By the way, a small request / question - could the values displayed during debugging be displayed "above" the nodes? Often the "cables" are short and now the values hide under the nodes, which is bothersome.

    Despite my difficulties with learning how uNode Runtime works, I am still very happy with how uNode Class works. And I'm looking forward to the newer versions of uNode.
     
    vx4 likes this.
  23. wahid_rachmawan

    wahid_rachmawan

    Joined:
    Oct 4, 2017
    Posts:
    462
    I will fix it soon.

    It will be fixed in the next update.

    Thanks for report it.

    I will improve it soon.

    Thanks for the suggestion.
     
    Stexe likes this.
  24. SDScott_

    SDScott_

    Joined:
    Aug 4, 2016
    Posts:
    1

    Sorry to raise this post from the dead , but as a former Bolt user who recently purchased uNode I think you should know why. When Bolt was released free I started looking at Visual Scripting tools, I am a indie developer, its just me as main programmer, an artist , and a friend who helps out with game design. I was looking for something that would help bridge the gap between C# code and game design. This would free me to code the inter working of the game while the artist and the game designer worked on the rest. Bolt 1 seemed like a good choice until you really start to use it. Then its weaknesses really show, it makes it very hard to make clean integrations. Bolt 2 had a lot of promise with C# code generation and classes, However in a recent post Unity announced they would not be releasing Bolt 2 , their post had a lot of langue that made it clear the visual scripting they plan to develop will be at a very high level. It will be aimed more at people who know NO C# and have no interesting in learning it. After reading this I decided to abandon Bolt and find a visual scripting tool, that had better support for C# integration and was regularly updated. I spent a lot of hours researching all the visual scripting tools on the asset store, reading the documentation and watching YouTube videos. Turns out one of the responses to the Bolt 2 announcement post lead me to your asset. They pretty much said Unity's choice to abandon Bolt 2 will leave a gaping hole for uNode to fill. I looked the asset up and read the documentation and I have to say this is an impressive asset. It strikes the perfect balance for me between code and visual scripting. once I fully get my head around it I plan to buy 2 more copies for the others I work with. This asset 100% should not be free, the price you are charging is very reasonable for the quality of the asset and the number of updates you release. I expect that Unitys built in Visual Scripting will fall way short, especially now that they are a public company and will be forced to put profit and money over quality to please their corporate overlords, who they sold their souls to. uNode has achieved a nice balance and I feel it will be a useful asset even after Unity releases their mess of a visual scripting engine. There is really nothing else like this asset on the Asset store and I hope you continue to develop it.
     
    Last edited: Jan 1, 2021
    Szaruga and vx4 like this.
  25. TharaxisUnity

    TharaxisUnity

    Joined:
    Apr 2, 2015
    Posts:
    3
    I too was looking forward to Bolt 2 and this was the primary reason I purchased Bolt 1, with Unity now taking over and essentially canning the project, shifting its direction in a way I am not interested in, I gravitated towards uNode due to recommendations within the thread discussing alternatives given the cancellation of Bolt 2.

    I've only used uNode for a few days, and I think it's a tool I want to use, but it's not a tool I can use *just* yet.

    I think uNode has a LOT of promise, and I think it's a fantastic tool. However right now I'm not going to be using it for any serious projects because it's just too buggy and inconsistent, to the point where it slows down development unnecessarily.

    Debugging especially is just extremely clunky and cumbersome. For the life of me I couldn't figure out how to live preview a Macro that was used within a currently running Runtime graph. I could only debug self or any running instance and neither worked. I could see the upper-level Runtime graph running, but when I double clicked the Macro to enter it, it was completely dead and no debugging whatsoever. Value previews on running connections don't always show, proxies don't show values, console errors when working on graphs, it seems to sometimes cause slowdown and stutters within the Unity editor, some of the inspector editors are glitched out and incorrectly aligned, and so on.

    Documentation is also very threadbare and poor. It doesn't really adequately describe the various concepts. I'll chalk that up to English perhaps not being the author's native language, but then I would recommend he find someone who can help on that side and massively expand the documentation with solid examples and walkthroughs.

    This has the potential to be one of the best visual scripting tools in Unity, but it has a bunch of quality of life issues that need ironing out before it can really be used.

    I'll revisit it in few updates and hopefully at that point the things that get in the way will have been ironed out. While I'm more than able to do everything in code (and more quickly), I am tempted to use visual scripting almost exclusively if it would help other future team members, whether development or otherwise, quickly be able to visualise and try out ideas, so I hope uNode improves so I can make use of it.
     
    Last edited: Jan 1, 2021
    Szaruga and Stexe like this.
  26. Szaruga

    Szaruga

    Joined:
    Jan 29, 2016
    Posts:
    382
    I am aware that uNode can be used in many different ways.
    An interesting fact is that I have no idea how to use uNode runtime (requires a different approach to code development).
    But despite this, I am able to create a rich and working game by arranging nodes in the uNode class and compiling them into pure C # scripts.

    I am aware uNode has bugs and holes. However, I have learned to deal with them and I am very pleased with the opportunities it gives me. I am a person who perceives the world very visually, visual perception of knowledge, logic and structure is much more absorbable by me. Additionally, I was looking for a tool that is close to normal C # coding.
    And uNode meets both of these conditions more than the alternative tools I know.

    If uNode ceases to be developed, I will lose the ability to create games nicely and efficiently.

    As for uNode free distribution option ... it's complicated.
    On the one hand, this could increase the user base and translate into profits for the creator. But on the other hand, there are not always favorable opportunities and circumstances.
     
    vx4 likes this.
  27. wahid_rachmawan

    wahid_rachmawan

    Joined:
    Oct 4, 2017
    Posts:
    462
    Thank you the the great review. Of course for now i am not gonna make uNode to be free and i will continue develop it.

    -Macro debugging is not currently supported right now, it will be supported in the future version.
    -Value preview don't always slow maybe because the connection is not entered or some bug in GUI, please provide us more information for i can fix the bug in the next update.
    -Proxies don't show values: i will fix it soon or in the next update.
    -Console errors when working on graphs: i've already fix it in the next update.
    -And for others bug if you can please report with more information like screenshot, etc.

    And yes documentation is not good enough but i will trying to improve it from time to time.

    Thanks you for the feedback and report a bug.
     
    vx4 and Stexe like this.
  28. Stexe

    Stexe

    Joined:
    Feb 2, 2014
    Posts:
    182
    @wahid_rachmawan : I'm curious on your thoughts on other visual scripting tools. What is your opinion of Bolt, FlowCanvas / NodeCanvas, and LogicForge?

    What sets uNode apart from them and where do you see uNode in the future?
     
  29. wahid_rachmawan

    wahid_rachmawan

    Joined:
    Oct 4, 2017
    Posts:
    462
    Sorry i don't know what to say because i am not use those tools but i think Bolt, FlowCanvas and uNode is quite similar from the feature it offer and the major different is that uNode can visually create c# codes but doesn't support for live editing ( for the c# graphs ).
     
    Stexe likes this.
  30. Stexe

    Stexe

    Joined:
    Feb 2, 2014
    Posts:
    182
    Gotcha. LogicForge has C# generation. Thought you might use some of the competitors to see what they do and learn from their implementations to better improve your own.
     
  31. wahid_rachmawan

    wahid_rachmawan

    Joined:
    Oct 4, 2017
    Posts:
    462
    Ah okay, Thanks for the suggestions.
     
    Stexe likes this.
  32. wahid_rachmawan

    wahid_rachmawan

    Joined:
    Oct 4, 2017
    Posts:
    462
    uNode v2.0.4 has been released.

    changelog v2.0.4:
    -Added undo support when performing Place Fit Nodes
    -Added support for debuging Macro for Runtime Graphs
    -Added support for displaying State Graph in Graph Hierarchy
    -Added visual debug values for proxy port
    -Improved Editor
    -Improved ItemSelector:
    Added Favorites feature
    Added ability to explore namespaces
    Added ability to search item in all namespaces, specific namespaces, and on favorite namespaces
    Added ability to navigate with keyboard
    Improved search performance​
    -Fixed regions aren't moving nodes properly
    -Fixed error on generating Set Value with debug mode
    -Fixed some bug on performing Place Fit Nodes
    -Fixed crash / freeze when patching graph
    -Fixed graph attributes is not serialized properly
    -Fixed annoying error message when deleting asset on newer unity version
    -Fixed most of others reported bugs

    Download here : http://maxygames.com/download/
     
    vx4, Szaruga and Stexe like this.
  33. Szaruga

    Szaruga

    Joined:
    Jan 29, 2016
    Posts:
    382
    @wahid_rachmawan
    Topic:
    "Little things that can be improved"
    2021-01-05_04-11-26.png

    In the image below you can see how yellow (vector2 type) turns blue (object type). Everything is obviously correct, but the color change is misleading because we are dealing with vector2 all the time (for me it is yellow).
    Suggestive visibility is at the core of a tool like uNode - therefore colors shouldn't suggest a type change if it doesn't change.
     
  34. wahid_rachmawan

    wahid_rachmawan

    Joined:
    Oct 4, 2017
    Posts:
    462
    I will improve it soon, thanks for the suggestions.
     
  35. fabiopov_1

    fabiopov_1

    Joined:
    Jan 2, 2018
    Posts:
    7
    Hello, a little bug report
    I think debug Drawline doesn't seem to work as it should, it seems that the code generated for the color is wrong

    Capture.PNG Capture_2.PNG
     
  36. wahid_rachmawan

    wahid_rachmawan

    Joined:
    Oct 4, 2017
    Posts:
    462
    Thanks you for report it, i will fix it soon.
     
  37. Szaruga

    Szaruga

    Joined:
    Jan 29, 2016
    Posts:
    382
  38. wahid_rachmawan

    wahid_rachmawan

    Joined:
    Oct 4, 2017
    Posts:
    462
    vx4 and Szaruga like this.
unityunity