Unity при побудові 3D ігор для Windows 8 та Windows Phone Олег Прiдюк Технічний євангеліст, Unity Technologies Oleg Pridiuk Technical Evangelist Multi platform Perfect support Ultimate flexibility Why people choose Unity? Unity is multi-platform • Windows • Windows 8, RT, WSA • Mac • Web • Flash, Google NaCL, Facebook, Unity plugin • Ubuntu Linux • Mobiles • BlackBerry 10, Android, iOS, Windows Phone 8 • Consoles • PS Vita, PS4, PS3, Xbox 360, Nintendo Wii U • Union • More to come! What does it take to port a Unity game? • Define a “game” in this context? • Core gameplay – game logic, scenes, assets • Wrappers – monetization, social, plugins • Addons, process to update and patch • Assuming “to port” means • Core gameplay launches on a new platform • Unity takes care of what it can control • Texture compression, sounds, scripts, scene setup (physics, light probes, lightmaps, navigation, occlusion, etc) • Cross platform plugins, if applicable • Performance? Performance may vary hard! GPU Performance Comparison 900 800 700 600 500 GigaFLOPS 400 300 200 100 0 NVIDIA GeForce 650 NVIDIA GeForce 650M NVIDIA Tegra 3 Qualcomm Adreno 225 Windows 8/RT Device Capabilities • Windows 8 & RT devices scale in performance from phone-equivalent all the way to high-end multi-GPU gaming desktop • But most devices are mobile or have mobile GPUs • Touch is a first-class citizen • Minimum device resolution is 1024x768 • Windows RT has a minimum DirectX feature level of 9_1 • May not have 4k texture support • May not have simultaneous render targets Get familiar with the platform • Unique features & behaviors of Windows 8/RT and Unity for WSA • • • • • • Application design Hardware: touch, battery, x86, ARM, x64 Always on approach for devices Changes to the runtime APIs for Windows Store Apps and WP8 Many new Windows devices have a trackpad and touchscreen that can be used simultaneously Understand performance hotspots and optimization techniques – both hardware and software Unity for WSA and WP8 • Unity’s Windows Store runtime is built on .NET • • • • Unity generates a tweakable Visual Studio project C# debugging in Visual Studio Simplifies native code plugin integration Your ported code pretty much ‘just works’ on Windows Phone 8 • WSA can only consume WinRT Components (no unmanaged DLLS) • Boo, JavaScript not fully implemented • GameObject.SendMessage lacks type conversion • Network classes not supported (WWW works) • Cloth not supported Unity for WSA and WP8 • Interop in Unity for Windows Store Apps is expensive • Minimize the Unity APIs you call each frame, including Component references public class example : MonoBehaviour { private Transform myTransform; void Awake() { myTransform = transform; } void Update() { myTransform.Translate(0, 0, 5); } } public class example : MonoBehaviour { void Update() { transform.Translate(0, 0, 5); } } Disallowed Windows APIs • HashTable - use a Dictionary • Better performance for value types • Not necessarily thread-safe • Type-constrained • ArrayList - Use a Dictionary or a List<T> • Possibly a small loss of performance • System.Xml.XmlDocument - don’t use XML • But if you have to… use System.Xml.Linq • Better is to use JSON or YAML • System.Threading.Thread • Use ThreadPools - system.threading.threadpool • And a few thousand Win32 functions • http://msdn.microsoft.com/enus/library/windows/apps/hh464945.aspx • SuspendThread, GetThreadContext, SetUnhandledExceptionFilter, Winsock2, CreateThread, HeapCreate, Sleep, etc. Plugins in Windows Store Apps Windows Store Apps can only consume WinRT Components • Unmanaged legacy native code DLLs aren’t allowed • http://msdn.microsoft.com/enus/library/windows/apps/hh441569.aspx The Unity Editor is still based on Mono • Make sure your WinRT Component can also be built as a legacy native code DLL (Windows Store functionality can be stubbed out) Optimizing performance • Instantiating and Destroying GameObjects is expensive • Reuse when possible! • Don’t Use • • • • Desktop shaders Terrains Realtime shadows Dense particles • Use structs instead of classes • Classes are stored on the heap, structs on the stack. • We have more on this in docs… Demo time! Small overview of Unity tools Test against the zoo Run the WACK often Participate in the beta! In order to ship to Windows 8 ecosystem well…