One of the most exciting and powerful tools available to the indie developer today is Unity 3D (http://www.unity3D.com), a wildly popular game engine that exploded in popularity when the iPhone app store roared into public prominence. The Unity 3D engine has become so popular in part because of its ease of use, powerful tools, and too-good-to-be-true pricing. We’ve raved about Unity as a tool in the past though so I wont get into all that again. Instead I’d like to look at one specific aspect of how Unity and AppUp work together in beautiful unison.
Big Lesson #1: Multi-platform is not an either-or concept. It’s emphatically an also-and concept.
One of the most valuable aspects of Unity 3D is its ability to deploy a single project to multiple platforms. By installing various plug-ins or a little ninja coding you can build one game that runs on everything from Mac and PC desktops, all manner of mobile devices and even in a browser. Today’s case in point will be our recent release of Bok Choy Boy and how we brought it to Intel AppUp (here) at the same time we launched to several other platforms including iPhone, iPad and a browser based mini-game.
IMHO the profound magic of the app store model, specifically places like AppUp, iTunes and the Android marketplace is a massive, instantaneous, global distribution network. So long as you plan for it up front there is no reason not to target ALL of these platforms at one time in order to create the widest possible exposure for your game…and in so doing try to take over the world…again. The reality is that you never know where a game will catch on. For example, when Bok Choy Boy launched we never expected the HUGE audience we garnered in China. Over half of the total downloads have been in a country that we weren’t even thinking of. In hindsight we can guess why the Chinese market liked it, but we would have lost a ton of customers if we hadn’t taken advantage of the globe spanning power of app stores like AppUp and planned for multi-platform distribution and used a tool like Unity 3D. So I could keep beating that horse but seriously…do this.
Moving from ‘Why’ to ‘How’…
Step 1: Think in Screens
The buzzword for multi-platform development is ‘screens’ which isn’t really describing various pixel-widths and aspect ratios (though those details are implied) but rather the types of devices you are expecting to target. Think “tablets” instead of EXOPC as an example, “smart phones” as opposed to iPhone. The trick is to plan your app, particularly the UI and hardware requirements in such a way to anticipate these differences.
Take for instance building your game to segregate draw calls into discrete game objects that can be switched on or off for a given hardware set. I might include various lighting effects and particle emitters in a game object that gets included when I play on my desktop, but get turned off on my tablet in order to reduce draw calls. Similarly I can map controls to multiple inputs at one time. “Up” gets mapped to both a keyboard W and an accelerometer tilt at the same time. This kind of screen separation is a matter of planning ahead and not specifically a Unity 3D feature, but Unity does provide the kinds of tools and features needed to make the most of such a structure. If you’re clever you can make one game project that includes a wide range of game play experiences that gracefully degrade from high-end systems to low-end handsets.
Step 2: Design Flexible Art Assets
One of the hard lessons we learned when making G:Into The Rain was to never, ever, EVER make screen targeted images. When we made the UI we had exactly one platform in mind and everything was 480X320@96DPI – full stop. Problem was, as we wanted to bring G to new screens…like AppUp…we had to rebuild almost every asset from the ground up. The forehead-smacking answer to all of this was simply to plan high-res artwork from the get go instead of trying to save pixels. If you make your source art large and ~600DPI to start with you should be safe. Downsampling for a target platform is as easy as batch command. Upsampling…well lets just say it’s like stalking creepers – something WILL blow up.
Step 3: Prepping Unity 3D for AppUp
We’ve been making good use of the baKno Unity plug-in that can be found here: http://www.bakno.com/AppAble/index.html. You can even download a demo version of this plug-in for free. You will need Unity Pro though so be advised. You can basically read the documentation but the bits go like this:
- baKno.cs is a C# file used to integrate the baKno C++ dll file and Unity3d Pro. You will insert your AppUp GUID into this file.
- appup.js – import this JavaScript file to activate the Unity project on AppUp.
- Make sure to have the related guitext contain both the appup.js and the baKno.cs file.
- Create the function to authorize the application through the AppUp Center purchase system…
function InitializeGame() {
IntelObject.text = "Loading...";
Debug.Log("Check Engine");
IntelObject.SendMessage("CheckApplication", 1.0);
Debug.Log("Check Engine Ends");
while (IntelObject.text == "Loading...") {yield; }
if (IntelObject.text != "Authorized Application") {
yield WaitForSeconds(3);
Application.Quit();
}else{
IntelObject.text = "Loading.";
IntelObject.SendMessage("StartEvent");
yield WaitForSeconds(1);
allchecks = true;
}
}
This file contains the calls to the baKno.cs wrapper. Specifically the CheckApplication() function does two things. It waits for a response from Intel AppUp to see if the app was properly purchased and it will set the flag to load the scene or quit application based on the answer. This is important so make sure you call the initialization script on start.
function Start() {
allchecks = false;
InitializeGame();
}
From there, assuming ‘allChecks’ returns true you are good move forward to new scene.
function Update () {
if (allchecks) {
Application.LoadLevel ("MainScene");
allchecks = false;
}
}
Step 4: Upload and Present to Worldwide Millions!! Bwahahahaha!
Once the app is prepared for AppUp with just a few lines of code and a tidy wrapper from a solid Intel partner you’re ready to show your stuff to the world on another massive app store – Intel’s AppUp Center.
If you were even partly motivated you could almost certainly create your own wrapper to do the same thing. No disrespect intended to baKno at all but I think you’ll see that the requirements are not exactly daunting. Still baKno makes a good play with their price point making $50 a pop under the time honored “time=money” formula.
As I write this it would appear, judging by a quick Google search, that this is a hot topic. I gather somebody mentioned this pairing at IDF in the last day or two and that has spurred some real interest in the pairing of Unity 3D with AppUp. From our experience the coupling is simple and well worth the effort to bring another giant gob of eyeballs to our apps. We hope you’ll see the same value.
That’s an inuginoes way of thinking about it.