Cheer up, schetle, you’re not alone!
I agree with Brandon that documentation is a big issue. But I think you may have hit the nail on the head with your list, especially number 3.
I really, really like Unreal Engine 4 and am going to stick with it for at least the near future. And since my game is not a multi-player FPS, I’ve run into a lot of obstacles, just like you. However, I’ve yet to hit anything that couldn’t be fixed or worked around. And the effort it took to do so is more than justified by the quality of the engine. It’s an AAA engine for free. Don’t let the amazingness of that get lost when you run into little problems.
But speaking to your complaints, if I could change just one thing about the whole design of UE4, it would be to have the option of ditching the entire editor thing. It’s a spectacular feat of engineering, the way it recompiles code on the fly, interfaces directly with Visual Studio, plays the game in the editor, and so on. But I don’t know why any serious C++ developer would want it.
Visual Studio is incredibly good at organizing your code, compiling, debugging, and so on. So let Visual Studio do those tasks and don’t try to move them into the game engine. Having to say “Add Code” in UE4 every time I want to add a new class is infuriating. Any project beyond “Tappy Chicken” will easily grow to have hundreds of classes. Just let us create code the way we’ve been doing it for decades. If you want to provide a level editor, material editor, particle system editor, and whatever else, then please do – but make them independent, stand-alone tools and don’t force the developer to use this all-in-one environment for everything. Programmers (at least the ones I know) hate that kind of environment. Most can appreciate having the option to point and click and create a new C++ class (or whatever), but any experienced programmer looks at that feature and says “that’s neat” and never uses it again.
Where it really causes you grief is when you have to do something beyond the usual routine. Merging two projects, for example. I just had to do this and it was a nightmare. It’s a difficult enough process, even without the added complexity from UE4. You have to copy tons of files, rename files, change variable and method names, refactor, yadda yadda. But in UE4, now you also have to worry about all the added crud that the editor tacks on. Am I going to break all these “generated” files? Do I have to click “Add code” all over again for every class I’m bringing in from the other project? Uh oh, my class names can only be 32 characters long because of UE4’s arbitrary limitation. Hmm, how do all these C# files affect the build? Can I put some source in this other directory or will the editor not see it if it’s in there? Oh no, one project is from 4.7 and the other is 4.8!
None of that is a dealbreaker, of course, but it turns a task that should take an hour or two into a headache that takes multiple days. I’m sure anyone who just wants to play around with blueprint scripting finds the all-in-one design very convenient. I can’t imagine any experienced C++ developer finding it anything other than unwanted overhead.
Anyway, my advice is to stick with it, because there’s nothing out there that’s better. But I totally empathize with your frustration.