We've spent last year and a half learning Unreal Engine 4. It's indeed a powerful and high performance engine with impressive graphical results which is pushing game industry forward. However, as a single indie game developer following certain vision, I found Unreal unfit for my purposes to a point where I've grown frustrated with it and I don't have fun using it anymore. So let me welcome 2021 with a rant!
game development is complex and so is Unreal
Game development is a complex process requiring wide array of different skills. That's why games are usually made by groups of people each specializing in certain aspects such as:
- character design
- level design
- sound design
Unreal engine is a platform for all of those people to work together. It allows artists to focus on art and programmers focus on programming without needing to know things outside of their individual expertise.
However, I'm just one person needing to do most of these tasks myself and I found using Unreal Engine like single-handedly operating a huge battleship which is obviously built for larger crew. Not fun at all, what I truly need is just a fast small boat which I can fully control alone.
right tool for the job?
Unreal provides nice tools/workflows for creating levels and assets by hand but no real support for procedural generation which I intentd to abuse as much possible.
Unreal doesn't support dynamic/destructable terrain. I use third-party Voxel Plugin to workaround this but it comes with its own set of challenges, most notably a need for custom dynamic 3D navigation system.
One of my main reasons for using 3D (aside VR) was the vision of playing on planets. Unreal has no support for planets. As a matter of fact, the gravity vector always points down the Z axis so even a simple thing like directional gravity requires custom code. Built-in navigation can't be used on planets.
Unreal doesn't really provide me much in terms of what I need so I still need to create all that stuff myself but with the restrictions imposed by the engine. On the other hand it provides lots of stuff I don't need which gets in my way.
visual programming with Unreal Blueprints
I was initially very excited to try visual programing in the form of Unreal Blueprints because I'm passionate about computer languages and I spent lots of time exploring them. So I wrote (drawn?) most of my Unreal code in Blueprints including slightly complex problems and I hit following issues:
- Blueprints are static and not very flexible - inferior to C++ code
- graphs are harder to read than standard code
- graph management is pain
- refactoring is nightmare
- basic tools I'm used to when programming are missing
I conclude that Blueprints aren't suited for general programing and should only be used to prototype or as an interface for non-programmers. Blueprints are completely useless for my use case - back to C++.
Unreal C++ programming experience
In order to create something grand, I'm surely going to need some external libraries. For Words of Power prototype, I integrated beautiful open-source C++ scientific library called mlpack as an Unreal plugin because you can't simply compile libraries into the engine and use them... because reasons. And that was truly a horrible experience. What would be 5 minutes in python took two weeks of Unreal-inflicted pain. As usual Unreal documentation is such that I had to reverse engineer other plugins and search depths of the web to actually get mine working. Hot reload isn't working for plugins so I need to close and re-open Unreal every time I made a change making iteration unpleasant and slow. Unreal build system is poorly documented too and I feel like I have no control over it regardless of hours spent looking at it.
I was able to integrate my plugin and train a GMM model with it from within Unreal Blueprints but each time I had to touch the code and deal with Unreal bullshit, my will to do so again dropped drastically. At this point my will to do Unreal C++ is at negative values because it's a direct opposite of fun.
Unreal documentation is... well, unreal. While there appears to be lots of text, when I actually go google a solution to a particual Unreal problem, it's never the official documentation that holds answers. Large part of Unreal learning materials is in video format which I don't like. When I'm writing C++ (text) I want text, not video.
It's now clear to me that the only real documentation for Unreal Engine is its source code. I'm used to high quality docuemnation and examples and that's where Unreal consistentnly lets me down. Learning is earned with sweat and blood.
Unreal way of life
Unreal Engine is a huge battleship of a sofware that provides mortals with unseen power but at a cost of their souls. In order to become proficient with individual subsystems, one needs to specialize and spend large quantities of time and effort learning and experimenting. Poor documentation ensures this process is painful. In other words it's a hard work.
I reckon that might be nice for people looking for a stable job at a gaming company. I believe Unreal developers and artists won't have shortage of work anytime soon and high entry barrier means that people who traversed it are more valued.
However, I already have a nice job as an open source packager and game development is my hobby/passion. That implies I want to have fun and Unreal became the opposite of fun to me as soon as I stopped playing with it and started to solve real problems. Furthermore I prefer generalization over specialization so after a careful research and consideration I find myself unwilling to offer my soul as a sacrifice to Unreal Engine's eternal hunger.
With this I consider my 1.5 years long research into Unreal Engine 4 as completed. I studied most of its subsystems to some depth and I'm ready to join an Unreal-based project with others if needed (for example VR project), but I found it unfun and unfit for my purposes as an single game developer.
Time to play with some other tech that's actually fun to use. Godot looks promising, I think I'll give it a shot.