Monogame vs. Unity3D

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?

2 Likes

Though you met me here, [Hello and welcome to the community by the way] [My BF3 gamer name is CSharpCoderGamer lol though I have dropped BF3 for GTAV now] I can from an outside standpoint, say the following…

Unity, although seemingly FREE* from a business point of view [And as a games developer/publisher you ARE a business] the paperwork is a mess, and then understanding where you actually stand is a trick, whereas with MonoGame, you coded the engine which sat on top of the MonoGame framework, which means you can open source your engine if you wanted and without needing a whole bunch of lawyers to dig through your paperwork…

What I am getting at is, Unity has a lot of caveats where paperwork is concerned whereas MonoGame, I think I read most of the legal stuff fairly in under a day… oh wait… that was the forum rules and stuff… hang on… where is the licence for MonoGame? ah here it is:

> Microsoft Public License (Ms-PL)
> MonoGame - Copyright © 2009-2016 The MonoGame Team

> All rights reserved.

> This license governs use of the accompanying software. If you use the software,
> you accept this license. If you do not accept the license, do not use the
> software.

> 1. Definitions

> The terms "reproduce," "reproduction," "derivative works," and "distribution"
> have the same meaning here as under U.S. copyright law.

> A "contribution" is the original software, or any additions or changes to the
> software.

> A "contributor" is any person that distributes its contribution under this
> license.

> "Licensed patents" are a contributor's patent claims that read directly on its
> contribution.

> 2. Grant of Rights

> (A) Copyright Grant- Subject to the terms of this license, including the
> license conditions and limitations in section 3, each contributor grants you a
> non-exclusive, worldwide, royalty-free copyright license to reproduce its
> contribution, prepare derivative works of its contribution, and distribute its
> contribution or any derivative works that you create.

> (B) Patent Grant- Subject to the terms of this license, including the license
> conditions and limitations in section 3, each contributor grants you a
> non-exclusive, worldwide, royalty-free license under its licensed patents to
> make, have made, use, sell, offer for sale, import, and/or otherwise dispose of
> its contribution in the software or derivative works of the contribution in the
> software.

> 3. Conditions and Limitations

> (A) No Trademark License- This license does not grant you rights to use any
> contributors' name, logo, or trademarks.

> (B) If you bring a patent claim against any contributor over patents that you
> claim are infringed by the software, your patent license from such contributor
> to the software ends automatically.

> (C) If you distribute any portion of the software, you must retain all
> copyright, patent, trademark, and attribution notices that are present in the
> software.

> (D) If you distribute any portion of the software in source code form, you may
> do so only under this license by including a complete copy of this license with
> your distribution. If you distribute any portion of the software in compiled or
> object code form, you may only do so under a license that complies with this
> license.

> (E) The software is licensed "as-is." You bear the risk of using it. The
> contributors give no express warranties, guarantees or conditions. You may have
> additional consumer rights under your local laws which this license cannot
> change. To the extent permitted under your local laws, the contributors exclude
> the implied warranties of merchantability, fitness for a particular purpose and
> non-infringement.

> -------------------------------------------------------------------------------

> The MIT License (MIT)
> Portions Copyright © The Mono.Xna Team

> Permission is hereby granted, free of charge, to any person obtaining a copy
> of this software and associated documentation files (the "Software"), to deal
> in the Software without restriction, including without limitation the rights
> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> copies of the Software, and to permit persons to whom the Software is
> furnished to do so, subject to the following conditions:

> The above copyright notice and this permission notice shall be included in
> all copies or substantial portions of the Software.

> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> THE SOFTWARE.

I would like for you to find and read the Unity licence… I have seen the one for UNREAL and can say, I am not even going to bother… lol

Anyway strafing away from the paperwork as almost nobody brings it up** I must say that although Unity has existing tools help setup environments etc, but it has one serious flaw, it attempts to be for every game or use scenario, and as such is bloated… whereas in a code first language, this is not the case as you can create your own tools with the features you need, though this can delay production, in the long run, you have a tool which YOU can modify as you please with no delay in understanding how things work and you have it for future projects too so it is a one time investment which takes just a little more time to learn than the Unity toolset… just depends on how deep your tool requirements go…

Well, I will leave the stage for others to chime in as well… I could harper on for a term…

[* Not really]
[** Well aside from me]

EDIT

[Side note, I hope it was ok for me to reproduce the licence here like that]

1 Like

Thank you. I actually forgot a disadvantage of using the free version of Unity which is that you’ll have their splash screen when you start the game and it’s pretty ugly compared to Unreal’s for example. You have absolutely convinced me to use Monogame. Would you advise me to use an external “open source” sprite editor and level editor, or make my own?

