I’m looking at some modern games and usually I can guess which ones have definitely not been made in Unity. These are usually these are procedural ones like:
Minecraft
No Man’s Sky
Or games with infinite landscapes. I’m sure games like Fez and lots of indie games can be made with it. They might run slightly faster in their own game engine, but with the power of computers today that isn’t a issue. I was surprised that Broforce was made in Unity since that it has a destructible landscape but I guess that’s just a simple 2D game.
A game like Doom or Quake would run faster in its own game engine since the culling is optimized for tunnel based games. But could be made in Unity because computers are faster these days so they don’t have to be overly optimized.
Also ones with strange landscapes that go beyond Unity’s terrain features probably have their own game engine.
All of what you named can be easily made in Unity. In fact, a partner and I made Minecraft in Unity a few years back as a hobby project. No fighting against Unity, just didn’t use a ton of it.
I think your definition of “easy” may be different from everyone elses!
Also, was your version of Minecraft as fast as could be done with doing it from scratch?
That’s all hypothetical really. If developer A uses unity and makes a fantastic game, with very high quality, efficient code, it’ll probably be all good and well.
If said developer A also decides to recreate said game using nothing but original code, as in a renderer, physics engine, sound engine, lighting system, so on and so forth… that game might just suck. It might not be nearly as fast because it doesn’t have a huge team of experts writing those systems, and even though developer A rocks when he uses unity, he might not be so good at developing a game engine…
Consider the flip side as well… if developer B did the opposite, and wrote from scratch a game engine specifically tailored to his game idea, and did it efficiently and knew what he was doing, it might be a great game. Then when it becomes somewhat successful perhaps he wants to target more platforms, and decides to recreate it within unity. Then some of the techniques that he used to make things more efficient might not work so well within unity, or just plain won’t work without access to source code. In this case maybe the unity version would suck.
What I’m saying is, you can paint on the tried and true canvas many people use, or you could get better at working with wood and glue and create your very own canvas - but how good of an artist are you? Do you think you can make a quality canvas? Sure you could make it the exact dimensions you need, use the exact type of material for the surface to help your paint stay good and not drip… but ultimately it is about having not only the canvas and the paint, whether you made it or not, it’s about whether or not you approach painting right. How refined is your technique?
Ok so bearing that in mind, unity is right for a lot of game types, and custom built engines could be right for lots of game types too, so choose the tool that fits you best, and meets your needs and expectations, but perhaps most importantly also fits your ability!
Yes, an engine designed perfectly suited for the job would in theory be faster. Minecraft runs in its own engine, but was considerably slower than the version we built two years ago in Unity. Not sure what that says about Mojang. Luckily for us, Unity is moduralized enough to have an extremely low overhead on bit you don’t need. So really, Unity did the low level work we needed, and we turned everything else off. Did our own lighting, some form of “culling”, manually handled all the voxel and chunk data, and only used Unity as a glorified platform rendering interface.
I heard No Man’s Sky used a modified version of Unity. Not quite sure though.
But yeah, pretty much any of those game can be done in Unity if you don’t abuse drawcalls.
Unity allows easy modification of geometry at runtime, it has object layers, spawning stuff is easy. Also, you can easily insert something like raytraced or procedural primitives via shader system.
So it is a good fit for procedural games. (even thought it might not be the most performant option).
For “realistic” and high-fidelity graphics, though, you’ll have mixed-mode lighting problem.
Collision and movement.
You would need to ditch unity’s built in system and write your own.
In fez 2 dimensional shape of 3 dimensional object is used for collision detection and depth component is ignored.
|....
|.A..
|....
|.BC.
+----
^^^ This is a level view from above. “.” designate empty space.
Player is standing at “A”.
While the game is rotated to see “A. B”, player cannot walk from A to B.
However if you turn the scene (so you see “BC”), then player can walk from A to C in one step.
Because A and B are treated as the same space.
Yeah, I can write that.
But “easily” is something that a newbie can write in a half of a day. And ye average newbie is very likely to have trouble with this.
When the perspective changes in Fez, the player is locked in space and the world rotates around them. Because of this, we can disregard 3D collisions entirely and instead have everything take place in a 2D collision system. Assume each block is located in a 3D grid and pre-generate 2D colliders that you switch between when you change perspective. There are a few outlier situations you’d need to solve for (climbing vines and switching perspective/other situations where you rotate to be behind an object) but it’s a lot less complicated than it seems at first.
One series of games that I’ve wondered if Unity could handle is the Total War franchise. I could imagine a lot of low-level optimizations in those games to get them as performant as possible, that may not necessarily be available to Unity. Even with the native interface, and the lowest possible level of shader programming in Unity. If anyone thinks it would be possible, I’d like to read details on how to do those optimizations.