There is a lot of questions like:
- Can I create whole game using Blueprints only?
- What about performance if I’m using Blueprints?
- Which should I use – Blueprints or C++?
I will try to answer those in this post.
Basically Blueprints are powerful for rapid prototyping. You can create whole game prototype (or functionality prototype) in Blueprints much more faster than in C++. Yes you can create whole game fully in Blueprints but there are a couple of things that can’t be done in Blueprints:
- Fully multiplayer game, (MMO, Coop games) there is still lot of things that need to be pushed to Blueprints. It depends on your game. For my example – Coop Standing Shooter I can create multiplayer with Blueprints only. But if you are creating MMO or something bigger than I’m you should learn C++,
- SDK support. For example If you want to use Game Center Multiplayer you need to implement it by yourself in C++, if you want to add your own analytics it need to be implemented in C++, if you want to implement AdMob you need to do that in C++. Basically all new functionalities need to be implemented in C++,
- There are still problems with Data Driven Variables (from XLS) in Blueprints. In our projects we needed to create them in C++. It’s easy but still you can’t do that in Blueprints only,
Another things that you should think about when doing Blueprints only game:
- Blueprints are 10x slower than C++. If you have math or something in Tick it will be slower. On PC you won’t see that much change but on consoles and mobile you will see the difference,
- Full game done in Blueprints is hard to read. You need to think how can you increase readability of your blueprints. (use components, split your blueprints, use object-oriented methodology – don’t try to put everything in one blueprint – I will be trying to learn that later in blog)
- Cycling References – this is the most important thing that you should think about when developing a game in blueprints only. It’s really easy to come up with cycling reference issue. Before 4.7 your game will crash, currently 4.7+ blueprint that have cycling reference will not work correctly. If class A have reference to class B, and class B have reference do class A you are increasing chance for cycling reference issue. If you are changing variables from class B on class A chance for cycling reference is greater. The same thing is in C++ but programmers know about it, level designers not. You need to be careful,
From my experience the best approach is:
- Prototype your game or functionality in blueprints but extend from classes created in C++,
- If you are happy with your prototype move all math to C++ (which will be based class) In blueprints leave events and simple functionalities that doesn’t are much math involved. This step is really easy for someone who doesn’t know C++. In blueprints you are implementing code you can do it in C++ as well if you know how to create a class / functions / variables and compile them,
- Always keep in mind that someone will be using your Blueprints. Thanks to that you will focus on readability,
- Iterate -> learn -> improve. Don’t be afraid to create something from scratch if you are feeling that it can be implemented better with more flexibility,
So you should be using both. In this blog I will use Blueprints only but I will try to point out which functions should be moved to C++.