Posted on Leave a comment

New game launch + Thoughts on Unity on Linux in 2019

Hello Giants!

Those of you who keep an eye on the front page, follow me on twitter or are active in our discord server know I just launched a small game for Android today called Retro Sail. It’s cute, skill based, features no ads as lacks any kind of IAP. It was also designed and developed in under five days with Unity. Now those of you who think this is some kind of a praise for Unity as an engine, especially those who weren’t in discord, let me warn you – it is not.

For the past 5 days I’ve been through a roller coaster of emotions due to using Unity and I’ll walk you through the reasons in a second. Before that let me just say that after spending these past days using it on Linux makes me want to focus even more on Pint as my main game development tool. Let’s jump through it.

The most stable version of unity, 2017 LTS would put even a Bethesda game, on release, to shame in terms of crashes and bugs.

Last time I got to try Unity engine on Linux was in 2016 and for a first attempt at supporting the Editor on Linux they were onto something. Yes it wasn’t extremely stable and there were a ton of problems with dragging and dropping but it was also an experimental, fresh build. Fast forward to today and well, nothing much has changed. Unity now comes with a launcher called the Unity Hub and all I can say about it is that it’s a convenient way to manage different versions of the engine. In my case I had the option of installing:

  • Unity 2018.3.4.f1
  • Unity 2018.2.2.20f1
  • Unity 2017.4.19f1(LTS)

Out of the three choices the only one who would open up the editor was 2017 version, the 2018 ones would crash as soon as a project was created and loaded. 2017 isn’t far off from this behavior but at least I managed to do get the editor working.

2017 LTS version of Unity comes without Mono Develop, does not install the Android subsystem needed to build Android projects and crashes every single time you open up a project unless the project folder isn’t cleaned of any Interface or Project setting. But again, at least it works. Barely.

Mono develop can be installed externally but actually getting it integrated properly with Unity 2017 is a tale in itself. Let’s just say that I finally got it working but had to default to Visual Studio Code because:

  • Copy pasting anything from outside Mono Develop into Mono Develop was not an option
  • Trying to edit a script from the editor by double clicking on it would open up a new Mono Develop window and solution
  • Even more so sometimes Unity would point out errors on code lines that weren’t there in a given file.

So if you’re looking to try out Unity 2017 on Linux save yourself some trouble, get Visual Studio Code and install the .NET required plugins for it.

Building for Android is a no-no unless you install p7zip-full.

I needed Unity so I can develop a Android game (still Linux, right?) in a few days to put up on the Bearded Giant Games store. Let’s be honest, the BGG store is lacking content and I’m bleeding a lot of new visitors and old visitors. Might as well design a tight game to keep them busy until Outwarp comes out. Back to Unity tho’. If you try to install the Android subsystem needed to build games for Android and use the Unity Hub you’ll just be notified, after the install, that it failed due to an unknown error. After digging for a while the solution for this was simple, get p7zip-full onto my system because Unity requires it. Ubuntu users can just do a

apt-get install p7zip-full

Again this took quite a few hours to debug and figure out since, from my research, it wasn’t documented anywhere. Thank you who ever tweeted about this, you were a life saver (and the reason Retro Sail is out).

Importing audio files is a no-no in 2017.4.19f (LTS) because it is deployed with the wrong library.

Main mechanics completed it was time for me to focus on sounds and audio design for the game and another what the hell moment came when trying to import some audio files into the game. Long story short Unity would default on importing the Audio Files because of a problem with FSBTool and actively required me to download fmod and copy libvorbis.so.2 from it into the Data Folder (editor’s data folder, not the game’s). However, due to FMOD’s licensing I did not want to touch it. After some more browsing I decided to download Unity 2018.2.2.20f1 and copy the FSBTool libraries from it into 2017 and voila, it worked perfectly in 90% of the cases (the remainder 10% required me to import Audio file into Audacity and Export it again as an .ogg file).

Massive processor hog after a few hours of usage

My biggest problem with Unity on Linux didn’t come from android subsystem and/or the FSB Tool problems. Nor did the lack of MonoDevelop (as I affectionately use VSCode for Pint and my other projects) but the fact that a couple of hours in my little Brix PC would slow down to a crawl. And remember this is the same Brix PC I used Unity on for the past few years on major projects as a contractor/freelancer. The OS is installed on a SSD so closing unity and restarting it to get rid of the proc hog wasn’t a problem. Having to delete the ENTIRE LIBRARY FOLDER, Project Settings, Package Manager and Packages after every restart in order to be able to open up the editor? Now that can drive people crazy.

For those of you asking what’s the big deal here’s a small painting of the situation: At best I could go with Unity editor open for ~2 hours before pressing the play button became an exercise in frustration. Closing down the editor and making sure my changes are saved: 4-5 minutes. Restarting the PC from off state? 35 seconds. Deleting the Library, Project Settings and UnityPackage manager folder? 4 seconds. Waiting for the library to be rebuild? 14 minutes. Time for a FIRST BUILD for Android after a reboot? 23 minutes (with subsequent builds being done in < 1 minute). Also, remember, every new opening of the editor had me having to assign the scenes again and set the proper player settings anew.

So for every two hours of work in Unity 2017 under Linux I would loose 43 minutes trying to get it back up again. Add in a few Random Crashes from trying to change the Editor’s Interface elements and mandatory PC restarts and yeah, I lost almost 40% of my development time without doing anything for the game.

Other Linux specific quirks worth mentioning

One issue I discovered today happened while I was preparing Retro Sail for release on the Play Store. The game’s version for Bearded Giant Games was already up after being spitted out by Unity so that wasn’t a problem and it was deemed to work great by the people on Discord. So I did what any other person would do and spit up a Gradle projects and prepare the release for google Play. And release indeed it did but with a small quirk that I believe cost me a few refunds: The FIRST and LAST SCENES were reversed. That means the Main Menu scene of the game was positioned last (scene 4) in the build and the Game Over scene was the scene that welcomed users to their new purchase.

Another thing to note is that any window that pops up outside of the Unity Editor (profiler, shaders, etc) will not position itself accordingly on the screen. What I mean by that is that the top bar and half of the window in height will be hidden on the upper part of your monitor without the ability to move it. When you are a person that lives and dies with the profiler in it’s hand this can and will be a huge turn off. For this I found no fix and I only tested Unity 3D on Gnome. Not sure if this issue occurs on KDE, Unity (hehe) or any other desktop environment.

Ending Thoughts

I was on the fence about using Unity as a tool for my OWN games. I still have to use it for my legacy client projects but for my own titles I’m not sure I want to touch it again. I made a game in about 5 days with it and that shows it’s power. On the other hand those 5 days could have easily been an extended jam period (48h + 20-ish more for polishing) from conception to publishing. It’s a decent engine but on Linux it’s behaves worse than anything else I ever got my hands on. I recommend staying away from the LTS version if you can. And hopefully you’re not running integrated graphics on your machine or else the 2018 version won’t even start.

I made Retro Sail from inception to publishing it on the Bearded Giant Store and the Play Store in just five days using Unity 2017 on Linux because I am a masochist and you shouldn’t do it. But hey, if you want to support such masochistic acts get my games. It will only encourage me to keep doing stuff like this.