Native Code is Dead AKA Cross Platform Development with Unity3D

38

description

To survive in today's ultra fast paced game development ecosystem, you can no longer develop native code stuck to one platform. This presentation walks through all of the major cross-platform development tools and explains why I chose Unity3D and how I used it to build games on multiple platforms simultaneously. This is the GDC Taipei Summit version of my GDC China talk. Pretty much the same.

Transcript of Native Code is Dead AKA Cross Platform Development with Unity3D

Page 1: Native Code is Dead AKA Cross Platform Development with Unity3D
Page 2: Native Code is Dead AKA Cross Platform Development with Unity3D

Native Code is DeadAKACross Platform Development with Unity3D

Ralph BarbagalloFounder, FLARB LLC

Page 3: Native Code is Dead AKA Cross Platform Development with Unity3D
Page 4: Native Code is Dead AKA Cross Platform Development with Unity3D

2001

Page 5: Native Code is Dead AKA Cross Platform Development with Unity3D

2007

Page 6: Native Code is Dead AKA Cross Platform Development with Unity3D

2008

Page 7: Native Code is Dead AKA Cross Platform Development with Unity3D

The Platform Problem

Page 8: Native Code is Dead AKA Cross Platform Development with Unity3D

20XX…

Page 9: Native Code is Dead AKA Cross Platform Development with Unity3D

Choosing A Solution• Most Platforms With Least Code

• Licensing Model That Won’t Eat Margins

• Broad Community Support

Page 10: Native Code is Dead AKA Cross Platform Development with Unity3D

HTML5• HTML5 Frameworks• PhoneGap• GameSalad• Game Closure, AppMobi, Ludei

• HTML5 Still Sucks• Horrible Performance• Gated by mobile browsers

Page 11: Native Code is Dead AKA Cross Platform Development with Unity3D
Page 12: Native Code is Dead AKA Cross Platform Development with Unity3D

Cocos2d• Cocos2d-X• Straight C++ version of Cocos2d• Great 2D library, widely used• Amazing updates and support• No web support

Page 13: Native Code is Dead AKA Cross Platform Development with Unity3D
Page 14: Native Code is Dead AKA Cross Platform Development with Unity3D

Flash / Adobe AIR• Flash isn’t dead!• Use Flash, FlashBuilder, etc.• AIR Native Extensions• Flash game engines• Starling

• Stage3D

Page 15: Native Code is Dead AKA Cross Platform Development with Unity3D
Page 16: Native Code is Dead AKA Cross Platform Development with Unity3D

Unreal Developer’s Kit• Don’t need a Mac!• Top of the line renderer• 25% of revenue to Epic• Weak platform-specific support

Page 17: Native Code is Dead AKA Cross Platform Development with Unity3D
Page 18: Native Code is Dead AKA Cross Platform Development with Unity3D

Other Options• Titanium Studio• Corona• GameMaker• Stencyl• Marmalade

Page 19: Native Code is Dead AKA Cross Platform Development with Unity3D
Page 20: Native Code is Dead AKA Cross Platform Development with Unity3D
Page 21: Native Code is Dead AKA Cross Platform Development with Unity3D

Why I Chose Unity3D: Tech• Best support for critical platforms• Mobile (iOS, Android, etc.)• Web (NaCL, Web Player, Flash)• Desktop (Steam, Mac App Store,

Win8)• Console

Page 22: Native Code is Dead AKA Cross Platform Development with Unity3D

Tech• Native Plug-ins• Can support any platform-specific

functionality• Amazon App Store• Google Play Game Services• Write your own native plug-in

Page 23: Native Code is Dead AKA Cross Platform Development with Unity3D

Support• Awesome forums• Awesome feedback from support• Twitter!

Page 24: Native Code is Dead AKA Cross Platform Development with Unity3D

Asset Store

Page 25: Native Code is Dead AKA Cross Platform Development with Unity3D

Business Model• Flat fee per-seat (‘perpetual’)• Monthly Subscription• No rev-share

Page 26: Native Code is Dead AKA Cross Platform Development with Unity3D

Brick Buddies

Page 27: Native Code is Dead AKA Cross Platform Development with Unity3D

Camera Birds

Page 28: Native Code is Dead AKA Cross Platform Development with Unity3D

iOS to Android with Unity3D

Page 29: Native Code is Dead AKA Cross Platform Development with Unity3D

Plug-ins• Used mostly cross-platform plug-ins

• Access platform specific features (IAP, etc.)

Page 30: Native Code is Dead AKA Cross Platform Development with Unity3D

Platform Specific Code• Only spent a few days of re-factoring

• Swapped out iOS plug-ins for Android

• Runtime platform checks and #IF compiler directives

• AndroidJavaClass!

Page 31: Native Code is Dead AKA Cross Platform Development with Unity3D

AndroidJavaClassAndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity”) mWindowManager = activity.Call<AndroidJavaObject>("getSystemService","window");

mConfig = activity.Call<AndroidJavaObject>("getResources").Call<AndroidJavaObject>("getConfiguration");

Page 32: Native Code is Dead AKA Cross Platform Development with Unity3D

Screen Sizes• iOS has 3 aspect ratios to deal with

• Made interface work in “safe zone”

• For Android’s common 16:10 ratio, scaled NGUI interface to fit

Page 33: Native Code is Dead AKA Cross Platform Development with Unity3D

Android Fragmentation

Page 34: Native Code is Dead AKA Cross Platform Development with Unity3D

Performance and Testing

Page 35: Native Code is Dead AKA Cross Platform Development with Unity3D

Cross Platform Export Tools• Per-Platform Asset Settings• Compression settings• Filtering

• Cache Server

• Multi-Platform Toolkit• Build-time asset changes

Page 36: Native Code is Dead AKA Cross Platform Development with Unity3D

In Summary• Best Business Model

• Widest Platform Support

• Best Community Support

• Dead Simple Porting Process

Page 37: Native Code is Dead AKA Cross Platform Development with Unity3D

?

Page 38: Native Code is Dead AKA Cross Platform Development with Unity3D

Thanks!Email: [email protected]

Twitter: @flarb

Blog: www.ralphbarbagallo.com

Site: www.flarb.com

WeChat: ralphbarbagallo