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

Simple node editor

Discussion in 'Immediate Mode GUI (IMGUI)' started by unimechanic, Jul 5, 2013.

  1. Seneral

    Seneral

    Joined:
    Jun 2, 2014
    Posts:
    1,206
    Hi gregoired,
    the first error simply appears when the cache file is not existant. I previously thought that it would only appear when installing for he first time and planned to fix it, so good to let me now!
    Regarding your scriptableObjects, they need extra special treatment to be correctly serialized due to the serialization system of Unity. In Nodes, there are two functions that can beoverridden to account for them. They are in the region Undeclared Members / Additional Serialization. Here's he snippet including comments:
    Code (csharp):
    1. /// <summary>
    2. /// Returns all additional ScriptableObjects this Node holds.
    3. /// That means only the actual SOURCES, simple REFERENCES will not be returned
    4. /// This means all SciptableObjects returned here do not have it's source elsewhere
    5. /// </summary>
    6. public virtual ScriptableObject[] GetScriptableObjects () { return new ScriptableObject[0]; }
    7.  
    8. /// <summary>
    9. /// Replaces all REFERENCES aswell as SOURCES of any ScriptableObjects this Node holds with the cloned versions in the serialization process.
    10. /// </summary>
    11. protected internal virtual void CopyScriptableObjects (System.Func<ScriptableObject, ScriptableObject> replaceSerializableObject) {}
    Hopefully the summaries make it clear how to make use of it. There is a difference between ScriptableObjects which you reference, but that are stored somewhere else (like external data or other nodes) and scriptableObjects you hold and store, that other entities may reference.
    Here is another snippet of the serializing of these scriptable objects (both stored and referenced, refer to explanation above) in a Node:
    Code (csharp):
    1. public List<ScriptableObject> storedSOs = new List<ScriptableObject> (); // Those scriptableObjects are stored in the save file
    2. public List<Node> referencedNodes = new List<Node> (); // Those Nodes (scriptableObjects) are are only referenced here but stored in NodeCanvas.nodes
    3.  
    4. protected internal override void CopyScriptableObjects (System.Func<ScriptableObject, ScriptableObject> replaceSerializableObject)
    5. {
    6.     // Iterate over both the stored and referencedSOs to replace them with the apropriate working copies for serializing
    7.     for (int soCnt = 0; soCnt < storedSOs.Count; soCnt++)
    8.     {
    9.         storedSOs[soCnt] = replaceSerializableObject.Invoke (storedSOs[soCnt]);
    10.     }
    11.     for (int soCnt = 0; soCnt < referencedNodes.Count; soCnt++)
    12.     {
    13.         referencedNodes[soCnt] = replaceSerializableObject.Invoke (referencedNodes[soCnt]) as Node;
    14.     }
    15. }
    16.  
    17. public override ScriptableObject[] GetScriptableObjects ()
    18. {
    19.     // Return only the stored SOs which should be serialized along with this Node
    20.     // Other entities referencing them will be asked to replce their references with their respective working copies (see CopyScriptableObjects)
    21.     return storedSOs.ToArray();
    22. }
    I could not test this as I'm not at home (for the next five days), but it should work:)
     
  2. gregoired

    gregoired

    Joined:
    Apr 8, 2013
    Posts:
    20
    Thank you everything's working well with serialization now :)

    Any ideas how to get rid of the error message when I hit play ?
    It makes the nodeCanvas disappear when I exit playMode too !
     
  3. Seneral

    Seneral

    Joined:
    Jun 2, 2014
    Posts:
    1,206
    Don't know have to test out, but as I said I won't be able to test out until I'm back home...It shoud only appear if there is no cache file - and that shouldn't be changed by switching playmode... Can you take a look if it is there? Also using the edior window and the runtime at the same time does not work well yet indeed. I've yet to find the cause:/
     
    Last edited: Mar 29, 2016
  4. gregoired

    gregoired

    Joined:
    Apr 8, 2013
    Posts:
    20
    Yes it's there, that's why I think it's weird. I tried with other releases in your repository, with different versions of Unity, I changed the path in NodeEditor.cs as well, and the error pop, even with a clean project. Note that the error only appears when I enter playmode, so maybe it's linked to the fact the editor window doesn't play nicely with the runtiime. I will investigate myself and let you know !
     
  5. Mithosbluefish

    Mithosbluefish

    Joined:
    Sep 22, 2012
    Posts:
    3
    Hi, I just figured out a similar problem. My problem was that it loaded LastSession.asset through Resources, however I had neglected to add the folder to the Resources folder.
     
  6. Seneral

    Seneral

    Joined:
    Jun 2, 2014
    Posts:
    1,206
    Oh, no it's definitely not your fault in that case!
    Again I couldn't test it yet until I'm back home tomorrow, but here's what I think:
    The cache system is obviously only supposed to work in the editor, but the resource loading system used to load the save file either uses the AssetDatabase in the editor or Resources at runtime. Now which method to use is based on the preprocessor Unity_Editor and !playmode. That means the editor window will use resources when the playmode is enabled, and because the cache file is not in a resource folder this will result in the error. Now this is obviously not supposed to work like that, a workaround for now would be to change the resource loading in ResourceManager to just use the preprocessor. Tell me if that works!
     
  7. gregoired

    gregoired

    Joined:
    Apr 8, 2013
    Posts:
    20
    Ok thanks to you, i was able to fix it !

    So what was throwing the error was this line in NodeEditorWindow:

    Code (CSharp):
    1. tempSessionPath = Path.GetDirectoryName (AssetDatabase.GetAssetPath (MonoScript.FromScriptableObject (this)));
    I replaced the line with :

    Code (CSharp):
    1. tempSessionPath = NodeEditor.editorPath + "Resources/";
    which create the cache file in the resources directory instead of the root folder.
     
    Last edited: Apr 3, 2016
  8. Seneral

    Seneral

    Joined:
    Jun 2, 2014
    Posts:
    1,206
    Cool! But are you sure the addition is not "/Resources" or "Resources/"? Don't know but that seems more logic, anyway if it works...
     
  9. gregoired

    gregoired

    Joined:
    Apr 8, 2013
    Posts:
    20
    You're right ! I edited it
     
  10. Seneral

    Seneral

    Joined:
    Jun 2, 2014
    Posts:
    1,206
    Ok, maybe you could commit a fix for this to master, as it's somewhat important;)
     
  11. gregoired

    gregoired

    Joined:
    Apr 8, 2013
    Posts:
    20
    You're right. I also make little improvments that you might be interested in, such as a way to avoid loosing references in the editor if you overwrite the canvas. I'll clean a bit and commit that too !
     
  12. Seneral

    Seneral

    Joined:
    Jun 2, 2014
    Posts:
    1,206
    Very cool! If it is not a fix but rather a feature, it might be better to use the develop branch though to keep it clean:)
     
  13. Mithosbluefish

    Mithosbluefish

    Joined:
    Sep 22, 2012
    Posts:
    3
  14. Seneral

    Seneral

    Joined:
    Jun 2, 2014
    Posts:
    1,206
    Are you experiencing canvas unloading problems? In what cases? The playmode does not work well with the Node Editor yet, same with scene switchng, because Unity has some oddities there:(
    As far as I know the canvas saving and caching works fine in normal cases - I might double check though;) I'm not sure if the canvases are set dirty, that would be bad...
     
  15. tigerwoodsisao

    tigerwoodsisao

    Joined:
    Mar 8, 2015
    Posts:
    17
    There is a bug in the sample (Calculation Canvas.asset) of the project.

    When you run the following procedure bug will reproduce.
    1. Load Calculation Canvas.asset.
    2. one of the CalcNode to the selected state.
    3. To change the value of EditorGUILayout.EnumPopup of another CalcNode the selected node.
    4. The value of EnumPopup of the first selected node is changed.

    But I do not know reason,
    If I comment out the following code in the NodeEditor.cs, bug does not occur.

    Code (CSharp):
    1. // Push the active node at the bottom of the draw order.
    2.   if (Event.current.type == EventType.Layout && curEditorState.selectedNode! = null)
    3.   {
    4.   curNodeCanvas.nodes.Remove (curEditorState.selectedNode);
    5.   curNodeCanvas.nodes.Add (curEditorState.selectedNode);
    6.   }
     
  16. Seneral

    Seneral

    Joined:
    Jun 2, 2014
    Posts:
    1,206
    I think that came up before, the root cause was not the reordering on selection but that clicking on a popup doesn't let the click event through for the node to register so this messed it up. I don't know if removing the lines for reordering is a good idea though... Maybe, just maybe, we can overcome the clicking problem by creating a wrapper and manually checking if it was clicked in the popup region before the actual popup and firing that event again - it might be worth a try. I will take a look at that next week when I have time:)
     
  17. Deleted User

    Deleted User

    Guest

    Thanks for sharing. How can I access the inputs and outputs of the nodes? The lists values are not saved in the file.
     
    Last edited by a moderator: Apr 14, 2016
  18. Seneral

    Seneral

    Joined:
    Jun 2, 2014
    Posts:
    1,206
    They are saved as the nodeKnobs list in the file indeed, so you won't find the Input/Outputs list in the save file inspector. But once the canvas is loaded, the Input/Output lists are populated and you can access them:)
    That may seem a bit odd but it is better to handle nodeKnobs uniformly so integrating new ones is not that much of a pain;) You won't normally see a difference if you don't somehow need to work on the save file directly...
     
    Deleted User likes this.
  19. Deleted User

    Deleted User

    Guest

    Thanks for reply. How can I use nodeKnobs to iterate through the nodes? Like a behaviour tree. I need to access the child nodes of each node.
     
  20. Seneral

    Seneral

    Joined:
    Jun 2, 2014
    Posts:
    1,206
    @anydayzz One way would be to load the canvas using the API (NodeEditorSaveManager.LoadNodeCanvas (path, false)) where you can specify not to create copies so this will be just as good as any loading function but will take care of the 'compressed' stuff.
    The straight forward way is to check the type of the stored nodeKnob and cast all NodeOutputs to access the connections applied to it... hope that is ok for you, there're certainly other ways to store them but none that I found more generic.
    Open to any suggestions though as always;)
     
    Deleted User likes this.
  21. Deleted User

    Deleted User

    Guest

    I missed the part about the lists being populated when accessing them. Hope I don't bother you too much but I can't get the path to work. Can you give me an example please?

    This is what I tried:
    NodeEditorSaveManager.LoadNodeCanvas("Resources/Saves/Test", false);
     
    Last edited by a moderator: Apr 14, 2016
  22. Seneral

    Seneral

    Joined:
    Jun 2, 2014
    Posts:
    1,206
    If you're in the editor, you have to specify the full path (usually NodeEditor.editorPath + the above with "Resources/" prefixed) normally, or if you specify a different path then it will assume it is in the default NodeEditor.editorPath.
    At runtime, the save file HAS to be in resources, but if the path contains a "resource", it will handle that apropriately.
    If that wasn't clear, here's how the path is handled (found in ResourceManager line 26):
    Code (csharp):
    1.  
    2. /// <summary>
    3. /// Prepares the path; At Runtime, it will return path relative to Resources, in editor, it will return the assets relative to Assets. Takes any path.
    4. /// </summary>
    5. public static string PreparePath (string path)
    6. {
    7.     path = path.Replace (Application.dataPath, "Assets");
    8.     if (Application.isPlaying)
    9.     { // At runtime
    10.         if (path.Contains ("Resources"))
    11.             path = path.Substring (path.LastIndexOf ("Resources") + 10);
    12.         path = path.Substring (0, path.LastIndexOf ('.'));
    13.         return path;
    14.     }
    15.     // In the editor
    16.     if (!path.StartsWith ("Assets/"))
    17.         path = _ResourcePath + path;
    18.     return path;
    19. }
    20.  
     
    Deleted User likes this.
  23. Deleted User

    Deleted User

    Guest

    I didn't know I had to include ".asset". Thank you for help again and sorry for all questions.
     
  24. Seneral

    Seneral

    Joined:
    Jun 2, 2014
    Posts:
    1,206
    No problem I'm always here to help:)
     
    Deleted User likes this.
  25. Deleted User

    Deleted User

    Guest

    I very much appreciate it ;).
     
  26. Aramilion

    Aramilion

    Joined:
    Apr 15, 2016
    Posts:
    23
    Hey! I have a question with i'm struggling with.
    When i open the Editor Window, Create functions of each node seems to fire like 2 times, but winow is empty. I want to make something happen every time the node is created. I've put it in Create method in my custom Node class I've created.
    Everything seems fine after window has been opened. but at first thoose few calls destroy everything.
    Can you help me somehow?

    EDIT:
    I'm stupid :D Just figoured out this and other my problems! Thoose were simple, but i feel great! Thanks for great Framework! ! <3
     
    Last edited: Apr 15, 2016
  27. tigerwoodsisao

    tigerwoodsisao

    Joined:
    Mar 8, 2015
    Posts:
    17
    Hi Seneral
    I have to extend your SimpleNode Editor, I have created the ability to make the AI of Behaviour Tree.
    The following is the link destination of the project of my github.
    https://github.com/unagiHuman/Node_Editor/tree/BehaviourTree
    (My project is to fork your project.)

    Since the source code comments there is a place where Japanese is being used, I'm sorry if you do not read.
    The unity project to clone, you can check the behavior of the AI when you load and run main.unity.

    Added functions are as follows.
    1. Node inherits the class made a four BehaviourNode class.
    2. It was to be able to set the conditional expression and action to BehaviourNode.
    3. To load the ScriptableObject of saved Behaviour Tree, we have created the ability to perform Behaviour Tree AI.
    4. AI running, which Node is made a function of highlighting if it is running.

    I made a function without changing the only source of SimpleNode Editor possible.
    Because I should make even the most class that inherits from Node class, rather than only Behaviour Tree, I think StateMachine also make.

    A little of the changes made to the original SimpleNode Editor is as follows.
    1. Adding a mechanism to add an individual uniq Id to node.
    2. Comment out the relevant part of the source code because there is a problem of (# 465).

     
  28. Seneral

    Seneral

    Joined:
    Jun 2, 2014
    Posts:
    1,206
    Cool, I'm looking into it right now. Do you know to what degree it can be generalized?
    Anyway pretty amazing work!
     
  29. tigerwoodsisao

    tigerwoodsisao

    Joined:
    Mar 8, 2015
    Posts:
    17
    Extracted what can be generalized is as follows.
    1.Class for BehaviourTree run. Class who are in the BehaviourTrees folder is so.
    2.Class for building the BehaviourTree in NodeEditor.
    / Node_Editor / Nodes / BehaviourTree/ uNode's class who are in the folder is so.
    3.Class to run the BehaviourTree constructed in NodeEditor. /Scripts/BTreeManager.cs Is so.
    4.The ability to highlight the Node running. It is written in BTreeManager.cs.

    I will extract generalized things from the project during the next week ~.
     
  30. Deleted User

    Deleted User

    Guest

    Cool. If more than one enemy use the same behavior tree can you select which one to show in the visual editor?
     
  31. tigerwoodsisao

    tigerwoodsisao

    Joined:
    Mar 8, 2015
    Posts:
    17
    You're talking about a highlight of the nodes in the NodeEditor?
    For now, in one of NodeEditor highlight only one of GameObject is compatible.

    If I fix the program
    You can be in one of NodeEditor put the highlight information of a plurality of GameObject, but it will only be difficult to understand perhaps.
    If I do, rather than on the NodeEditor, on top of the character GameObject, Displays whether the characters are running which current node at the label of the Gizmo.
     
  32. Deleted User

    Deleted User

    Guest

    That's what I meant. To be able to select just one gameobject and see the highlighting. Excellent work. Do you mind sharing the code for looping the tree?
     
  33. tigerwoodsisao

    tigerwoodsisao

    Joined:
    Mar 8, 2015
    Posts:
    17
    Deleted User likes this.
  34. Deleted User

    Deleted User

    Guest

  35. Artiste

    Artiste

    Joined:
    Dec 12, 2014
    Posts:
    12
    Hi!

    We're also making a Behaviour Tree Editor. We can add our nodes and actions and export it in a .cs to be used in any game that uses our implementation of behaviour trees. We still have some bugs with lastsession loosing some info on Unity restart and we can't display the BT during runtime, but everything else is working.



    That BT can exported like so :

    public static Behavior CreateBehavior(object agent)
    {

    var context = new Context();
    var root = new Root();
    var selector0 = new Selector();
    var parallel0 = new Parallel(PolicyStatus.One, PolicyStatus.All);
    var action0 = new BehaviorAction(() => context.ReturnF());

    parallel0.Add(action0);
    var action1 = new BehaviorAction(() => context.ReturnS());

    parallel0.Add(action1);
    selector0.Add(parallel0);
    var inverter0 = new Inverter();
    var action2 = new BehaviorAction(() => context.Move(new Vector2(10, 20), "plop"));

    inverter0.Add(action2);
    selector0.Add(inverter0);
    root.Add(selector0);
    return root;
    }
     
    Last edited: Apr 26, 2016
    rahuxx and Seneral like this.
  36. Seneral

    Seneral

    Joined:
    Jun 2, 2014
    Posts:
    1,206
    That seems nice, I'm happy people now can actually make use of the project:)
    I'd be glad to help you with your problems regarding the caching (lastsession). What exactly are you experiencing?
    Most likely it's some other ScriptableObject dependency, or some other additions that are not yet handled. It's a bit finicky sometimes.
     
  37. tigerwoodsisao

    tigerwoodsisao

    Joined:
    Mar 8, 2015
    Posts:
    17
    Hi Seneral,
    I created what was more generalized the project of BehaviourTree made previously.
    I delete extra files, etc. were all left only only of class for use in BehaviourTree construction. Please see the following.

    https://github.com/unagiHuman/Node_Editor/tree/SimpleBehaviourTree

    If play /BehaviourTrees/BTreeSample.unity, sample code is executed.

    However, though with modification for BehaviourTree about two points to the original FrameWork,

    A little of the changes made to the original SimpleNode Editor is as follows.
    1. Adding a mechanism to add an individual uniq Id to node.
    2. Comment out the relevant part of the source code because there is a problem of (# 465).

    If the above two points is allowed, I think that if you can become the first branch of Node_Editor project.
     
  38. Artiste

    Artiste

    Joined:
    Dec 12, 2014
    Posts:
    12
    We fixed it. We have to use a monoBehaviour from the scene and loadind the canevas from lastsession in onEnable didn't give unity enough time to load that script. We're loading the canevas in the first OnGUI and it works now.

    We'd like to be able to show our tree in real time like @tigerwoodsisao but right now we're can't even maintain our canevas properly when we play/stop a scene :/.
     
    Last edited: Apr 28, 2016
  39. Seneral

    Seneral

    Joined:
    Jun 2, 2014
    Posts:
    1,206
    First off, I want to apologize that my responses are probably way slower and shorter than usual. RL is calling!
    I try to help out on these problems but I can't promise...

    There seems to be a lot of problems when switching playmode, which I'm currently unable to resolve unfortunately. They are caused by the serialization system and the lack of events/callbacks accompanying it:(
    If I have time I plan to look at the exact concrete problems with it. If the basis, a smooth reload on playmode change, is there, we shouldn't have any other problems, especially for 'realtime'/asynchronous tree resolving (I assume that's what you want?).
    Maybe you could help me track these errors down if you can make concrete issues on what's happening in the repository?

    Also I couldn't look in/at any of your statemachine solutions thoroughly yet, which is unfortunate, because both seem really cool:)
     
  40. Artiste

    Artiste

    Joined:
    Dec 12, 2014
    Posts:
    12
    Yeah, that's pretty much want we would like to do. But we can't load .lastsession when playmode starts. (does not point to a save file !)
     
  41. Seneral

    Seneral

    Joined:
    Jun 2, 2014
    Posts:
    1,206
    Oh well, I didn't know that! It might be related to one of the recent changes, thanks for the note. I already found the reason, it needs to load all sub assets in the save file, obviously, and I use AssetDatabase.LoadAllAssetsAtPath for the editor and Resources.LoadAll at runtime. This is my mistake: Resources.LoadAll is not the same as the editor version, it only loads all assets in a FOLDER, not the subassets in an asset.
    I don't know why this didn't popped out before, I'm searching for an alternative right now:)

    EDIT: From the Docs of Resources.LoadAll:
    There does not seem a straight foward alternative:(
     
  42. Seneral

    Seneral

    Joined:
    Jun 2, 2014
    Posts:
    1,206
    Ok I can make a commit which fixes it for the editor and playmode switch atleast, as it can use editor functions there. But for runtime, in order to load the editor with the apropriate EditorState (which is the only asset needed to be loaded sperately as the main asset has no reference to it), we need an alternate function...

    EDIT: Managed to make playmode transitioning completely unnoticeable (finally) and scene change is usually unnoticeable, too - Because of timing, OnGUI might be called before the scene change was detected, and an error could be thrown, but this happens only if you immediately move the cursor over the Node Editor window while switching scene... Maybe at some point there is a better solution...
     
    Last edited: Apr 29, 2016
  43. Seneral

    Seneral

    Joined:
    Jun 2, 2014
    Posts:
    1,206
    You can find the fix here! I hope this helps you resolve the problems. If you have other problems caused by switching the playmode, you might find it interesting to look how the cache system works (in the editor window source) because it has to fight that problem, too:)
    Next time, it might help to make an issue to clearly state the problem (I honestly didn't know about that problem before!)
     
  44. Artiste

    Artiste

    Joined:
    Dec 12, 2014
    Posts:
    12
    Wow, thanks. We'll have a look at that.
     
  45. rahuxx

    rahuxx

    Joined:
    May 8, 2009
    Posts:
    537
    @ Artiste, is your project available on github? I am more interested in knowing how you generates source code .cs file from those nodes. This can be good to know and can be used in the @Seneral project. That will be best for all.
    Rahu
     
    Seneral likes this.
  46. Seneral

    Seneral

    Joined:
    Jun 2, 2014
    Posts:
    1,206
    That would be indeed really useful. For a general use, it would be hard to maintain cleanly, but for performance, it would probably be alot faster.
    I assume it would be a lot of modification on the low-level compiled IL layer. Having an implementation opensource would be amazing:)
     
    rahuxx likes this.
  47. Artiste

    Artiste

    Joined:
    Dec 12, 2014
    Posts:
    12
    No github yet since the code is a huge mess right now. But it's pretty much a foreach on every node that adds a string to a .cs file depending on it's type and its outputs.

    Our behaviour trees (the actual ones, not the Editor Nodes) are based on this tutorial . I'm not sure how this can be generalized outside of behaviour trees though.

    I joined the script responsible for this.
     

    Attached Files:

    Last edited: Apr 29, 2016
    rahuxx and Seneral like this.
  48. Seneral

    Seneral

    Joined:
    Jun 2, 2014
    Posts:
    1,206
    @Artiste That's seems the easiest approach, though not generally applicable to every node by a click, but it is really good! :)

    I think to overcome the runtime problem we either have to make the editor states referenced by the canvas (right now, they are independent from the canvas and not refrenced at all, means they have to be extracted seperately from the subassets). Or we simply make a runtime save format, which is planned/needed for runtime saving either way...
    But this will cost me time and I currently have to focus on something different, unfortunately.

    For the runtime format, here is the sheet with at least some of my thoughts on it. Preferably XML, don't you think?
    Along with it there should be an attribute-based tagging system for extra variables that need to be saved in each Node/NodeKnob subtype. The rest is hardcoded as it is known what to save, obviously.
     
  49. Seneral

    Seneral

    Joined:
    Jun 2, 2014
    Posts:
    1,206
    Additionally, I have a rough idea of the future system structure of the Node Editor Framework.
    While the time goes by, the Framework gets more and more features.
    Statemachine support, Groups, even the normal calculation system - all this might be useless for some people.
    Maybe we can make such large features optional, achieved by a module system.
    When I'm talking about a modular system, I don't necessarily mean a modular system in the software code itself, but using pre-processor options.
    Partial classes could be the main key to this. Each module could then add variables and functionality to the Node Editor without messing with the standard code.
    Unfortunately, adding functionality to existing functions would not be possible.
    Most of this is only theory so far, but it may help with the complexity and amount of features that are planned/implemented.
     
  50. andxet

    andxet

    Joined:
    Jul 8, 2013
    Posts:
    4
    Good evening,

    I Admit that I started this morning to read the simple node editor's code, but GUI programming in general it is a bit confusing for me.
    I want to ask you the best way to achieve my goal:
    I have a C# class that define a class structure of questions (nodes) who can have answers (i call it Ports) who can have links (edges) to another nodes. Now exists the code to serialize them to an XML file. When instantiated they became a graph, and I want to code a tool to easily edit this graph.

    I've red some of the example nodes and some (but not all) the examples in this thread, and I understand that I should use Immediate Mode GUI, right?
    I also read the code you write when defining the FloatField, so I imagine that don't exist a way to show a text field where to read double values. So I need to implement it in the "RTEditorGUI.cs" file?
    So, if I'm right, it is not possible to paint in the framework's node with the custom drawer?
    There is a [semi-]automated way to draw the interface to edit an object properties (like the editor) on simple node editor?

    Thank you, I hope that wasn't a stupid questions :confused:
     
    Last edited: May 2, 2016