Blueprints are like training wheels on a bicycle. You can ride a bike and you probably won’t crash and fall over, but you’re still riding a bike with training wheels…
Coding in C++ is taking those training wheels off. At first you’ll be pretty wobbly and unsteady, probably will crash a lot, probably will skin your knees and get a lot of frustration, probably doubt yourself a lot, and be tempted to give up, but with a lot of persistence and practice, you’ll eventually get really good at it and you’ll be way better off for it. Getting good at C++ is a skill which is transferable to other applications and programming platforms outside of gamedev and UE4.
When it comes to UE4 dev, I personally prefer C++ for a few reasons, mostly due to hidden drawbacks of blueprints:
-Blueprints can quickly turn into visual spaghetti, especially with crossed lines and stuff.
-It’s hard to see at a glance what is happening with blueprints. Well formatted code is much easier for me to read.
-Blueprints require maintenance to keep them aesthetically appealing and readable. That means managing the node positions, making sure lines don’t cross too much, trying to keep nodes aligned, etc. These are overhead costs you have to pay for using blueprints, and if you don’t pay them earlier, you’ll pay for them later when you have to come back and maintain them. It’s very similar to code comments…
-Have you ever wanted to copy a bunch of functions from one blueprint to another? It’s a pain in the neck. You have to manually go and recreate each function, set the input and output parameters, and then copy/paste the node graph. With code, you just copy/paste the code and change the class scope. You can be done in a minute (using find and replace).
-Native code has faster performance (but it’s generally not important – algorithm choice is much more important!)
-Code debugging is way better because you get to use the power of the visual studio debugger. You can set breakpoints on any line, traverse up and down the call stack, set watch variables, step into functions, etc.
-Code is a lot cleaner than blueprints. Try to do this in blueprints and see how long it takes you:
for(int b=0;b<100;b++) MyArray** = (int)(FMath::Rand() * 100);
MyArray[a] += (a%2) ? a*3 + FMath::sin(a) : a * 2 + FMath::cos(a);
(this took me 2 minutes to write)