I have to choose between using the Unity3D game engine and the Monogame framework. I want to create a 2D Sidescroller Action RPG, meaning the engine doesn’t have to be very complex. The end goal is hopefully a commercial release on Steam after 1-3 years of development time. Your opinion is probably going to be biased towards Monogame, but that’s good because generally people would probably just blindly say I should stick with Unity3D.
Here are the advantages and disadvantages of them both from my perspective:
Unity3D
Advantages:
I have worked with it for over a year.
Already has tools like a level editor, animator editor that supports finite state machines and a sprite editor. I can also easily write my own editors within the engine. It also has the Entity - Component pattern that I want as well as tons of helpful components and classes. Meaning purely development-wise this will probably be the easiest and fastest choice.
Well-tested engine with very few to no bugs.
Disadvantages:
It has a 2D mode, but it is clear that Unity3D is a 3D engine and even if you choose 2D it will still be a 3D world. This might seem minor, but a good example of this is how the rotation is stored as a quaternion which is a 3D specialized unit and every time an angle is set or read the quaternion is converted from and to euler angles, not only that but I don’t need the X and Y angles, I just need a bool to flip the gameobject horizontally and vertically.
The time it takes to load and initialize scenes, gameobjects and components as well as instantiating prefabs is unacceptable for a game of this scale from my perspective. Also adding, retrieving and removing components is too slow. The files outputted by editors and generally most internal Unity files are too large for their purpose. Ignoring physical collision between two layers, but still receiving notifications when collisions occur and still physically colliding with other layers, which I need, requires an intricate work-around.
The physics system is too complicated for what I need it to do (overkill that hurts performance and causes tons of bugs).
The serialization system is a mess and Unity refuses to listen and fix it.
I might be mistaken, but the general attitude from the devs and community from my point of view seems to be “if you can somehow make it work, no matter how inefficient then it’s fine”.
Monogame
Advantages:
Allows me to almost fully customize my game and define basic systems without having to dig around in serious low-level stuff that I would probably f up badly.
Works directly with Visual Studio, which I think is a great IDE and also happens to be my favorite.
I can write my own classes that only includes the data I need and only does what I need them to do. This will hopefully result in a very performant, well-organized game code.
It will be a great learning experience and a chance to get a bit more low-level.
Disadvantages:
I will have to reinvent the wheel: Implement the Entity-Controller pattern that already exists in Unity with many of the same components and systems.
I will have to write my own editors or use external programs. This might take up a good chunk of my development time.
I cannot assume these systems to be bug-free in the early stages, so there is some maintaining to do.
Both
It seems like Unity3D would be the safest option and a relatively simple 2D game such as Broforce seems to pull it off nicely.
But Monogame seems to have more potential and would at least be a great learning experience (even though that is far from the entire purpose of this project as I hope to produce a high-quality game).
Which one would you advise me to pick for this game and why?