Very new to game development/C# and I have some concerns regarding Monogame as an engine

Hey guys, I’d like to start this topic off by introducing myself. My name is Chris. I currently own and operate my own business (oddly enough, related to the video game industry), but am ready for a career change. In about a years time, I’ll be at a point in my life where I can finally sit down and begin the journey of developing my own game.

The sort of game I’d like to make would be something similar to Terraria (well, similar in block management only), but much more focused on action rather than building. I have been brainstorming for this game for about 6 years or so, and I know exactly what direction I’d like to take, and what systems I’d like to implement.

With that said, I do have some concerns…

Terraria was built using XNA. Monogame (so I’ve been told) expands upon that framework. It would seem like an obvious choice, but I have my doubts. I’ve been talking with a few people, and one of them had recommended Unity over Monogame, so I asked them why. He mentioned that Unity was a lot less work, but I’m not so convinced of that. There are a few threads here regarding Unity vs. Monogame, and I don’t really want to spark another debate, other than to gain some insight into which engine would be more suited for what I’m trying to achieve.

I was taking a look at a game that was released in 2016 called “Enter the Gungeon”. This game was developed in Unity, and has a few of the systems and graphics I’m interested in, so Unity may seem like the way to go. However, I’m almost certain (but not positive) that there are all kinds of custom shaders within that game, which makes things infinitely more complicated for me, having only coded for a few weeks 5 years ago. I’m just not so sure my math skills are up for that type of challenge (shaders).

Anyhow, most of the complaints I’ve seen surrounding Unity have to do with it’s lack of user control of the low level stuff. Once I embark on this journey, I would much rather have as much control as possible, and not rely on pre-built tools that may accomplish what I’m after, but were built for a more “general” approach. For example, if I use a built-in tool to handle one system, and I’d like to add on to that system later, that specific tool may not be the best choice, but I’m left with no choice but to use what Unity has to offer, or build my own.

On the one hand, I want that low-level control of my own game. On the other, Unity has so many systems built in, that it’s hard to discount it as a viable option. Monogame might be able to give me all the control I could ever want, but at the same time, with my limited skills (at least right now), I’m afraid I’d be wasting years of my life on a Monogame development, when I could have used Unity and saved myself a lot of time with it’s pre-built tools.

As you can see, it’s a very real concern for me. I know it may be much too early to be concerned about which engine to use, having not started learning C# seriously just yet, but I’d like to start thinking about these types of questions before things advance to a point of no return :wink:

I have always been the type of person that loves to know how things work. Ever since I was a young child, I was taking things apart, just to see how they worked. I got in trouble for doing this more often than not, but it helped me become the person I am today. Most of the time, if you put something mechanical in front of me, I’ll more than likely figure out how it works. If that something has a problem, I can probably fix it. If I don’t know how, I’ll learn how. That’s just my nature.

I would really like to hear some of your thoughts regarding the complexity of Monogame, and the amount of low-level work I’ll have to put into a game that’s similar to Terraria (again, mostly for block handling) vs. Unity and all the pre-built tools that may not work in my favor. Is it really just about how much control I’d like over my own systems? If it’s that simple, perhaps Monogame is the right choice?

I know this thread was probably way too long, but if you made it this far, thank you for your time :wink:

1 Like

Hey Chris, welcome! I’m glad you’re asking this question, since it means you’re taking the correct approach by figuring out the right tool for the job. It’s certainly not too early to think about the tools you want to use.

I’m going to start off by saying that if this is your first game, I believe you will want to start out smaller. I don’t know the intricacies of your game idea, but if it’s near the scope of Terraria, it will take a very long time to complete as a solo developer regardless of which engine you use. I highly recommend making smaller games to better learn how the development process and game market works to improve the chances of the game idea you have to succeed. As a recommendation, you can create a different game in each engine and better gauge what you feel comfortable working in.

I’ve worked professionally with Unity for a few years and use MonoGame for hobby projects, and I highly prefer MonoGame for 2D games. I will only be discussing 2D below.

