Godot post-mortem
Heya, well, we submitted into the "Unfinished" category so not as great as hoped.
Godot was interesting.
TL;DR: Would try again (don't feel I sufficiently exercised). Would not commit to big project (yet).
Pros
----
- C# integration was _O.k._ and beneficial since no extra learning curve of a new language. Allowed using my favourite IDE -- Rider -- which was great.
- I really liked the quick iteration experience. If you're only changing code, you can hit F5 and run with Rider debugger attached. It didn't seem to allow edit-and-continue which was a shame.
- The one-script-per-Node system, while restrictive to start, was actually nice and clean. It definitely encouraged a proliferation of nodes but did make it super-obvious in the Editor!
Potential improvement: A slight tweak to the Node creation workflow would be great here. You could specify (1) a class name, (2) the Node super-type (e.g. `Area2D`) and (3) a path then it create the new Node, create the class at the path and attach the script to the node and leave you in the IDE ready to code.
- Prefab workflow is really neat. I'm a Unity user so that's what I think of it as. Godot uses a scene as a prefab. You just instantiate a scene (e.g. one holding a baddie) into another one (e.g. the world). This also means you can run a prefab scene standalone -- there's a button for it! Neat!
- Multi-language stuff worked fine. I wrote most of our code in C# and integrated pluggable behaviours that I created in Visual Script (for our Designer to continue).
- Visual Script is similar to Untiy-owned Bolt. (I've only experimented with it but my experience in the latter meant I felt comfortable in the prior.) I successfully created custom VS nodes.
Potential improvement: It would be nice if the custom VS nodes appeared in the list of nodes you can add _and/or_ you could drag a custom VS node from project tree into the VS graph.
The workflow otherwise is adding a "Custom Node", go to the Inspector, click the script field, select "Load" and navigate the file browser to the script you wish to add! Pain.
- Live game inspection is present (but I only discovered in final hours!!!).
- Godot Discord is super-active and filled with lovely helpful people! It's got many channels for all your needs so go say hi! (link is from https://godotengine.org/community in case you fancy other socials!)
Cons
----
- Moving or renaming things is hell/hard. Godot uses fully-qualified strings to reference things which means if you move or rename a file, you won't have confidence whether everything will still work. Luckily _most_ of the files are text so if you're happy with a little multi-file search and replace (+/- some manual fiddling), it's fine to fix.
- Prefab references default to strings so you'd want to build a layer on-top of them to protect yourself. Mid-gamejam wasn't the time for me to do this.
- Visual Script persists as binary files so VCS incompatible. Eugh! Also meant anywhere they used renamed things, everything broke! On top of that, the VS Editor intermittently thinks the VS has been modified without you feeling you've done anything so you face the dilemma of committing an extra version or risking reverting the unknown change (which I guess risks someone else having to play the same game if the Editor was actually correct). Thank goodness I spotted they were binaries and configured them with Git LFS!
- Bugs:
- The project stopped loading if the code had been built. Fixing required either doing a clean build or deleting the `.mono` directory before Godot would start. (Took a while to solve.)
- The built game stopped running for our Designer after 'some change'. We might go back to trying to figure out what happened but it crippled us by cutting our 2-person team in half!
The error was:
can_instance: Cannot instance script because the project assembly is not loaded.We tried 5-6 suggestions from Googling but still haven't solved at the time of writing.
- Signal auto-wiring stopped working. At first, when I clicked create, Rider would spring to the foreground with the new method inserted. However later in the project it just sprung up with no changes. I got used to copying the proposed method name before pressing create but then I had to manually copy all the arguments over too.
- The Editor sometimes crashed without leaving indication of cause. I accept programs crashing but I clues on what I should do to fix. I tried running Godot from the DOS box with `-v` flag to see if I could see anything in there. The (mono) log files usually didn't say anything and sadly neither did the CLI logs.
- Rider output wraps at too few columns and I couldn't figure how to increase. This was one of the reasons I liked running Godot from CLI since I could redirect it to a file.
- Documentation was so-so -- fine in places, placeholder in others. Most had C#-specific samples but some just lacked.
- Couldn't figure out how to remove entries from a Dictionary in the Godot Editor!?
- Visual Scripting has its usual problem when created by programmers -- it's just programming without the syntax. Worse, it's super-long-winded.
Bright-side: There's a neat `Expression` node where you can type stuff in! Used this for maths expressions = much shorter!
- There apparently _is_ Editor scripting but I didn't find a quick answer on how to make a custom inspector. The docs became really placeholdery at this point so I changed design to avoid the need. Ironically it might have been a better design but it took me much longer 🤷
- There seems no consensus on how to pronounce "Godot". Seriously. Apparently the original creators have said it multiple ways (yes both the French pronunciation as in the play and as "Go Dot"). I named our project specifically in reference to this 😜
Phew! That's a lot but it's all stuff OTOH. I'll edit this if more things occur to me.
To conclude, despite all the little bumps, I enjoyed Godot. I'm a programmer -- I expect problems -- it's part of the job. Yes I would try again (don't feel I sufficiently exercised) but would not yet commit to big project (until I've done more experimenting).
Source: ldjam.com archive