Hey guys, I was wondering what you guys thought as seasoned programmers. I took a lot of entry level 100 series computer science courses when I went to university years ago (we were taught basics of object oriented programming with Java) however never really kept up with it. I know work full time for the military but like to mess around with game development in my spare time, I understand the realization that my projects will never get too large with the time I have to spend on them as well as the fact that I do it solo, so I was wondering is it worth trying to learn C++ and apply it to game development through UE4? Or should I just stick with the blue prints.
Side question only half related to the post, I really enjoyed seeing all the E3 examples of games made with UE4, but is there any, maybe not full fledged titles, but well known games made or being made with UE4 with Blueprints only?
I think learning any skill is always worth it (especially in computer science), but you aren’t limited to either a C++ or BP project. You can mix and match the two as much as you feel comfortable with. Many of the indie horror games and such made with UE4 are BP only from what I’ve seen. Plus you can always prototype something in blueprints and then try your hand at moving that logic into C++ later (that’s actually a great way to learn the internal UE4 architecture).
So, the long and short of things is do things however feels most comfortable to you according to your goals: If you want to just make a fun game prototype and aren’t strong with C++ - stick with BPs. If you want to brush up on your C++ and feel like making a game is a fun way to do that - go with C++.
I would just advise that whatever route you go, make your project a C++ project rather than a BP project. A C++ project can still be 99% BPs, but going from a BP project to C++ project is a bit of a nightmare IIRC.
I’m not a seasoned programmer like many of the others, but I have been working with UE4 for over a year and from my perspective as someone who had to learn at every step I would say that some C++ is essential.
I do the vast majority of my work in blueprints, but some things, for example passing arguments from the command line (not the console) to the game, require minimal C++ and cannot be done any other way.
There is a lot more that you can only do in C++. Proper loadingscreens, most of the network stuff (Session like), a lot of useful functions from common classes that aren’t exposed, creating DataAssets, etc.
You could probably live without all of that and stick to Blueprints, but if you have the chance to learn C++, please do it. Once you got good enough at it, it will help you improve your game by A LOT!
And you are also able to reduce the chance of nasty Blueprint bugs (Structs are totally buggy in Blueprints for example).
And despite the UE4 things, learning C++ gives you a good feeling for all kinds of coding languages, which means you can learn Java, C# and such thinks in a blink of an eye.
So you would generally benefit from learning it.
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:
Nothing unkind about it, it’s reality. If you’re going to update the engine that underpins your game then you’re going to have to do some work, same as any software development project, you don’t change a core dependency mid-cycle unless you absolutely have to.
While I see your point, migrating engine versions is potentially a bit easier with Blueprints vs C++, I think it’s a relatively minor point set against the various downsides of Blueprints that have already been aired.
If you’re starting out with UnrealEngine and C++, my advice would be to start a C++ project. Start learning how the engine works using just Blueprints, then when you’ve got a feel for things, start building a few simple C++ components and learning how they can be leveraged in a hybrid C++/BP project.
That’s the key thing, neither C++ nor BP is better, but using either one in isolation is definitely not making best use of the tools at your disposal.
Thanks guys for all the help, after reading all your posts I think I will opt for the idea of starting a C++ project, starting mainly with BPs for the project and dabble with C++ as well when I get more comfortable with the code, and also learn how to make the BP and C++ work together.
It’s probably better for you to use C++ if you need to, such as if you want to do something that is either very difficult or can’t be done in Blueprints and otherwise just stick to Blueprints. It may be very frustrating for you otherwise. You can always add a C++ class to a Blueprints project later, even rebase your existing Blueprint onto the new C++ class.
Yeah, my code is a bit unreadable. I intentionally compacted it a teensy bit to illustrate that I can write four lines of code in two minutes to do the same thing that a full screen of blueprint nodes can do. I honestly think it takes more mental effort to create a blueprint node graph than it takes to write the equivalent code. Just for kicks, I did a blueprint version as well. This took about 8 minutes and looks intimidating. At a glance, I would have no idea what’s going on. I could spend another 5 minutes straightening out the lines and stuff, but that’s overhead costs, which again serve to illustrate my point
As somebody who inheredited a 2300-class BP-only project:
Make your baseclasses in C++.
I had to do a massive rewrite of the project’s internals in C++ because the BP compiler started to **** itself at the circular references.
And BP interfaces suck. They really, really suck.
I learned c++ in college, not my major, so I a lot of the c++ stuff on UE4 is still wizardry for me. I will say, that learning about c++ from a book is great help because you will understand the structure of the classes, the inheritance, etc. I would say I was a noob programmer when I started with ue4. Most of my game design was via visual scripting.
My recommendation is, start with blueprints, so you get a sense of how the engine works and how you do stuff. A lot of the functions in blueprints come from c++ functions, so you also get familiar with various elements of the engine, like line traces, character movements, pawns, etc.
But knowing c++ is going to be needed if you want to ship a good game IMO. Already, I had to have my own engine build to fix some steamworks functions which had the wrong behavior of what I wanted. I also had to edit some plug ins in the engine. And now if I need a general function, instead of doing it on blueprints, I have a blueprint function library, where I make generic functions in c++ and just use them in my blueprints. In order to make the game I am currently making, it would not have been possible to do only in blueprints.
Now I think of myself as an amateur programmer. I can read the code and make sense of it. I can write my own functions and fix certain small issues. But my game is still mainly blueprints because I still got a lot to learn. So start with blueprints, and try to migrate little by little to c++, because it will be better for you and your game in the long run.