If you want, you can code your own game engine. I don’t recommend it. I had coded my own from 2002 through 2009, but later ported my custom engine to Unity 3D in 2010. It’s a different time period now, and you want to be able to hit PCs, macs, consoles, and who knows what else.
Unity 3D and Unreal Engine are both fairly straightforward to learn, and both have pros and cons. Personally, I believe that Unity is better in terms of general flexibility and making something truly unique. You can also have something gorgeous in that engine; it has plenty of power. But Unreal makes it faster to have something gorgeous. It is harder to prototype in Unreal, though, in my opinion.
If you are making a 2D game — a challenging sub-market now — then you can use all sorts of 2D engines.
If you’re making a 2D or a 3D game, there are then dozens of products that you will need to use for a ton of different purposes. Every developer uses different things, and it’s impossible to generalize.
I’ll give a partial list of the software that I use on my projects of the moment, just to give you an idea:
- Unity 3D as the main engine
- ZBrush for sculpting (I have also used Sculptris and Mudbox, but prefer ZBrush)
- 3D Coat for uv unwrapping and digital painting (parametric and otherwise).
- Substance Painter is also great for what 3D Coat is good for, and I also used that on my current project, but overall I prefer 3D Coat.
- MooTools Polygon Cruncher for general optimization of large models. Though sometimes I do this work directly in ZBrush.
- Maya for certain types of modeling, although personally I don’t use it — but some contractors do, and I use the fbxes they create from that.
- Google Docs and Google Sheets for communication with team members and design documents.
- Adobe Audition for sound editing. Audacity is a free alternative, but less powerful in many ways. I have dozens of plugins for various kind of sound editing in Audition.
- Various sound banks for foley sound and ambient sounds and sound effects. I’ve collected from a few dozen sources over the years, and at this point I have a few terabytes of compressed material to pull from.
- Soundminer for poring through those sound banks and pulling out the specific sounds I am looking for based on metadata. You’d be amazed how much time this saves.
- TextMeshPro in unity for proper text rendering and optimization
- TexturePacker for external sprite atlas generation (you need this even for 3D games because of UI icons).
- Amplify Shader Editor (this is a core tool for how I create shaders in Unity. You likely don’t want to just use the standard off the shelf shaders).
- FinalIK by RootMotion for inverse kinematics support if you’re doing character animation.
- iClone and Character creator for character design and animation. There are plugins there for facial motion capture and various forms of body motion capture.
- PolyFew for in-engine final optimization and LOD creation. Use unity’s LOD system if you must, but it’s possible to code a more efficient version yourself.
- Lighting Box for unity (there are HDRP and other pipleine versions). These help you to get away from that “unity feel” in your games.
- Feel for unity — this helps you give more impact to motions, and generally just spice up things so that actions don’t feel rigid. You can use this even during your prototyping phase for that first 5 minutes, because the way things react does impact us emotionally and it’s not cheating to use this sort of thing in the same way that good graphics or audio might be considered cheating at the early stages when you are wondering if the game is fun or not.
- Rewired for unity — if you’re supporting controllers and a variety of control schemes, and you need key rebinding during gameplay, then you need a solution like this one. I’ve used a variety of such solutions on various projects, as well as coding my own from scratch. For the broadest possible spectrum of platforms, Rewired is currently the one to go with.
- TortioseSVN for source control, with repositoryhosting.com as the provider. If you prefer to host it yourself internally, then VisualSVN Server is not expensive. If you prefer Git, then that’s also fine. Git is more flexible in some ways, but more complex in others.
- Visual Studio 2019 for coding.
- Notepad++ for xml editing.
- VisualSVN for Visual Studio SVN integration
- Bandicam for video recording
- Photoshop for everything 2D
- FileBoss for mass file operations
- FreeFileSync for moving things around easily during the “push a new build” process. It’s faster and more accurate than using batch scripts.
- Batch scripting for the actual compile process (this is faster and more accurate than other alternatives). Robocopy is a key part of these sort of batch script chains.
- WinMerge for file diffing when looking at logs.
- FMOD can be a great tool for audio, although I am only planning on using it and have not done so in a project yet.
- Blender for certain kinds of 3D editing. It’s the easiest tool I know of when it comes to outright deleting certain parts of geometry by hand.
- iDrive for nightly backups so that I’m never losing my work or my purchases.
- Google Drive for certain large files that need to be shared with the team remotely. This pairs well with FreeFileSync, which can pull and push from there.
And… there’s literally multiple dozens of other tools that I have used or do use, but less frequently. Don’t be afraid to code your own time-saving tools from time to time, especially if you’re going to be doing this for a long time and see places where you can save some time.