Rarebyte - How We Use Unity and Optimize Our Games

27

Transcript of Rarebyte - How We Use Unity and Optimize Our Games

Page 1: Rarebyte - How We Use Unity and Optimize Our Games
Page 2: Rarebyte - How We Use Unity and Optimize Our Games

Rainer AngermannCo-Founder

@rangermann

Page 3: Rarebyte - How We Use Unity and Optimize Our Games

• Games

• Mobile apps

• Public installations

• Headquarters: Graz, Vienna

• 25+ titles since 2006

• Agile, low overhead

• Work for hire

• Game porting

• Game development fromscratch

RAREBYTE

Page 4: Rarebyte - How We Use Unity and Optimize Our Games

• Rarebyte as unincorporated association since 1999

• ParadiGm – FPS, own engine, own editor, never released

THE BEGINNING

Page 5: Rarebyte - How We Use Unity and Optimize Our Games

GREEDY FLY

• TPS MMO, own engine, own editor, never released

Page 6: Rarebyte - How We Use Unity and Optimize Our Games

THINK BIG?

• Reality-check your ideas

• Manage your available

resources

• Do not start an MMO…

ever…

Page 7: Rarebyte - How We Use Unity and Optimize Our Games

• 2005 – Waterstorm development started

WATERSTORM

Page 8: Rarebyte - How We Use Unity and Optimize Our Games

• 2006 – Rarebyte company

• 2008 – Waterstorm release

WATERSTORM

Page 9: Rarebyte - How We Use Unity and Optimize Our Games
Page 10: Rarebyte - How We Use Unity and Optimize Our Games

Game Development in Unity

Page 11: Rarebyte - How We Use Unity and Optimize Our Games

UNITY – WHY USE IT?

• Focus on making games

• Affordable

• Community

• Re-use code and assets

• All major platforms

Page 12: Rarebyte - How We Use Unity and Optimize Our Games

„Small“ Projects:

• Setup scene in Unity

• Write some code

• Test in Unity editor

• One target platform

„Build and Run“ and you are done!

BUILD PROCESS

Page 13: Rarebyte - How We Use Unity and Optimize Our Games

• Build/device settings

• Signing identity

• Provisioning profiles

iOS BUILDS

Unity

Xcode Device

Page 14: Rarebyte - How We Use Unity and Optimize Our Games

BUILD SYSTEM

• Unity (commandline)

• Proprietary build

configurator

Page 15: Rarebyte - How We Use Unity and Optimize Our Games

• Game State System

• UI Panel System

• Webservices

• Localization

• Asset Bundle Loading

• Logger

• On-Screen Console

RAREBYTE LIBRARIES

Page 16: Rarebyte - How We Use Unity and Optimize Our Games

Performance Tips

Page 17: Rarebyte - How We Use Unity and Optimize Our Games

PERFORMANCE OPTIMIZATION

• Graphics/Shaders/Lighting

• Assets/Textures/Meshes/Import Settings

• Physics

• Audio

• Platform-specifics

• Scripting/Game Code

Page 18: Rarebyte - How We Use Unity and Optimize Our Games

• Gendarme

• Unity rules

STATIC CODE ANALYSIS

https://github.com/fderudder/unity-gendarme

Page 19: Rarebyte - How We Use Unity and Optimize Our Games

• Cache your components!

• Avoid GetComponent() callsin Update() or FixedUpdate()

CODING TIPS

Page 20: Rarebyte - How We Use Unity and Optimize Our Games

• Avoid empty MonoBehaviourmethods

CODING TIPS

Page 21: Rarebyte - How We Use Unity and Optimize Our Games

CODING TIPS

• Use Coroutines

• Avoid GameObject.Find (), GameObject.FindByTag()

• Don‘t use SendMessage() (100x slower!)

Page 22: Rarebyte - How We Use Unity and Optimize Our Games

PROFILER

Page 23: Rarebyte - How We Use Unity and Optimize Our Games

PROFILER

Page 24: Rarebyte - How We Use Unity and Optimize Our Games

POOLING

• Expensive Instantiate() calls

• Use a pool for game objects that need to be instantiated/killedfrequently

• https://unity3d.com/learn/tutorials/modules/beginner/live-training-archive/object-pooling

Page 25: Rarebyte - How We Use Unity and Optimize Our Games

ADVANCED OPTIMIZATION

• C# Memory and performance tips for Unity:

http://www.somasim.com/blog/2015/04/csharp-memory-and-performance-tips-for-unity/

• for-each vs. for etc.

• GC

Page 26: Rarebyte - How We Use Unity and Optimize Our Games

GENERAL ADVICE

• Code style/readability (format your code!)

• Use English for all names etc.

• Do not be afraid of refactoring/renaming

• Use a portrait resolution if your game is portrait

• MonoBehaviour/inspector: Use private members with [SerializeField]

• Unity Console (errors/warnings)

Page 27: Rarebyte - How We Use Unity and Optimize Our Games

www.rarebyte.com

facebook.com/rarebyte

@RarebyteGameDevQUESTIONS?