Featured post


Hi, welcome to the official blog! Since we are so close to being Greenlit, I thought I'd provide all that are interested with a developm...

Monday, 1 August 2016

Finally, Linux support has arrived!

Good evening everyone,

Yes, I'm still alive! I've been very busy on something I really hoped I wouldn't have to; Linux support. 

As I'm sure many of you are aware, Linux is a very 'open' operating system, and is highly configurable. However, it is much more 'clunky' and less user friendly. Adding support for Linux has been anything but friendly. About 6 months ago I produced a pre-alpha build for Linux, just to check it would work, and it did. I assumed from that point on that my future builds would all therefore work. Big mistake. Back then, I was using version 5.0.0 of our engine. Since then, I've updated to 5.3.2 and 5.3.4. Little did I know, for some reason (still unknown), anything after 5.2 would break our game on Linux. This is not true for every game built using Unity 5.3 or above, but there was something about Vex that wouldn't work for Linux after 5.2. The problem was, at the time I had no idea which exact version. Was it 5.3.4? 5.3.2? Or was it a version that I hadn't even used? I tried it on 5.0.0, and it worked. I tried it on 5.3.2 and it didn't. I tried it on 5.2.0 and it did, but that version didn't allow for some features that I had used from later versions of Unity, so I had to go further up. At this point I was very frustrated. I tried 5.2.3, but that didn't support our features (but did kind of work). I then looked around to find out what changed between 5.2 and 5.3 to try and narrow it down to a version. The only thing that changed, was the OpenGL version between 5.2 and 5.3. So I did two things:

- I updated to OpenGL 4.1 on Linux (I think I did anyway).
I tested the last version of 5.2.X, which was 5.2.5. 

Finally, it worked! I had a game that wouldn't crash immediately, and loaded in to the main menu.

The next issue, was that nothing knew what to do when it got into the game. The development console said that there were hundreds of null references (which meant none of the objects had scripts attached, a major issue obviously). So I went back to the development environment, and it turned out that in downgrading from 5.3.4 to 5.2.5 would cause all the objects to forget which scripts were attached to each other, but only if there was any code within the 5.3.4 version that used code that wasn't recognised by 5.2.5. So, I converted it again, and instead of saving immediately, I tried to run it in the editor, and every time it crashed, I'd find the culprit script, and delete it. Turns out they were all scripts I didn't actually use, which was fortunate. Then I'd exit without saving, which meant the scripts wouldn't have the chance to disconnect, but still remembered that the corrupted scripts were gone. I then relaunched Unity, and viola! It kept the good scripts intact. I exported it and tried it, and it worked beautifully.

It should be noted that this has only been tested on Ubuntu 14 and SteamOS. It works very well on Ubuntu, although anti-aliasing seems to not be working, but I'll have a look into that. On SteamOS, there is currently a major issue where the UI and several objects flicker like mad, despite it being on the same build as the Ubuntu version. For this reason, we do not officially support running it on SteamOS, but we will make sure our Ubuntu version works as well as possible. I have yet to try it out on Mint or Debian (although if it's not friendly with SteamOS I haven't high hopes for Debian, since SteamOS is built off of Debian). I haven't touched Mac in a while, although it did work the last time I tried (back at 5.0.0), but as we have seen, it will probably have broken.

This mad endeavour has consumed about a 4 days of development time, which is why I haven't posted much. I'm sure we'll get back in to routine assuming Mac works! (Fingers crossed).

Thanks for staying tuned,
- Sam

No comments:

Post a Comment