Unity3D Pet Peeves

I’ve been using Unity3D a lot lately and naturally have developed a list of gripes. Let me clear my throat…

The GUI.

Having fluid 3D graphics in a Unity3D game isn’t a major accomplishment. It’s when a game has a great GUI that Unity developers crowd around and wonder how it was done. The fact is, Unity3D’s GUI system is absolutely atrocious. Getting anything decent out of it is worthy of a Congressional Medal of Honor. I shudder to think how much work it took to craft Battleheart’s amazing GUI in Unity3D.

Back in 2005 when Unity3D was preparing for its first release, Immediate Mode GUIs were a hot new trend. However, game interfaces can be complex beasts. Especially on iOS platforms, there’s a certain level of polish expected that Unity’s IMGUI implementation can’t come close to. Also, Unity3D’s GUI has weird performance issues on mobile devices that makes it pretty much useless on iPhone.

Unity3D 3.5 supposedly has an all-new GUI system that I’m eager to see. Unity hasn’t uttered a word about it. Instead they have been going on about AAA console game features such as light probes that are largely irrelevant to anyone doing mobile games.

AnimationEvents can only be called on the first script.

Adding and manipulating animations in Unity3D can’t be much easier. Just drag and drop animations on to a prefab. Blending between animations is just a simple API call. You can even point and click to add AnimationEvents on any animation’s timeline. These are function calls that are made on the timeline, usually to trigger sounds, particle effects, etc.

The problem is, the AnimationEvent system can only call functions on the first script component attached to the object. This wouldn’t be a big deal if you could re-order the scripts in the Inspector. Instead, the only way to change the script order is to remove all script components and re-add them with the one containing AnimationEvent code first.

Asset Server should merge binary objects.

Before Unity3D supported source control in the Pro version, your only option was the $500 a seat Asset Server. This is a no frills source control system that allows multiple users to collaborate on scenes together. Unity should be able to craft a source control system that knows its own object format. If you could merge changes of binary objects down to the component level, Asset Server would be invaluable. Otherwise, Perforce is a better alternative. Even with Perforce, scaling a Unity3D development team beyond 10 or so people can be a nightmare.

Why are you using Unity3D at all?

Here’s the thing. Why are you even using Unity3D? Is it for 3D graphics? Who cares? There might be one or two 3D games in the top 50 iPhone apps sorted by revenue. On Facebook, nobody cares about 3D either.

The fact is, Unity3D is busy trying to attack the collapsing AAA game market with high end features such as multi-core renderers and light probes while ignoring what the vast majority of their users need–mobile friendly features such as GUI and 2D support.

My interest in Unity3D stems from its multi-platform features. The ability to effortlessly spit out web, iOS and Android builds from the same code is attractive. Still, when %80 of your revenue comes from iOS, do you really think it’s worth the hassle of dealing with Unity’s shortcomings just to scrape up a few extra dollars?

The amount of time I’ve spent searching for the ultimate cross-platform solution would probably have been better spent nailing an excellent iOS version and dealing with other platforms later. Still, in the past I’ve been bitten by tying a codebase closely to a single platform when the market shifts. This is an open question, but 3.5’s new GUI may be the make or break moment for my Unity support.

10 thoughts on “Unity3D Pet Peeves

  1. At The Amazing Society, where I contracted for a while last year, they had invested a great deal of effort into making a UI system that sat atop Unity3D’s immediate mode and made it act like other systems. It was way more effort than an indie team could have put into “fixing” the UI, but I learned a lot from their code, and made some solid contributions. I found a way to get the UI elements to show up in the scene hierarchy, and have their values modified in the Object Inspector.

  2. Pingback: 2011 Year in Review « Ralph Barbagallo's Self Indulgent Blog

  3. Unity3d is such a great invention 😛 , the new online MMOs built in unity are so amazing! I dont get it, how the massive 3D world is not crushing the browser when I play it, while flash games (less complex and not massive) are able to crush the browser and overload the CPU! how is that possible that unity3d technology is SO light on resources? it’s freakin 3D! and not flash vector. Unity developers must be awarded a nobel prize! lol

    • Interestingly the Unity 3.5 Flash exporter to Flash 11’s Stage3D runs pretty fast. The thing about Flash is you can write very fast and efficient code in it. I just haven’t seen to much of it. 🙂

  4. Pingback: Essential Unity3D Asset Store Goodies « Ralph Barbagallo's Self Indulgent Blog

  5. Pingback: Developing for Android and iOS with Unity3D: Lessons Learned « Ralph Barbagallo's Self Indulgent Blog

  6. Pingback: Unity3D 4 Pet Peeves « Ralph Barbagallo's Self Indulgent Blog

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s