Benefit of using C++ instead of BluePrint?

Sorry if this is a raging issue or answered somewhere else, I haven’t seen it. Plainly is there a reason to code instead of script with Unreal? Is there a real benefit in coding? I was following a book to code in unreal and something, like adjust the rotation of a door, was very straight forward when compared to blueprints, however, blueprints do give a better sense of organization which is why I am still using it. I am scared that at some point in my development(Multiplayer 4v4 game) that I will realize I needed C++ and must start over or something. Please your honest professional opinion is highly appreciated. Also, my University courses that start next month are for Java… I don’t know if that matters at all but I felt I should point that out in case it is a sticking point. Thanks!

as far as i was watching youtube video from epic engine preview they mention that blueprint are slower compared to c++ code and if you are doing multiplayer game then you should go with c++… every fps counts in multiplayer game :slight_smile: it’s hard to get into c++ as i’m trying to learn it (not the c++ syntax but the engine functions/classes it’s huge library) but i will benefit from it so much later.

Unreal Engine is written in c++ not blueprints. Blueprint is only a higher level layer that provides access to some functionalities but not to everything. Especially when it comes to server related programming you can find yourself at the situation that you simply cannot access relevant areas of the engine, whereas in c++ it is possible to work your way around the problem. Since blueprints can be nativized, the speed issue is somewhat resolved by turning your bps into c++ source code, but it does not replace a programmers ingenuity - which is key importance here - because there are great many ways you can write your program, but you cannot model these in blueprints only.

Blueprints are good for calling/executing the functions written in c++ (which actually is what happening in most cases with the built in bp nodes), that helps you to look at your game flow on a higher level, but you must write your performance sensitive logic (eg iterations, complex mathematical calculations) in c++ to get the maximum out of unreal engine. It is true for many development environment not just this specific case.

In comparison, i’d say that regular java development have similar attributes to blueprints, since your java program will won’t turn into optimized machine code, but the large portion of your program is going to just call functions of the java runtime environment - which is written in c/c++ and that’s where the large portion of a java program’s performance is coming from.

There is one: maintaining the code. Simple blueprint game is several screens of spaghetti, sometimes when you change structure or blueprint interface there are some disconnected pins, it is hell to find them all.
In C++ same code that takes several screens of BP can fit in one screen. Also C++ has much better comment system. In comment and documentation BPs lack a lot of functionality.

have there been any popular high quality games done with blueprints? Like did Gears of War use any of that?

I don’t think there is any ‘Benefit’ of using C++ over Blueprints. That’s not to say you shouldn’t use one over the other. I think maybe the word ‘Benefit’ is probably over simplifying which you should use.

IMO, the key is to use the ‘best’ system for what you are trying to achieve. For lower level systems I use C++ because I find it far simpler to implement what i’m trying to achieve, and then expose this to the Blueprints system… but for higher gameplay type things, I prefer to use Blueprints solely, i.e If I need to open a door or animate a simple mesh etc. That’s not to say these too couldn’t be done in C++, i just find the ‘game designer’ type interactions simpler to keep within the editor.

Nativizing blueprints closes that gap by a lot. For the vast majority of things, you’ll find very little performance difference between c++ and NBP. At that point, you’re basically picking your poison as to which is less hassle to maintain or work with. Personally, I prefer visually debugging things, opposed to scanning through a sea of lines of text.

One path, that a lot of people take, is to rough out a system with BPs and when they have it working correctly, they rewrite it in c++. Unless you’re adding in some realllllllllly low level core functionality to the engine or you’re making some system that’s going to be ran by hundreds of actors at once, you probably won’t notice that big of a difference in performance between the two.

You can code entire games using Blueprints only.
But if you’re not a programmer in the first place, you’re going to have a really hard time keeping everything clean. And if you have the skills to maintain your Blueprint code clean, it usually means you’re a programmer. And if you’re a programmer, you usually do your code architecture in C++ because it’s better performance-wise and easier to maintain / organize (as Nawrot says).

But Blueprint gives us something unique: the power to create tools for everyone in the development team.
**
To me the best situation is when you have C++ programmers who develop Blueprint tools for anyone in the team. Then you have C++ parent classes of most of your stuff (weapons, pick ups, skills…) and you build lots of Blueprint child classes to customize them.**

You also have lots of stuff that are not exposed to Blueprint, which means you’re going to need C++ anyway at some point in your development (hosting / joining without the Advanced Session Plugin, modifying players’ inputs at runtime, or even just modifying sound settings). But I developed an entire game using 99% of blueprints and creating just the few nodes I needed in C++. It’s not like you have to redo everything.

If the question is: the benefits of building your code architecture in C++ over BP:
Pros:

  • easier to maintain
  • better performance
  • more features exposed
  • no Blueprint awkwardness (instability error, corrupted files)
  • usually gives you a better sense of how to properly do things

Cons:

  • less entertaining to learn
  • less friendly for anyone else involved in the project who doesn’t know about coding
  • slower prototyping times
  • you can’t soft reference assets

I agree and disagree in the same time. If you’re a good programmer, you’re going to end up with a slightly slower code. If you’re not a programmer, your blueprint is likely going to be a mess, resulting in slower process times for most of your systems.

Blueprint is slower by itself, but not that much. What really makes him slow is the fact that you usually don’t build something as clean as you do in C++. Simply because it’s convenient to drag wires all over the place and quickly do what you want to do.

It should be noted that C++ has longer compile times, sometimes significantly so, so prototyping is way easier and faster in blueprint. But there are a few things that blueprints don’t have exposed, so you have to go with C++ there.

The beauty is that you can mix and match both at will, and you probably should. I find enums and structs to be exasperatingly cumbersome to create in BP, so I do that in C++. Long algorithms are also easier to write in code. Gameplay stuff is usually a breeze to do in BP and is much faster to iterate upon. It all depends on your preferences and what works best for your situation.

You absolutely should learn C++ in the engine on a base level, but you don’t necessarily HAVE TO to write an entire game. But you’ll be limiting yourself. Similarly, you’ll probably be a lot less productive scripting only in C++.

My advise is this: do not overthink and worry. Just start right now, and use blueprint (forget about C++ for now ig you are beginning) and slowly over the time, you will know the right balance between C++ and Blueprint. The right balance is not the same - they guy who is fully conversant in C++ and API may want to recode everything in C++ etc etc.

Obviously, die-hard coders are going to preach c++ and rightfully so. C++ works great and is great for adding in really low level functionality like if you needed to modify the rendering engines. But why stop there, I mean you could always go even lower level and just write it all in ASM or even better, write it all in binary ASM… On a one line dot matrix precomputer 1000. Point is, lower level coding does NOT always equal better. Ideally, for UE, everything would be c++, but it’s a time vs functionality vs debuggability race.

I will say that if you took a pro c++ coder, a pro bp’er and made them face off in a race to create some custom complex game mechanic(something non-standard that they wouldn’t have memorized already), I’m almost positive the bp’er would win by a landslide. As I said earlier, the application and time constraints dictate which path to go down and you’ll probably end up using both.

With C++ you have full access to everything.

Blueprints only have a fraction exposed what C++ has.
(which in my eyes does not make sense)

Do you need the full access? Are you writing a portion of code that drastically changes the functionality of core engine? If not, then you probably have little to gain in having full access. Obviously, if you’re rewriting something like the character movement component, then yeah, you’ll probably want to do it in c++ and expose the inputs/outputs to the BP editor.