Unity or Unreal for your game

Imagine you would like to develop your own game. What tool is the best for you to use: Unity or Unreal? Some time ago I wrote this post and compare the development side of Unity and Unreal and I would like to update. Both Unity and Unreal are equivalent and it is possible to do the same things in both. Some things are easier in Unreal, and some are easier in Unity.

No visual tool, please

As I wrote before, don’t even try any visual programming unless your game has extremely basic programming. Visual programming is like hammering nails into a board using rock. Yes, you can do it and if you have only a pair of them, then it is ok. But if you have hundreds of nails then you need to learn how to use a hammer.

And it is not only because hitting nails with rock is slower. Programming is quite different from let’s say building a bridge. The bridge plan never or quite rarely changed. But when you develop a program, you will constantly be changing and redesigning it.

You will start with a small prototype. In a few days, you will have hundreds of lines of code, in a few weeks, you will have thousands and in a couple of months, you will have tens of thousands of lines of code. Year of work and you can get a hundred thousand lines.

In the beginning, you will mostly add new code and sometimes change old code. In a few weeks, you will change a lot of old code and in a few months, you will mostly refactor old code and will not add much new code.

And when you refactor old code, you will need tools that will help you do that. Find references, rename functions and classes, change order parameters, extract code to functions, generate basic stuff, etc. Also, you will need tools that will help you debug code. The breakpoint on conditions, see parameters of functions in the call stack, see local variables, evaluate expressions, etc.

Visual tools simply don’t have anything like that or have them in a very primitive form. As a result with time your development with visual tools will go slower and slower compared with real coding that can use the full power of Visual Studio or similar IDE.

Good refactoring and debugging tools require a lot of investment from very skilled people. Visual Studio is the main development tool from Microsoft, and they can afford to invest a lot of money and hire very skilled people to provide such power. Moreover, refactoring is one of the biggest features of Visual Studio.

But visual tools in Unity and Unreal are a tiny part of their product. They cannot invest $100M - $1B to make visual tools in pair with Visual Studio or a similar IDE. Most of their revenue they get from professional game development studios, and they already have professional developers that don’t need them.

As a result, if you compare differences in speed, at the beginning visual tools will slow down development by 5 times but, in a few months, they can slow you down by 100 or more times. For example, in Unreal to find references to a certain interface I had to search the name of that interface in binary form in all files. It is quite slow and not productive.

And if you have a new member in your team, it will take even longer, because you may simply remember your code, but new members will have to find all dependencies in your code by themselves and it will take a lot of time.

But it is not the only time. You also cannot retest your product in all possible combinations after every major refactoring. As a result, you will release games with bugs and that will upset your customers. Some developers will try to be safe and will try to avoid changing existing code and try to build duplicate systems. But this will work only for a short time and the situation will become even worse very quickly.

In conclusion, I repeat – don’t use visual tools at all. Learn a real programming language and it will make your life much easier. Yes, you can create the game using visual programming, but it will take you a lot of time.

Just as an example, when I port my game from Unreal to Unity, it took me a lot of time to find all logic in my own game. I didn’t work on it for a few months, and I already forgot everything, and discovering was quite slow and painful.

But when I didn’t develop games for a few months in Unity, I was able to catch up very quickly because Visual Studio makes it very easy to see all dependencies and I was ready to continue development in a couple of days.

Why Unity

If you don’t know any computer language, then you must choose Unity. Period. Even if you know some programming languages, it is still better to choose Unity. Let me explain why. As I wrote above, visual programming works only if you have almost no logic in the game or if your logic is quite primitive. For everything else, you will have to learn C++.

C++ is an extremely hard language. It has a lot of tricks that stumble even professional developers for hours. Learning C++ will make your life very difficult and miserable. And Unreal will add its own quirks on top of it.

Even if you know C++, I will still recommend learning C# and using Unity instead. Developing using C++ in Unreal is very slow. If you change any header, you will wait at least 15-20 seconds for the compilation to complete. But most likely you will have to restart Unreal to see your changes and it is quite slow. Sometimes Unreal will just crash.

Changing .cpp files is faster but it will still take considerable time. And in Unity, the same project takes 3-6 seconds at most, but they promised to greatly reduce that time this year.

Simply put the cycle of changing code, running, and seeing the result is much faster for most cases in Unity. And as a result, if you are developing your own game, you will simply do much more per day. This is especially important when you try to debug some complex problem.

And C++ refactoring and reference analysis are quite basic. It is not as bad as visual programming but still bad. Comparing C# refactoring capabilities is like comparing a car 100 years ago and a modern electric car. They are quite hard to even compare.

When to choose Unreal

I can see that the only reasonable case is to choose Unreal, and this is when you want to work in a company that develops games using Unreal. Another option is to work in a company that uses a custom engine that is almost always written in C++. In both these cases, C++ knowledge will be necessary and will benefit you.

Conclusion

In conclusion, I suggest using Unity for your personal game development even if you know C++. You will be much more productive.

I hope it will help someone.