I've been looking heavily at Unity these days, so much so that when I participated in Ludum Dare a couple months ago, I opted to make a jam entry with the engine.

There are some good things about Unity, some great things, some obnoxious things, and some little quirks. I'd like to discuss them here in no particular order.

Oh, how I've missed you C#. I've spent the last three years of my life coding exclusively in Objective-C. I've come to terms with Obj-C, much of my initial vitriol toward it has dulled, but I never grew to like it. I like C# though, and I'm constantly amazed at how much more comprehensive the C# standard library is; when I was porting over a lot of useful code, more often than not I found there was no porting required because C# already had an equivalent method in its library. I don't know yet how well garbage collection performs on mobile - that worries me a bit given my experience on other platforms, but we'll see.

Multiplatform Support
Unity touts itself as being completely multiplatform, and that's true and it isn't. It can certainly build to every platform, but there are gaping holes. There's no such thing as a per-platform asset - there are *settings* on a per-platform basis, but you can't, for instance, use one texture on Platform A and a different texture on Platform B without either loading both textures or sacrificing usability within the editor. This gets worse on mobile, where you certainly don't want to load iPad Retina images on an SD iPhone, but getting around that is especially hard.

The current UI system is pretty laughable for a large project. The only real options are in the Asset Store. Unity has been working on a new UI system, but I have it on good authority that they've been working on that UI system for forever and that I probably shouldn't hold my breath.

This falls under one of those 'great' categories. Physics systems are hard; I've coded a few and never really got a good handle on the area. With Unity, though, it's really just setting up some colliders and tweaking parameters. It's not a solution to everything - good platformer or car physics is still hard - but it's a really nice starting point.

The Unity editor is pretty good. It's intuitive, powerful, and easy. It's also incredibly extensible, allowing you to easily create custom editors & functionality when necessary. Conversely, MonoDevelop is not that great - the Intellisense is horrid, the autoformatting is obnoxious and hard to configure properly, and the debugging can feel wonky. Plus it doesn't interface very well with the main editor: half the time I double click to open a file, I get the wrong file or the wrong project entirely. It's not unusable, but I probably liked Xcode more, and that's... unfortunate.

External Plugins
I've had to interface with Obj-C land for a few custom plugins, and it was really, really pleasant. Just wrote some code, and Unity pulled it into the Xcode project seamlessly. It's not perfect though - there's no proper way to add frameworks or change the Xcode project's linked libraries without modifying the Xcode project manually. That's Apple's fault though. They just didn't provide a way to modify Xcode project files outside of Xcode. A few clever people have reverse engineered the Xcode format for doing this, but it's a brittle and dangerous solution.

Asset Store
The Asset Store is awesome. There's a ton of stuff in there, and it's mostly reasonably priced. Not a lot to say here though - it's just full of good stuff.


That's enough for now. It's just a small look at the toolset, and I'll probably have more to say in the future. There have been some hiccups, some larger than others, but you'll have those with pretty much any system. Overall, it's been a perfectly pleasant experience.