Tales from the Dev Side: Unity in a Splintered Industry
February 25, 2013 17 Comments
As word hit that XNA was being faded out, non-developer me was curious where else the community that I’ve downright fallen for with would turn to next to create the games I both love and loath. And the community has responded. First, the guys at MonoGame hit me up with a semi-well-received, semi-controversial editorial touting their platform as the next big thing. While a direct response to that from the mad bastard behind FortressCraft is still coming, industry veteran-turned-indie Scott Tykoski wanted his chance to sing the praises of Unity. As always, I understand almost none of this. But Scott’s a gifted writer and not prone to panic, so you should give him a read.
UNITY IN A SPLINTERED INDUSTRY
by Scott Tykoski
As the death knell rings for XNA and my Xbox Indie pals pay their respects on twitter, a question hangs in the air – “Where do we go next?”
And by we I mean the group of developers that got excited at XNA as an inexpensive multi-platform solution. We bet YEARS of development energy on a system that looked so promising, yet let us down in so many ways.
“Where do we go next, now that XNA is dead?”
We also have to deal with the “gold-rush” mentality that has come along with the mobile gaming boom. Indie/Hobbyist game developers are everywhere, and worse, most of them are making very similar games (take hit game, change the theme, rinse, repeat), intensifying player dissatisfaction with titles that don’t push any significant boundaries.
“Where do we go next, now that the world is oversaturated in unsatisfying games?”
And heres another challenge to overcome: our industry is undergoing HUGE, seemingly random marketplace shifts. Phones streaming games to tvs. Consoles putting games on the backburner to focus on movies and television.
“Where do we go next when there are so many platforms and nothing is certain?”
The honest answer? We go away. We give up and we move on.
Goodbye, friends.
UH…WE’RE NOT REALLY SCREWED, RIGHT?
No, sorry, I’m kidding…we’re totally fine. 🙂
Actually, being in the Indie gaming scene has never been more exciting – even with app stores overflowing with crappy titles (we’ve fought that battle before, right XBLIG guys?). You see, every studio – from the one-man operations to the largest gaming conglomerates – is facing the exact same conundrum: “What platforms do we focus or development energy on?”
This universal need for multi-platform tools means we now live in an ecosystem ripe with ‘Make Once – Play Everywhere’ solutions. Unreal for the big spenders. Adobe Air for the Flash experts. Gamemaker Studio, GameSalad, Stencyl, & Construct for folks unfamiliar with code. And of course the mega-versatile MonoGame for anyone fully invested in XNA (Rest In Peace, sweet prince).
But while all these solutions have their disadvantages, be it price or flexibility, one toolset has them beat on all counts: UNITY.
What once was a fun little tool for prototyping, Unity (now at v4.0) has matured to the point where you can make some pretty amazing games, like the beautiful Kentucky Route Zero or the 4x Epic Endless Space.
Kentucky Route Zero
With Unity, developers can now rest assured that core engine systems are covered and they can focus on the most important task: DESIGNING A GREAT GAME!
But first..
THE BASICS OF UNITY
At its core, Unity is a 3d game engine where the developer can script using C# or go straight into scene creation using the fully featured editor, which feels a lot like using 3DMax or Maya (where you move game objects around in 3S space). While it may seem daunting at first, the toolset gives a great entry point for either artists or developers to start working on their game.
While the amazing editor would be reason alone to use Unity, the real selling point is the admirable cut of its cross-platform jib (ie: it can export games for every friggin’ platform). Titles for PC, XBox360, Wii, Web, Android, and iOS have all been made and released using the Unity, proving itself on multiple devices many times over.
It should also be noted that you can make a Ouya game RIGHT NOW using Unity. That’s pretty amazing cross-platform support, if I do say so myself. Which I do. Obviously.
SO MUCH 3D GOODNESS
While modeling, texturing, and animation have to be done in a traditional 3D program (3DMax, Maya, Blender, etc), Unity does all the heavy lifting when it comes to importing and rendering those assets. Lighting, post processing, shadows, and animation are all available out of the box.
I remember trying to get a distance blur effect hooked up for battles in Galactic Civilizations II but it was a huge pain and never happened. In Unity.. it’s as simple as dragging a effect script onto the camera object. Most effects are drag-and-drop ready…it’s simple to the point of sickening.
And lets talk for a bit about asset pipelines. The amount of raw data that goes into defining meshes, bones, UVs, and animations is staggering, and have given rise to third-party frameworks that manage this deluge of data. The fact that Unity makes the asset import and management process a two click process is a testament to the overall ease-of-use the editor provides.
THE JOYS OF C#
Anyone familiar with XNA is also familiar with the beautiful C# coding language. I won’t pimp that here, but Unity uses it, and it’s awesome.
Coding is as simple as writing your code, making a few public variables to use as dials, then attaching that script to your game objects. Those variables can then be tweaked in the editor, so writing modular code is buttery smooth.
The editor also has its own scripting API, so you can easily extend the editing tools as necessary.
THE ASSET STORE
Another notch on Unity’s belt comes in the ‘Asset Store’, where you can buy or sell anything game related.
Lets say you want a ‘Plants vs Zombies’ look to your game and need to animate several of 2D characters. You can go into a separate 3D program, rig and bind 2D planes, export the data, then use a 3D animation object to render your characters. OR you can purchase SmoothMoves, an in-editor 2D animation solution for 75$.
It’s the best 75 bucks you’ll ever spend, I assure you.
Chances are, if you need a game-related subsystem, someone already has a solution available on the asset store: just purchase, plug, and play!
NOW FOR THE BAD NEWS
Instead of a proper point-counterpoint, I decided to bottle up ALL the negative stuff to dump on you at the end. I know…I’m an a-hole.
First and foremost, the cost. Good news here is that a free version can be used by most Indies. Once you start making more than $100,000 a year, however, it’s time to go PRO, which will cost you $1500. Exporting features come in the form of add-ons, so exporting to iOS from the free version will run you $400, from PRO it’ll cost $1500.
Unfortunately, all the R&D testing I did was with a PRO version with a PRO iOS exporter, so some of my exuberance may come from using a super-slick $3000 version. You can dig around in the Unity Store to get some charts comparing features of the different versions.
Also, debugging was a bit more painful than in XNA and traditional IDEs. My testing of the tool was mostly on the art side, however, with a full-time developer testing out the coding front, so my pains could have simply been lack of experience. My fear is that you’ll be spending more time with print statements and less time with breakpoints.
Another issue, for those of us that love our retro graphics,the 3D environment can make 2D game creation tricky. It’s doable, but definitely less intuitive than making a proper 3D game.
The biggest drawback to Unity – as with any third-party engine – is the lack of control you have on the last 10%. You’ll always encounter areas where you want the engine to do something that’s just not possible (for one reason or another). While the main 90% will be smooth sailing, compromising on the last 10% of your vision may be too steep a price.
UNITY & MAKING GAMES WORTH PLAYING
So I started this editorial with that stupid ‘we should give up’ gag. It was mostly for fun, but there’s a legitimate feeling of helplessness that comes when your platform of choice is discontinued. There were too many crunch weeks spent on games using XNA to shrug it off as a necessary loss.
And while it sucks to see an amazing framework put to pasture, we are now drowning in possible alternatives. Alternatives that not only allow you target multiple platforms, but that alleviate the burden of creating the subsystems that your game will depend upon.
It’s for the sake of quality gameplay that I fully endorse Unity, and really any 3rd party engine. The overwhelming majority of your audience could care less about the underlying engine.. all they want is a new experience, something that’s not ‘Angry Birds with Zombies’.
Creativity on the Indie scene is a talk best left for another time , but always remember: originality is your key competitive advantage over the AAA studios. Use it! The less time you’re making engine systems that never excite the player, the more time you can devote to making original gameplay systems that will excite yourself, the player, and perhaps even our entire industry.
Oh Scott you troll, good write up as always.
Haha Thanks man 🙂
I know most of you are somewhat familiar with Unity, but if anyone has specific questions feel free to ask away. I’m playing with the free version right now, so hopefully I can answer any questions about PRO vs free discrepancies as well.
Nice write up. I’m literally right now trying to port my XNA c# code over to unity(goddamn content manager…) what is your take on the differences between free and pro? All I can find easily online is no splash screen and built in lighting…
the biggest gotcha with the Free version is the lack of Bit Sripping to bring down the final size of the project for mobile consumption (http://docs.unity3d.com/Documentation/Manual/iphone-playerSizeOptimization.html). If your game is bigger than 50mb then it won’t show up on App Stores viewed via a data plan (ie. You can only sell to people buying from WiFi).
I don’t know the exact numbers on this, but I could see this lack of compression options becoming an issue with a larger scope title. Then again, I always feel limitations are a blessing to indies, so forcing a smaller scope game may work in your favor.
Also, I know it seems icky to have the Unity splash screen precede your game, but 99% of consumers wont care, and I doubt you’d lose even 1 sale over it. A quality game will make you enough to get Pro and you can ditch the splash screen in a future update 🙂
Can Unity export a game package for XBLIG? Has anyone made an XBLIG with it? I know Unity can export for Xbox, but isn’t there a difference between the game package you would create for an XBLIG vs. XBLA?
Exporting to XBLIG? Afraid not…I suppose that’s the one Multi-Platform concession that has to be made here.
My optimistic gut-feeling is that Unity will export to both PS4 and XBox720, so with new consoles around the corner and XNA a fading tech, I’d argue it’s a small concession to make.
Cool write up man. I learned a lot of new things about Unity. But I’m curious… I know you can script with C# but can you also create classes, use inheritance, create structs? Also, if I understood correctly, you can’t set break points to debug? If not, then what exactly is the alternative and how do they compare? Thanks again.
Yeah, the C# programming done pretty damn close to what you’ve been doing in XNA (only, you know, without the XNA api’s) 🙂
I talked to my co-worker and he said Unity has some extensive tools for debugging performance in real time (think vtune, only in the Unity editor), and that between that and run-time print statements he never missed breakpoints (but he admitted he preferred print statements anyways…sounds horrible to me).
Anyone else have experience with breakpoints in Unity?
Breakpoints are still possible IF you’re using MonoDevelop, since you can connect the MonoDevelop debugger to your Unity application similar to running your XNA game from Visual Studio (VS). If you prefer coding in VS (like I do) then you have to go the print statement route (print() or Debug.Log).
When you first move from a VS/XNA dev environment to Unity you’ll likely hate the change, as I did, since you can’t step through code. If you enable “Error Pause” in the Console window inside Unity, your game will pause when an error is thrown and it will be displayed in the Console window (double clicking on that error will jump to the line of code the error occurred at, but you cannot step through the code using VS). If there’s a rather pesky issue that you just can’t seem to narrow down using print statements, you can always just open the project in MonoDevelop, connect the debugger to your project and run it from MonoDevelop to get all your debugger abilities.
Awesome, great to know! Thanks Jeff!
Ok. Cool. Unity is not as limiting as I thought. I have so many views on this topic though, not so much for me (I’m set in my ways, I already created a multi-platform game with MonoGame and I don’t ever see myself doing 3d), nor for the programming veteran that can try everything out and just pick what suits his needs, but more for that kid that just started programming and is dying to make his first game and has no idea where to turn.
For example, you say all 3rd party engines force you to compromise that last 10%. But, and please correct me if I’m wrong, wouldn’t MonoGame for Windows basically allow you to go the full 100% because you can always access the framework files and do anything you want with them? Also, someone starting out should probably start with 2d versus 3d, so that may be another strike against Unity’s tough 2d environment? Finally, on a more realistic note, a lot of these kids that want to make games are probably sadly NOT going to become successful indie game developers. So would it make more sense for them to devote a good 1-2 years programming with Visual Studio, break points and more conventional C# programming which are all skills that can carry over to normal non-game related programming jobs. Or instead spend 1-2 years on Unity who’s specific practices may not carry over as easily into normal programming jobs? (I’ve never used Unity so I could be 100% wrong on this point). Thanks in advance!
Gah…slow internet ate my reply 😦 Pardon the brevity of this version.
In general I agree with you… learning a coding language is VITALLY important, so Unity is an interesting half way point for rookie game makers (not a proprietary scripting language, but not quite up to par with a proper IDE).
I think its a decent enough entry point though…a huge hurdle is just making that first game to introduce yourself to the work required to complete a project, then learning how to skillfully handle any feedback/criticism you receive.
No matter how annoying it is, always save your internet replies in Word first! I learned that way back in 1996! (I’m old) :p
No, but seriously. Thanks for the replies. This write up and other comments here are definitely going to be useful for the rookie and veteran programmers alike. But no matter what, I think I will always recommend MonoGame to the rookies. Here’s another reason why: Perhaps it’s the pessimist in me (my first game didn’t do so well, but hoping the 2nd one does much better) but since MonoGame is just a framework over Xamarin’s MonoTouch and MonoForAndroid, learning MonoGame basically forces you to learn the ins and outs of those frameworks as well which were not designed for games. The end result is that porting your game with MonoGame gives you the skills you need to make ANY app (not just games) for any platform! So if your indie dev dreams don’t come true, knowing that you can create any program on any platform is a pretty powerful feeling. When I felt it, I felt like Bruce Leroy at the end of “The Last Dragon” when he realized HE was the master all along! (that movie came out in ’85, I told you I’m old!)
Yeah, I tend to learn the “Copy Before Posting” lesson on a per-site basis. I need to start doing it universally 😦
While this is a talk about Unity, I tried to make the point that it’s really about making a great game, so anything to help in that endevour is aces in my book. But I defiantly agree, building that core development skillset is universally applicable (opposed to learning a toolset that made eventually be discontinued).
To use an art annalogy, we always get resumes from kids that know 3d max, or photoshop, but lack fundamental drawing skills. These guys get blown out of the water by students that took the time to perfect their ‘core art’ skills before tackling a specific digital medium.
I was recently let go from my nearly 8-year job at a small game development company. For now I’m doing indie development full-time, and I’m hoping that it takes off before I run out of funds.
The game I’m working on will be initially for iOS, but after that initial release I want to port to Android, PC, Mac, and perhaps other platforms too. To increase my chances of success, it’s important that I reach as many potential players as possible with as little extra work as possible. So using some sort of multi-platform SDK was a given. After doing quite a bit of research, I’ve decided to go with Unity. The key pros for me are:
• It uses C#, which I have experience with from using XNA.
• It supports a LOT of platforms, including web browsers and consoles.
• It is already on the PS3, 360, and Wii U, and it will most likely be supported on the PS4 and 720 as well.
• Unity the company is established and successful. They’ve been around since 2008 and continue to grow. Sure, any company could tank unexpectedly, but all signs I can see point to this company to continue to exist and support the technology that I’m tying myself to.
• A lot of companies are looking for Unity programmers. If my indie stuff fails, experience in Unity could help me land a job elsewhere.
The main con for me is that — right now at least — I’m making a simple 2D game, and Unity is a more complex than it needs to be for 2D-only games, as Scott mentioned. But luckily, Unity’s asset store has some solid 2D systems that are pretty inexpensive (I’m probably going with 2D Toolkit), and these help make this issue mostly moot.
All told, I believe that of the available options, I have the best chance of success — both immediate and longer term — with Unity.
Yeah, the asset store has some great 2d options, but it’s certainly not as friendly as some other engine options out there (I do all my ‘quick turn-around’ 2d prototyping in Stencyl). Good luck man! 🙂
I took a first look at Unity 4 a couple days ago, after Unity 3 decided to crash on me every time it launched. Man, is it a lot like learning XNA all over again. I tried to see what I could do hitting the ground running, and I was able to load a few .fbx models (no textures though), and drag them around the endless void of the world. Yeah, I need to hit some tutorials hard. You could probably make a decent game from it eventually, but would it take a few months for a C# programmer to get up to speed?
Other than that MonoGame is an interesting choice, it would be fun porting my engine to be free of the XNA dependencies, and seeing it run on my Android phone.