Unity при побудові 3D ігор
для Windows 8 та Windows
Олег Пр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
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
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
• Minimize the Unity APIs you call each
frame, including Component references
public class example :
MonoBehaviour {
private Transform
void Awake() {
myTransform = transform;
void Update() {
0, 5);
public class example :
MonoBehaviour {
void Update() {
transform.Translate(0, 0,
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
• SuspendThread, GetThreadContext, SetUnhandledExceptionFilter,
Winsock2, CreateThread, HeapCreate, Sleep, etc.
Plugins in Windows Store Apps
Windows Store Apps can only consume WinRT
• Unmanaged legacy native code DLLs aren’t
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
Realtime shadows
Dense particles
• Use structs instead of classes
• Classes are stored on the heap, structs on the
• 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…

similar documents