Nodot and the case for component nodes as an alternative to scripting #8942
Replies: 1 comment
-
Here is the forum thread for anyone that's curious for the rest of the discussion. Someone recommended I post this here as well so I made a copy: Hope something good comes out of this in some form, and it at least inspires a new feature for a future Godot release! From my comment on that thread, I think my main point would be the following. By default Godot has a great node system, but it seems to be limited by the fact that all the vanilla nodes are top level technical components: Add this type of 3D mesh instance, if you want it to collide add this type of solid body collider, that will require a script to check this and bake that, then once you stop getting errors you can move on to the next main thing. For the end user however, it would be far better and more encouraging if instead you had: Add a terrain object, add a default player character on top of it, put an empty item on the ground to see how it falls, test to move around and see how it works then decide which textures models and sounds to use till you get a solid concept in a couple of hours. The possibilities would truly be endless 🙂 |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
I've been wanting to write this for a while and am eager to hear your thoughts. It's something I'm hoping the team will see and consider in some form. Best way to start is by describing the root issue as I've experienced it, followed by the best solution available which I recommend integrating into Godot for the reasons I will explain.
For years I've done little experiments in Godot, typically things like procedural voxels or 3D tile generators, but have never gotten far and often gave up on each idea. While that's in part as I was busy with a multitude of things, it's also due to a feeling I've always had working with Godot: The task of setting everything up right is too daunting... in particular knowing you have to write and optimize long scripts for many complex components. During Godot 3 we briefly had something called visual scripting which made this a little easier, but it too felt overly technical and was dropped eventually. There are addons for a lot of things, but it's often unclear what is generic enough to do what you need or what will still be in development for a future version of Godot or which addon works well with another.
And so I've always wondered: What could be done to make Godot even easier and more accessible, for those who aren't good at complex scripting even with GDScript but better at building a world from set pieces? Could the engine provide the common building blocks in a form you can just drag and drop into a scene, where you can tweak values from a GUI rather than having to write script functions? For the longest time I accepted there's simply no way to do such a thing. That is until many months ago, luck made it that I was presented with a beautifully elegant solution called Nodot:
https://nodotproject.github.io/nodot
https://youtube.com/@GodotNodot
Nodot is an addon that adds numerous node types to GD4, except unlike the default nodes which are oriented at technical components and often still require your own script to run (eg: a convex hull collision body) each is a fully functional building block for common world aspects (eg: a physical item that's added to an inventory node when touched). As the most essential example, you no longer need to build a first person character by coding the controls and collisions and animation system: You drag a character node, give it a model and the animations you want to play for various actions, tweak node settings like weight or movement type, and it just works. If on top of that you want to add your own script to do something special you can, but as far as the basics go you can build a simple game without having to write one line of code yourself! If you do the nodes are themselves written in GDScript so a custom script can inherit one and make modifications to produce a custom node of its type, this is another bonus of their implementation.
I realize now this is possible because no matter what type of game you're making and how unique it is, the essential building blocks are the same and can be described as common actors: Players and AI are objects that either move or fly or swim using pathfinding, any vehicle has a number of wheels and a propulsion system that pushes it, items are objects dropped by something and picked up from the ground then added to / removed from an inventory list, stats like health / armor / skills are mere numbers that increase or decrease and affect how other stats do the same, you always draw a HUD that consists of images with text on top, etc. There's usually no need for a developer to reinvent or even heavily customize any of those aspects, yet by default you're still expected to or at best presented with only that option.
Despite how useful and encouraging this solution is, Nodot remains an obscure mod developed by one person or small team: For months I haven't seen any updates on any of their channels, on Github there's barely been a new commit this year. It feels uncertain for how long it may even be developed and if at some point compatibility with the latest version of Godot could break, it's also incomplete with many essential node types still to be done. The solution it provides is a heaven-sent and should should be available to everyone, not a little experiment left to fade into obscurity.
That leads me to my question and request: Could the Godot team please consider either making Nodot an official addon, or providing something like it by default? Even making it an officially maintained addon would help so we know it's maintained and its development speedy... ideally it can be shipped with Godot even if disabled, similar to how Blender comes with many good addons preinstalled (eg: node wrangler) which users can turn on if they need them, different groups of logic nodes could be their own addon so you don't have to use the whole system if you aren't touching a category of mechanics. Having this would make it far more accessible to create a working project, knowing we got everything we need available and can focus on assets instead of worrying how we'll find a dozen addons or write basic components from scratch. This would make Godot as accessible to the average creator as Unity or Unreal Engine, if not even more since those still require some form of scripting (even if node based which is easier).
Beta Was this translation helpful? Give feedback.
All reactions