Building for Consoles in Unity
by DAN MILLER-SCHROEDER, design3.com
October 11, 2011
As many developers are already aware, Unity has the ability to build to multiple platforms from a single project. Last week at Unite, the Unity team gave an overview of considerations developers need to take into account when targeting console platforms like XBLA, Wii, PS3, and when using input devices like the Kinect.
XBLA (XBox LIVE Arcade)
XBLA games are downloadable through a storefront in Xbox 360 interface and typically use the standard joystick/button controllers. Games for XBLA require a server-game link in the form of a configuration file (_SpaConfig.cs) that's included in the Unity project and pushed to the Xbox server. The "Spa" in "SpaConfig" stands for Stats, Presence, and Achievements - functionality required of every XBLA game. The stats requirement means that a game must have at least one leaderboard for both multiplayer and single-player games. The presence requirement shows when players are playing your game in Xbox LIVE and is accessible through Unity's X360Presence API. Achievements (game-specific milestones) are also required, and upon completion, a player is rewarded with Gamerscore points, an Xbox-specific achievement scoring system. Each game is allotted a specific amount of points to award (200 for XBLA titles, with an option for 50 more via downloadable content). Each XBLA game must also include a trial version with some kind of gameplay restriction (such as disabling features and levels or putting a time limit on play sessions).
Other development considerations include sign-in/out requirements (sign-outs must go to the title screen, for example), support for system dialogs, and support for multiple users, as up to four players can be signed in on the same device. To save games, you need to jump through a couple hoops: first sign in the player, select a storage device, create/open a save game file, mount it as a drive, and then write to it as normal.
Unity will support Kinect input for Xbox 360 games in version 3.5. Kinect, for the unfamiliar, is a combined camera/input device that takes player body and hand gestures and translates it to useable game input. Unity's X360Kinect class will allow script access to many Kinect APIs. Currently Kinect is available commercially for the Xbox 360 and academically for Windows, so there Unity has no support for using the Kinect with a PC at this time.
Latency will come up as an obstacle for Kinect games, as the game will need to quickly react to changes in player movement. X360Kinect will support both "lazy" and "low latency" sync modes.
X360Skeleton provides access to skeleton recognition, hand refinement and smoothing, and uses Microsoft's skeleton recognition API. Other capabilities include player recognition, wave gesture recognition, audio capture with the Kinect microphone, and auto-handling of Kinect menus (such as the Kinect game save mechanism).
Features that are in development for future releases include Unity editor integration, speech recognition, and avatar mapping, which would allow 3D game characters to map to player's body movements.
Unity for Wii supports most features from the Windows and Mac versions like .NET and the audio engine, but doesn't support terrain or high-level shaders. Developing for the Wii involves three steps: prototyping, performing a lotcheck, and device testing.
Lotcheck is a list of Wii-specific features and events that need to be included in all Wii games; most are already implemented by Unity, like a strap reminder screen and home button menu.
Users can acquire Wii games by downloading through WiiWare or playing off of a DVD. In the testing phase, developers have three options. They can use NDEV, which is the primary devkit with logs and debugging via CodeWarrior. They can use the RVT-H, which is essentially a Wii with a hard drive that enables testing a game as a hard drive image without burning to a disc. They can also use the RVT-R, which many know as "the green Wii." The RVT-R lets developers burn to a special DVD for hardware testing, and while it doesn't support debugging, Unity provides screen crash dumps to help developers identify problem areas.
When porting an existing game to Wii, the main considerations are to adjust the input methods, change the audio and texture compression settings, and add lotcheck features. A Unity engineer ported the popular iOS game Zombieville to the Wii in about a day, and it ran on the device the first time with no additional debugging needed, a testament to the ease of the process in experienced hands.
Unity supports PS3-specific features such as trophies, auto load and save, the move controller (PS3's answer to the Wiimote), native video playback, in-game purchasing, and script delegates for OS notifications, which is useful for adhering to technical requirements checklists (TRCs).
Important to avoid when building to PS3 are non-power of two textures, complex shaders with lots of texture lookups, and non-uniform scaled objects, as the PS3 will duplicate them in the memory footprint.
Dan is the Content Manager for design3, a portal for game development and game art video tutorials.