Unity:
It’s very easy and fast to get simple prototypes made in Unity, but finishing the last 10% can have you jumping over hurdles. A lot of features aren’t completely polished or are awkward to use, such as the UI system, and you often don’t have low-level control over them. On top of that, there are bugs that range from minor annoyances to big productivity problems (I’ve had one editor version randomly crash 4+ times a day at my previous job). Unity also still uses a Boehm GC and is often behind on the C# version and .NET/Mono runtime. The physics engine is sometimes wonky and has its own quirks that you may need to work around (Ex. objects inside Colliders don’t call OnTriggerExit when disabled). Unity is closed source and thus you can’t see or modify any of the internal code. This is a problem since some bugs persist and are not addressed, and as several parts of the API generate more garbage than expected, there’s nothing you can do about it aside from deal with it or find a workaround. Lastly, Unity’s free version has a license that many people overlook which sets some terms and conditions for using their software.

However, Unity comes jam-packed with a lot of nice features. It features a scene graph which acts as a level editor, and it has easy to use tools for importing assets and creating sprite atlases. You can modify values at runtime while testing to speed up your development process. You can also customize the editor and create your own tools within it, which is often very handy. Furthermore, it has an asset store which contains a wealth of user-made packages you can purchase and import to suit your needs and speed up development. Lastly, it supports a ton of platforms that can be built to in one click.

MonoGame:
MonoGame takes a lot more work to get set up, but you’re free to structure your game however you want. When you boot up MonoGame for the first time, you just have a window with a cornflower blue screen and that’s it. The API is simple and easy to use, and there are no pre-built assets and tools; you have to add or create everything yourself. Fortunately, there are lots of awesome things that you can use with MonoGame, such as Tiled, MonoGame Extended, and Nez, and you can choose which ones you want to use and which you don’t. MonoGame is light-weight, fast, and lets you readily use the latest C# and .NET/Mono runtimes. MonoGame is free to use and any game you build in it is completely yours, meaning you owe no royalties. Lastly, it’s open-source, which means you can modify it to suit your needs and learn from it (I’ve learned a lot just by reading the source code) as well as contribute to further improve it.

Some of MonoGame’s features, such as the audio API, can be troublesome if you need something specific that they don’t support (such as seeking through SoundEffects), but they suit the needs of most projects. In this case, you’re still capable of using a third-party library that does support what you require. MonoGame also does not yet support some modern features like geometry and compute shaders, though if you search here on the forums you can find people using them through some modifications. Lastly, while MonoGame supports a lot of platforms, there’s no button you can click to instantly build to another platform, so you might have to do some searching to figure out how to deploy your game.

That was a long post, but I hope it gives you more insight into both Unity and MonoGame. Hopefully more experienced people can weigh in here to give you even more information. I personally would recommend MonoGame for this project since I feel it requires more low-level control and that seems to be what you enjoy. However, I suggest keeping your options open, as there are a variety of solid engines and frameworks out there, some of which are also open-source.

3 Likes

“I can probably fix it. If I don’t know how, I’ll learn how. That’s just my nature.”

MG is open source, I believed this will work for you ^_^y

1 Like

@Kimimaru

I really appreciate the long, detailed post. This is the kind of info that I’m looking for at this early stage. In fact, your advice on not trying to build a Terraria style game from the beginning is exactly my thought, as well. My initial plan was to create several smaller games (and finish them, of course) with varying systems. That way, I’ll have a much better understanding of how things work, and what each engine offers.

The original creator of Terraria (so I’ve heard) started out not knowing anything about C# or XNA. He created games like pong in the beginning, and then moved on gradually to games like his Super Mario clone, and then eventually to Terraria. This has been my inspiration ever since I decided to do this.

It does sound like Monogame could be the way to go, and that last 10% is exactly what has me considering other options, instead of Unity. On top of that, the points you bring up regarding the open source nature of Monogame make it very attractive.

If anyone else has any insight, I’d love to hear your thoughts :wink:

2 Likes