It really depends
- Blueprint in Editor (Poor)
- Blueprint in cooked development build (OK)
- Blueprint in cooked release build (Better)
- Nativized BP in cooked release build (Good)
- C++ in cooked release build (Great)
There’s tons of factors when it comes to RTS’, mainly how mindful are you with your traces, for example performing target search loops only every second or so, not every frame. Same goes for height tracing (adhering unit to landscape).
From my experience, by far the biggest killer of performance for RTS game is collisions. Even with physics disabled, just collision handling itself among units or between units and landscape can bring it down to crawl. If you use smart line traces to adhere units to ground (I trace every time unit moves X distance away from the last traced point) then you can disable collisions between the ground and the units.
Ideally, you could disable collisions between units all together, and use something like RVO Avoidance to keep them apart, however even that is not perfect. I settled for a solution of using RVO Avoidance combined with collision only between the units. RVO keeps them apart enough to minimize the amount of cases where more than two units collide, as collision cost grows by the exponent of the units participating in the single collision. If you have one blob of 50 units all rubbing against each other, the collision complexity cost is 50^50, which is just crazy.
The approach that worked for me well so far when creating RTS is to start from the nothing ever collides with anything state, and then very carefully introduce collisions between any sets of objects, be it static or dynamic, only when it’s really, really necessary.
It’s worked well so far for my game:
The absolute bottom line is that the lowest common denominator here is not UE4, but rather C++, which is very performant. So even large scale RTS is definitely possible. The difficulty of achieving it is whole another discussion though. The more unique the game will be, the more “bending with a hammer” will UE4 require, to the point where if you are skilled programmer, you may reach a point where you think writing your own engine may be a better way. I am nowhere near that experienced or smart, so I just use UE4 and so far it’s working well.
Also, you can push it to the extreme by going Deserts of Kharak way:
They’ve essentially build an external C++ application which does high performance simulation of all the units and their interaction in 2D space, and the game engine, in their case Unity, is just used as “visualization layer” to display unit movement and interaction based on the data supplied by that external, simulation layer.