In the past I've mostly used GameMaker Studio, which has its ups and downs. In GameMaker it's very easy to get started and do common tasks, but the deeper you get the more it feels like you're using the wrong tool. Plus I don't want to pay for an upgrade every time, when I only use the engine infrequently.
When I first heard about Godot engine, I got excited. It sounded to me like it was more powerful and robust than GameMaker, but easier to learn and use than Unity. That sounds like the perfect balance to me, but based on my first impressions, I would say Godot isn't quite there yet.
The goal I set for myself was to make a game for Ludum Dare 41, using Godot Engine. So the week before, I did the tutorials, making it through "Your First Game". I felt like I had a decent handle of things, and that I could figure out the rest as I went. Spoiler alert: I couldn't. I got stuck trying to figure out collision, so I gave up, and switched to making a JavaScript text-based game.
Despite that, I believe that sharing my first impressions will be helpful, so the developers and experienced users can see what Godot Engine looks like to a beginner. Below I list all the thoughts running through my head as I tried to learn Godot Engine.
Editor
- The Godot UI looks nice, and appears to work well. I heard it was made using Godot itself, which is neat.
- I found one "gotcha" in the UI. In the "Export Project" save dialog. The text "Export With Debug" and the on/off button are so far apart they do not appear related. I had to google how to turn off debug.
- I like the support for both 2D and 3D.
- I keep wanting to switch scenes from the Scene tab, but I don't think you can.
- The editor (at least in Windows) pops up a console, which is annoying. It prevents me from easily switching to Godot, because Windows groups the console and the editor window in the taskbar. In order to prevent this, I have to run Godot from the command line.
- I found a bug 30 minutes in, and a second bug 60 minutes in.
GDScript
- I have experience in Python, so I was able to get started right away.
- Having built-in Vector types is nice.
- It's a little weird to access self properties and methods without using "self". This causes local variables and self properties to look exactly the same in code.
- It seems convoluted to need to use "export (PackedScene) var _" set to a scene in order to create an instance of that scene.
Making a Game
- The "everything is a scene" concept seems cool, and possibly useful.
- The process for making a user interface actually seems quite nice.
- I often don't know what type to make parent nodes.
- The path feature that you can draw right onto your scene is a nice feature that I don't remember seeing anywhere else.
- I have no idea how to control the game's resolution. I found settings for window size, but what if I want to upscale a pixel art game? What if I want the window size to be configurable? What if I want to use hi-res sprites that work for any resolution?
- The signals system doesn't feel quite right to me. As a programmer, I feel like this should be done in the code, not in the editor. Plus I'm not really sure which node you should use the signal from, and which node you should connect it to. I can't tell if this is just because I'm not used to it.
- The Input Map system seems nice, though I haven't used it much yet.
- The process for creating a TileMap is super complicated. This is a huge downside for me. Plus, the fact that you have to save your scene as a TileSet then later import it means you have to do that every time you change something.
- The built-in physics seems good, but hard to figure out where to look when you want to configure it. (Project settings? Node properties? Script code?)
- I wanted to trigger a function on collisions between a RigidBody2D, and tiles in my TileMap. I had no idea how to. This caused me to give up on using Godot Engine for Ludum Dare 41.
- I considered changing my RigidBody2D to an Area2D, since it just needed to move and collide. But I didn't see any way to set a velocity on an Area2D. Weird.
Conclusions
Here's the big question: Is Godot ready for prime-time yet? To me, the answer is no. Conceptually simple tasks like making a tile map, and responding to collisions did not seem easy or straightforward. Godot seems like it has a good backend, but trying to get a basic game running feels a little obtuse and complex. I often found myself thinking that information is too scattered. It feels like behavior is defined in many different places, so I don't know where to look.
Please keep in mind, that these are just my first impressions, and at the time I was in a rush trying to learn the engine in the middle of Ludum Dare 41. I'm sharing my first impressions in the hope that they can be used to improve the Godot Engine, and make it easier to learn for other new users. I believe the new user experience is an important one, and the less roadblocks new users hit, the better. For me, it isn't enough that there is a way to do something, there should be a way to do it that is intuitive and easy to figure out.
If you have any questions, let me know. Thanks!
Note: Crossposted to https://www.reddit.com/r/godot/comments/8g2uuw/first_impressions_of_godot_30_coming_from/