1 Like

Check out Nez if you want ECS. Ping @prime31

1 Like

Not a fan of it, but GIMP.org https://www.gimp.org/

2D/3D?

Pretty sure making your own will be far more ideal, such as adding metadata; for example: object placement and player spawn / AI Spawn points… in addition to the level data, remember you can export as many individual lists as you want, does not all need to be in a single file…

Though, Blender3D [Now trust me I never used to recommend it, so keep that in mind] https://www.blender.org/ can be good for 3D Model and Level design… though, not sure about the metadata for object placement yet with that, though I will be going through a book on it so hopefully it comes up at some point…

Glad I could sway you :sake:

Decided to use Unity’s sprite editor, although I have a listener, so when the changes are saved it saves only the data I need in JSON format. As for the level editor it’s going to be 2D, I think I’ll make it from the bottom, but I don’t know if you use tiles for a sidescroller level editor or something else.

1 Like

I wanted to chim in on this part: you don’t have to reinvent the wheel if you know what to look for. There are various frameworks which sit on top of Monogame and have implemented basic structures used by most games, such as ECS, animated sprites, support for Tiled, GUI, etc.
I’ll list some of them which are on top of my head: Monogame.Extended, for example, is a framework which has basically everything you’d need and is currently in active development, and it even has its own subforum here on Monogame forum. Nez and Asymptotic are another such frameworks, just to offer an alternative. If you need GUI only, Myra and GeonBit will take care of it decently.

So yeah, while Monogame is kinda barebone, community centered around it is large enough to provide libraries with useful stuff to ease the work for other developers.

1 Like

This is new… not looked at Unity since around 2011~ and if they had it back then, they never advertised it lol…

This was mentioned earlier by @Jjagg

Could be a good jumpstart for you?

I am as possibly mentioned earlier, not a 2D kind of person, so I cannot comment much there… hopefully someone can chime in there further…

EDIT

@Aurioch lol, posted around the same time :stuck_out_tongue:

Nez sounds interesting, I’ll definitely look into it later.

I may have missed something, ECS? Entity Component System?

Well now i suppose would be the time to start to pick up on monogame.

There have been some great improvements done for the 2d stuff i believe monogame maybe faster then xna was in that regard for speed at least for spritebatch drawing which is basically 2d. The pipeline is up and running as well. Many of the old bugs have been resolved, as quite a lot of improvements are going on still.

There are associated projects for 2d as well that are based on monogame such as monogame extended which may have some functionality you might be interested in.

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.

One advantage here is if you find a actual bug you can rebuild monogame itself to fix it.
In fact you can recompile the entirety of monogame by source with any changes you want to make.

This is the equivalent of internally rewriting unity’s code itself when you found a problem and want the fix.
Or simply just want to change the way something works, for your own purposes.

You can browse thru and see or download the latest source code for mono-game here you should scroll down a bit for the nightly build (the most recent up to date version). Using the nightly you can basically just reinstall it from time to time to update your projects. You can even use github to automatically update changes as they are accepted.

MonoGame is a fully managed .NET open source game framework without any black boxes.
Create, develop and distribute your games your way.

There are also instructions for building it from source to make your own changes.

Most of what you will use as tools will be here and within graphics.

So one more benefit is you can also see what is going on under the hood and change it if you wanted

There are too boot, many good fellows around here, many learning as well, that includes me :).

1 Like

Jumping in to say that MonoGame is a good fit for what you’re trying to do and you should definitely give Nez a try as it will make your life even easier.

That said, one of the things that you will have to fight a bit with is distribution of your game as it’s not exactly easy to build for all the different platforms (that is if you’re aiming at cross-platform).

I have been around this community for about a year now, working on a little platformer. I have had little time to develop as I was in my last year of uni (now finished yay). Coincidentally the last 3 months involved making a platformer in Unity and I pretty much hated the development process every step of the way.

Many of the problems listed above such as its bloated, really it is in “3D” etc. Also one of the biggest things that got to me was the lack of control.

I am now enjoying very much getting back to my project in MonoGame where I can build from the ground up :slight_smile:

So if you are like me and like coding up front to make your game world do what you want you will probably quite like MonoGame.

Aside from that, maybe draw up a prototype/demo that shouldn’t take too much time and whip it up in both environments to get a better feel.

Yes, what is ECS ? Extra Cute Splashscreen ? :slight_smile:

1 Like

I think it’s an abbreviation for the Entity-Controller-Scene pattern.

1 Like

ECS stands for Entity-Component System.

2 Likes