Edit: I had originally titled this "I'm Not Rolling My Own Tech and Neither Should you"
If you are a indie game developer and you are maintaining your own custom engine, you’re already behind the competition.
The old “don’t make an engine, make a game” advice is truer now than ever. Unity 5, Unreal 4, and Source 2 all have free options and are all reasonably priced. They’re very fully featured and have been used to ship high end games.
Endless Legend and Ori and the Blindforest were both built with Unity
As an indie interested in making games, there is little reason to use anything else. The days and weeks and months you spend adding features to your engine are days, weeks, and months everyone else has spent improving their actual game. Back in ancient times, circa 2000, going from zero to a single triangle on the screen could take over an hour. The limiting factor back then was code. If you had written solid rendering, input, collision, and tools you were way ahead of the competition.
At least an hour, and a lot more time if you want to load actual meshes
Now, getting something rendering on the screen takes minutes if your starting point is Unity or Unreal. The limiting factor now is more likely to be art and design over code and tech. All that input, collision, rendering, asset loading, even cross platform porting is handled. Certainly it has quirks and limitations but it’s already done and getting better every day.
Getting this test mesh on the screen and moving around with Unity took under 15 minutes
You can start right away on the hardest part of game development: actually designing and making the game. Rolling your own tech does have benefits. It’s a great learning experience and helps you understand what’s going on under the hood so you can write better higher level code. You should definitely do this as a student.
However, if you’re working on a game to sell and trying to start a sustainable indie studio, you should have already have this foundational knowledge. It’s now time to make the game, not the engine.
There are some exceptions to using an existing engine:
- Your game idea requires custom tech. It’s harder and harder to come up with cases where you can’t just modify Unity or Unreal. Unreal even gives you full source.
- You think you want to make games, but you actually want to make engines.Making engines and solving technical problems feels good, is challenging, and can be very rewarding, but it’s not the same as shipping games. Make sure you understand this about yourself.
- You do want to ship games but solving tech problems is more straightforward, so when you hit a game design block you retreat to the safe confines of tech improvements. It’s important to recognize and manage this. I’ve fought this battle against myself many times.
I started working on Cannon Brawl way back in college when Unity was not quite as convincing an option as it is now. I rolled my own tech. I used C# and XNA and did all the input, collision, and rendering stuff to robustly handle what we needed for the game. I wrote a particle effect editor which can create nicely authored effects and a visual UI layout tool. The tech did exactly what we needed for the game and we successfully shipped using my ‘engine.’
For a new game we’d want features our engine doesn’t have like fancy 2D lighting, a better shader pipeline, better integration of 2D and 3D assets, 2D animation tools, and easier porting options to consoles. It’s a bit of a pain to get xna/monogame on the PS4 and Xbox One.
I could spend the time required to add all those features to our tech and rewrite it so it’s easier to port to consoles, or I could just download Unity or Unreal. There would be a learning curve and some stuff that isn’t as nice as if I had done it myself, but the time savings are huge for everything else an existing engine provides.
From a business perspective, our next game would be built on top of an existing engine. If you’re trying to make a business of indie games, your game should be built on top of an existing engine too.