I'm currently in western Michigan enjoying the comfort of a sunset from on top of my car and I feel this this is probably a good time to reflect on the newest thing that I have tried, the Linux release of the Unity3D Editor.
Ever since larger Kickstarter projects worked with Unity to allow for standalone linux builds, Unity Technologies has been pressured into releasing the editor to Linux. Ever since, there has been an easy and straightforward way of releasing games to the Linux platform without too much dependency hell and that's really been fantastic.
Aside from the editor, everything is practically a first class citizen on Linux. Many developers assume that the Chrome Unity Plugin is cross platform, but those who pay attention know that it doesn't run on Linux. Luckily that is being phased out.
Regardless, I have avoided using Unity3D for a long time due to the fact that there wasn't a Linux client. I don't have an interest in getting a Macintosh or setting up an entire Windows partition just for Unity3D. The rest of my tools that I use are on Linux. (As an aside, let me clarify; the tools I use are already installed on my machine and I already know how to use them. If it comes to manipulating images in GIMP, normalizing audio tracks in Audacity, or just coding in VIM, I'm very comfortable with my tool-set, and it's simply easier to get going in Linux.)
Normally I avoid proprietary systems in my workflow, but of all the amazing projects that have come around because of Unity3D (Hearthstone, Guns of Icarus Online, and tons of awesome Ludum Dare entries, etc) I think it's worth a shot, especially since Unity Technologies have gone out of their away to finally address one of the highest rated tickets in the request system.
This post is going to detail what I think Unity3D is doing right and what they are doing wrong, now that they have finally brought out a Linux Editor.
Please keep in mind I am very new to the Unity3D Editor and I use Linux exclusively. This article is mostly for new Unity3D users coming from the Linux community. Please feel free to correct me @josefnpat!
The Good
Let's talk about some of the really great stuff in Unity3D.
Bring Your Own Editor
I was pleasantly surprised by the fact that Unity3D has this fantastic habit of reloading files when they change. With that in mind, I can use gedit
, nano
, vim
, emacs
, whatever you want (and I can specifically avoid the overhead of having to run MonoDevelop!). This was honestly my biggest concern at the start of this whole adventure, as I like to include tools into my workflow (e.g. code in VIM, art in GIMP, audio in Audacity, run the LÖVE binary against the project folder). With this, I am simply replacing a segment of my workflow. Instead of having to replace my entire workflow with something foreign, my workflow is modularized, which means that there is less of the system to re-learn.
Solid 3D Interface
While I've only worked with Blender for a bit (and I would argue that Blender in itself is practically an operating system) Unity3D does a good job of interpreting how designers who are comfortable with 3D systems by offering the same UX systems for transforming, rotating and altering objects.
The location of the tools were straightforward, and the configuration of objects was hierarchical and logical for the most part. I really enjoyed this system.
I am used to the lower level framework LÖVE, so not having to deal with layers at a lower level is very nice as well.
Easy To Pick Up and Use
In an afternoon I was able to make a small demo and learn quite a bit about how Unity3D does things. It feels like there's a lot of tools at my disposal and that creating a rapid prototype in 3D is rather feasible, which is surprising to say for just about any 3D tool.
The Bad
So it can't all be good. The following isn't necessarily horrible, but it isn't good
Whats with all these files?
For some reason Unity3D has a lot of temporary files (what appear to be *.meta
files). While I don't see anything wrong with this, it would be nice to take the *nix culture unto mind and at least start them with a period, so they aren't shown by default.
This is mostly a cosmetic issue that I have.
Salty bugs
Take this with a grain of salt; it's a bit buggy. Dragging and dropping (which is a big part of Unity3D) wasn't entirely working with items being dropped onto the wrong object. Using search systems doesn't allow you to change configurations without disappearing. The help manual doesn't actually start. Some object types don't do anything when you attempt to add them (e.g. RagDoll).
In all fairness, this is a experimental release. These kinds of things are to be expected. While there wasn't really an easy way to get around a few of the drag and drop systems, I did manage to get by (mostly by guessing!).
Importing Assets
This article has an associated tech demo with it. You can find it here. I find the best way to learn a new tool is just to mess around with it and give myself small goals within the project. If there is anything to be learned about this, there is one thing you need, and it's going to be an oversized chicken.
This fantastic CC0 chicken was made in blender and I quickly shoved it into my demo. But to my surprise, it didn't seem to import correctly.
Blender is a pretty common tool. How hard is it to import this stuff correctly? To play devil's advocate, what do I know about importing assets in 3D?
JavaScript ... but not JavaScript
So they have something called UnityScript
in the engine. But why do they call it JavaScript everywhere in the UI? And why do the files end in .js
? The wiki clearly states;
Though many in the Unity development community (and even in the Unity corporation) refer to UnityScript and JavaScript as if they were equivalent or interchangeable, the two are very different languages.
This is misleading for the most part and bothers me greatly, mostly because upon opening Unity3D I thought from the UI that I was supposed to be writing in JavaScript.
Then I encounter this refactoring from Unity3D:
gameObject.GetComponent.<Renderer>().material.color = arr[Random.Range(0,(arr.length))];
I think I missed the class on using < and > in this context.
Why Can't I Help?
The documentation for Unity3D is actually rather extensive and useful for the most part, providing information on how the system works and how to use them in C#, JavaUnityScript and Boo, but it's missing examples. I don't have a problem with helping projects document stuff, and I have written much of the documentation for love-android-sdl2 project, so I'm happy to help.
But the docs are not wiki based. I don't even think they're generated, as I can't find any repo for it on GitHub.
As an aside, I will mention that I could not use the Video tutorials from the Unity3D website, mostly because of my low bandwidth.
Even the Unreal 4 Editor has an accessible wiki.
I wish I could help contribute to the Unity3D docs, even if I'm new.
Issue Tracker Ghost Town
So Unity Technologies has an issue tracker. The experimental build has had about 24 hours of usage, and there's even an AUR for it at this point. Things move quickly in the Linux world, and I'm sure there's many folks who are using the Linux build right now.
So how is there only three tickets since it's release? I've easily encountered tons of issues.
There's more comments on the AUR than there is on the issue tracker.
Let's read the blog post again. Maybe I missed something...
Oh, there's a sub-forum. What's the point in the issue tracker if the experimental release bugs go to a forum? If I have an issue, I now have to check two places!
This isn't too bad, it's just a pain.
App Store for Game Developers
I notice that there is a lot of available content on the asset store, which is really cool! But let's be honest; unless I'm looking for placeholders, or to get a step up on a tech demo, I mostly want an artist.
To be fair, placeholders and tech demos are important, but myself personally don't want to pay for them unless I'm going to present something to a client.
The problem I have mostly is when folks advertise free assets. There's odd licensing, weird third party sites, and annoying sign-up forms or questionnaires.
A big reason I stick to CC0 assets (especially from sites like opengameart.org, freesound.org and freemusicarchive.org) is that I can get and integrate them easily and quickly without much hassle.
I don't like the integration of the asset store in the client, but it's not too bad considering I can avoid it for the most part.
The Ugly
Please stop calling home.
My very first impression of Unity3D was a bit sour to say the least. I'm in the middle of no-where Michigan and I have very little internet at this point. I dutifully drove to the nearest McDonald's and I used wget
to download the 870MB installer. When I got home, I found out that one has to "log in" even just to use the free variation of the editor.
I copied my ~/.config/unity3d
directory from my laptop (which was able to run Unity because of my 4G internet) to my desktop, but the software was still calling home. I had to find a USB Wifi dongle and attach it to my desktop just to get rolling.
This bothered me quite a bit, because while most first world countries have internet everywhere (even at McDonald's!), not everyone does (or have the wherewithal/hardware to use 4g routers). I can understand calling home when you're using the paid version, but the free version really shouldn't be doing that, even if they are just collecting metrics.
UnityScript, C# or Boo, oh my!
I think it's really nice that they have multiple languages, but when it comes to Unity support, this is not the case. Imagine you're looking up a relatively easy question, and your current script is in UnityScript. The Stack Overflow looks something like this:
Newbie: Help, how do I do X in C#?
Unity3D User: Well, it's really easy, and here's how to do it!
[Provides helpful answer in C#]
Even though I imagine that the APIs for UnityScript and C# are very similar, the syntax is different and I don't know C# very well, so this becomes largely unhelpful for the most part. I have seen this altogether too often.
Wait, what version is this?
The Unity3D documentation seems very complete, but it's lack of version change information, really throws me off. The Linux release is 5.1.x
, but when I'm looking for help, I will encounter an issue where the example supplied is for 4.x
. Sometimes Unity3D will attempt to refactor for me (which I admit is pretty cool), it sure as hell doesn't explain what the hell happened.
If you're going to change the API, please document what changed and perhaps why.
If you're going to supply an answer to a question on Stack Overflow, please tell me what version it's for, and perhaps do it in the available languages.
And for gods sake, if you're going to take down documentation, at least re-route traffic to somewhere near the new location.
Let's face it, unless you have some secret Stack Overflow where they only have questions for 5.1.x
, using Google is like looking for a needle in a haystack. To get further to the point, it doesn't help that the Unity3D documentation doesn't have examples and doesn't reference the difference between versions.
dood u shuld kno this
While we're on the subject of documentation, let's talk about the community. I'm sure there are some really fantastic people in the Unity3D community, but when it comes to getting help, it is glaringly unprofessional in many ways.
I have my suspicions that this is due to the fact that the software is proprietary, and most folks who are using this professionally aren't paid to do customer support for Unity Technologies. The problem is that this is a modern world; people use Google to get help.
It feels like there isn't enough moderation on Stack Overflow for Unity3D, because every answer either has a response without enough information, or someone mentioning the fact they think you should "know this".
Sorry guys, that's not how Stack Overflow works. If you don't want to spend your time helping folks who should know obvious things, I get it. Help Vampires are a real thing, but don't lower the quality of your community "help" by responding poorly.
Please:
- Stop contributing with links that will break.
- Respond with examples in each language
- Identify for what versions of Unity3D this code will work.
- Moderate so the questions are more agnostic and can help many people as opposed to the OP.
- Stop encouraging help vampires.
Brass Tax
I had a grand time using the Unity3D framework. I made a really interesting tech demo, The Ball Pit.
Unity3D is a great tool and it works well into my workflow. There are many things that annoy me, but honestly there isn't enough to stop me from using this tool.
Big respect to Unity Technologies for finally releasing an Editor for Linux! Keep being awesome!
Questions, comments, rude gestures? Please feel free to hit me up on twitter @josefnpat!