SlideShare a Scribd company logo
Ottawa Unity User
Group
Jon Keon – Karman Interactive
http://karmaninteractive.com
@jonkeon @KarmanLtd
Feb 13, 2015
Format
• Share Tips, Tricks, Experiences with Unity over
the last 3 years.
•  = Good things
•  = Bad things
• These are not laws, many ways to do things,
this is what has worked for us. Challenge it,
question it, we’re happy to discuss.
Format
• About Us
• Tips/Tricks/Experiences
• Asset Store Plugins
• Q&A
About Us
About Us
- Based in Ottawa and Toronto
- Small company (2 full time + small team of highly
trusted contractors)
- Mobile and Web, games and experiences
- Love to play with experimental and obscure
technologies
- Experiment driven, Client supported
- Experiments keep us ahead of the curve
- Client work keeps us sharp and pays the bills
Ottawa unity user_group_feb13_2015
Ottawa unity user_group_feb13_2015
Ottawa unity user_group_feb13_2015
Tips/Tricks/Experiences
Library Switching
– Big project with tons of textures?
 iOS/Android importer takes FOREVER.
 Don’t have the Asset Server license
– Check out this one simple trick
Library Switching
Library Switching
– Close Unity
– Rename Library folder
– Open Unity again to create a new Library folder
for the new Platform (happens once) or rename
previous Library folders back to just Library.
– Asset imported only imports the Deltas.
 Much faster than regular switch platforms
Custom Tools - Nudge
– Designer gives you a PSD to match.
– You need to pixel perfect match it.
 Dragging is inaccurate, manually entering x and y
coordinates is tedious.
Custom Tools - Nudge
Custom Tools - Nudge
– Invest in writing a custom editor tool.
– For us, H, U, J, K are keyboard shortcuts for
nudging any Transform or Transforms by a
configurable amount of units.
– Y is a keyboard shortcut to toggle whether a
GameObject or GameObjects are visible.
 Matching comps is now a 5 second process.
Asset Management
– Difference between Author Time and Run Time
Author Time Run Time
Need to visually layout assets
in a Prefab or Scene
Only want the assets needed
for the specific platform and
specific size.
Need to switch between 1X,
2X and 4X assets to ensure
consistency
Build size is limited! (50mb
Google Play, 100mb iOS)
Need to update
assets/prefabs/scenes
frequently
Need all assets locally
Asset Management
– Prefabs
• Create a different prefab for each permutation?
• iOS 1X, Android 2X, etc.
• Solves pretty much all the issues but…
 Makes your life hell. Change a button in one of them,
now you need to make the exact same change in all the
rest.
Asset Management
– Prefabs
• Have just one prefab and dynamically swap the assets?
• Getting closer, but…
 All of those assets are now referenced by the prefab so they
get included in the build.
 You’re going to have two sets of assets in most of your builds
with one set you never use.
Asset Management
– Prefabs
• Invest in custom editor tool?
Asset Management
– Karman Asset Pipeline (1/3)
• Build Prefabs with assets normally. (Author Prefabs)
• Anytime you hit play, save the scene or save the
project, our script runs.
• Detects all Author Prefabs with a different hash (to
detect changes).
• Duplicates all Author Prefabs and stores them in a
different folder. (Runtime Prefabs) Removes all
references to the assets on those prefabs and instead
writes a metadata script to the GameObject instead.
Asset Management
– Karman Asset Pipeline (2/3)
• Assets that changed are built to Asset Bundles for each
platform and each size automatically. (iOS 1X, 2X, 4X,
Android 1X, 2X, 4X etc)
• New Runtime Prefabs are included in the build. Old
Author Prefabs are not included, so no assets are
included.
• Asset Bundles can be specified to be External or
Internal so that you can fill up as much of the
50MB(Android) or 100MB(iOS) limit as you want and let
the rest be downloaded from a Server.
Asset Management
– Karman Asset Pipeline (3/3)
• At Runtime, Asset Manager checks platform and
screens-size.
• Downloads required Asset Bundles if we don’t have
them already.
• Whenever a Runtime Prefab is Instantiated, metadata
script pulls the correct asset from the bundle and sets
it. Runtime Prefab now looks exactly the same as the
Author Prefab but with the correct size of Assets.
Asset Management
– Author Prefab on left, Runtime Prefab on right
Asset Management
– Karman Asset Pipeline Post Mortem
• Large initial investment to build.
• Return in robustness and workflow worth it.
– Benefits
 Never forget, automatically happens during a Save or
when pressing Play in the editor.
 Build in the editor with the actual assets. (Like you’d
expect to)
 Have full control over all permutations of assets and
whether they are internal or external.
WWW Class
 The WWW class has limitations. Basically allows
for sending simple GET or POST requests.
 Consider writing a wrapper to handle retries,
timeouts, cache-busting etc.
– Headers
 Look to List of HTTP header fields (Wikipedia) for what
headers can be sent and received.
 Access by passing request headers to WWW
constructor and check WWW.responseHeaders when
it returns.
WWW Class
– Example:
• Grabs the Status Code being returned. Far more useful
for debugging than looking just at the WWW.error
property.
Launch From Any Scene
– You have a Main Scene that starts your game. You
press play and the game loads normally and you play.
– You’re now working in the Level 6 scene. You make
some changes and press play and everything errors
because it can’t find the player etc.
– That’s because the Player gets set in the Main scene
and you just skipped all that.
 You have to save your Level 6 scene, switch to Main
scene, play and the switch back.
Launch From Any Scene
– Create a script that lives in every scene. When it
starts, it destroys everything else in the scene and
loads the Main Scene.
Launch From Any Scene
– But the scene I launched from threw a bunch of
errors to the console before we launched the
Main Scene!
Launch From Any Scene
– Now you can work in any scene and press play to
go to your main scene.
– You guarantee consistency in the launch flow so
there are less bugs.
– When you’re done testing, you go right back to
the scene you were working in.
 Time saved.
Asset Store Plugins
Asset Store Plugins
– 2D Toolkit
• http://2dtoolkit.com/
 Sprite Atlas creation is easy and has great features like:
– Custom Anchor points per sprite
– Ability to dice your sprite into smaller images so they take up
less space
– Remove duplicates (works really well with dicing)
 Handles 9-sliced sprites nicely
 Operates in 3D space so easy to merge 2D and 3D
content.
Asset Store Plugins
– Text Mesh Pro
• http://digitalnativestudios.com/
 Bitmap Fonts work well for one size and can be large
textures depending on how many characters.
 Text Mesh Pro uses Signed Distance Fields to render the text
crisply at any size. Textures are often smaller too.
 Also has many other features for auto-sizing text, formatting
etc. If you build anything multi-lingual this plugin is a
necessity.
Asset Store Plugins
– DOTween
• http://dotween.demigiant.com/
 Successor to HOTween.
 Handles making things move… nicely.
 Even in beta, it’s the best tween engine we’ve seen for
features, performance and API.
Conclusions
– Spend the money to explore Asset Store plugins.
• Odds are high that the cost to purchase is far lower
than the time it would take you to create it.
• It will also have been bug tested and used by many
others in live projects.
– If an Asset Store Plugin doesn’t exist, invest the
time to create your own tools.
• Pick your biggest pain point and solve that first.
• Test on a live project to find the pitfalls and actual use-
cases. Give yourself time.
• Concerns and Comments are also acceptable
and encouraged.
Questions?
THANKS!

More Related Content

PDF
Game Programming - Cloud Development
PPTX
Supersize your production pipe enjmin 2013 v1.1 hd
PPTX
Phaser presentation
PPTX
Developing Multiplayer Games in Unity3D
PPTX
Introduction to Phaser.js
PPTX
Maximize Your Production Effort (English)
PPTX
East Coast DevCon 2014: Game Programming in UE4 - Game Framework & Sample Pro...
PDF
BSidesDelhi 2018: Headshot - Game Hacking on macOS
Game Programming - Cloud Development
Supersize your production pipe enjmin 2013 v1.1 hd
Phaser presentation
Developing Multiplayer Games in Unity3D
Introduction to Phaser.js
Maximize Your Production Effort (English)
East Coast DevCon 2014: Game Programming in UE4 - Game Framework & Sample Pro...
BSidesDelhi 2018: Headshot - Game Hacking on macOS

What's hot (18)

PDF
Confrontation Pipeline and SCons
PPTX
West Coast DevCon 2014: The Slate UI Framework (Part 1) - Introduction
PDF
A preview of Feathers 2.2 and the Feathers SDK
PDF
【Unite Tokyo 2018】実践的なパフォーマンス分析と最適化
PDF
Combining the strength of erlang and Ruby
PDF
Erlang factory SF 2011 "Erlang and the big switch in social games"
PDF
Unite2013-gavilan-pdf
PDF
Game Programming 10 - Localization
PDF
Erlang as a cloud citizen, a fractal approach to throughput
PPTX
Infrastructure as Code - Getting Started, Concepts & Tools
PDF
EFL (Tizen Native Display Layer – Architecture & Usage) - Carsten Haitzler
PDF
Basic Optimization and Unity Tips & Tricks by Yogie Aditya
PPTX
West Coast DevCon 2014: Build Automation - Epic’s Build Tools & Infrastructure
PDF
Amazon EC2 in der Praxis
PDF
Get On The Audiobus (CocoaConf Atlanta, November 2013)
PDF
FunctionalConf '16 Robert Virding Erlang Ecosystem
PPTX
East Coast DevCon 2014: Engine Overview - A Programmer’s Glimpse at UE4
PDF
MYSQL Patterns in Amazon - Make the Cloud Work For You
Confrontation Pipeline and SCons
West Coast DevCon 2014: The Slate UI Framework (Part 1) - Introduction
A preview of Feathers 2.2 and the Feathers SDK
【Unite Tokyo 2018】実践的なパフォーマンス分析と最適化
Combining the strength of erlang and Ruby
Erlang factory SF 2011 "Erlang and the big switch in social games"
Unite2013-gavilan-pdf
Game Programming 10 - Localization
Erlang as a cloud citizen, a fractal approach to throughput
Infrastructure as Code - Getting Started, Concepts & Tools
EFL (Tizen Native Display Layer – Architecture & Usage) - Carsten Haitzler
Basic Optimization and Unity Tips & Tricks by Yogie Aditya
West Coast DevCon 2014: Build Automation - Epic’s Build Tools & Infrastructure
Amazon EC2 in der Praxis
Get On The Audiobus (CocoaConf Atlanta, November 2013)
FunctionalConf '16 Robert Virding Erlang Ecosystem
East Coast DevCon 2014: Engine Overview - A Programmer’s Glimpse at UE4
MYSQL Patterns in Amazon - Make the Cloud Work For You
Ad

Similar to Ottawa unity user_group_feb13_2015 (20)

PDF
Supersize Your Production Pipe
PDF
PHP Backends for Real-Time User Interaction using Apache Storm.
PDF
React Conf 17 Recap
PDF
Connect 2014 SHOW102: XPages Still No Experience Necessary
PPTX
Matt Franklin - Apache Software (Geekfest)
PDF
Game Development Using HTML 5
PDF
Spot Trading - A case study in continuous delivery for mission critical finan...
PDF
SHOW102 XPages: Still No Experience Necessary IBM Connect 2014
PDF
Online game server on Akka.NET (NDC2016)
PDF
Adventures in cross platform ConnectJS / TiConnect 2014
PDF
Advanced web application architecture - Talk
PDF
XPages: No Experience Needed
PPTX
Vulnerability, exploit to metasploit
PDF
Puppet Development Workflow
PPTX
Inside the IT Territory game server / Mark Lokshin (IT Territory)
PPTX
How to build a SaaS solution in 60 days
PDF
Scaling Django Apps using AWS Elastic Beanstalk
PDF
DevOps: Building by feature with immutable infrastructure at Serv.sg
PDF
Adobe AIR for mobile games
Supersize Your Production Pipe
PHP Backends for Real-Time User Interaction using Apache Storm.
React Conf 17 Recap
Connect 2014 SHOW102: XPages Still No Experience Necessary
Matt Franklin - Apache Software (Geekfest)
Game Development Using HTML 5
Spot Trading - A case study in continuous delivery for mission critical finan...
SHOW102 XPages: Still No Experience Necessary IBM Connect 2014
Online game server on Akka.NET (NDC2016)
Adventures in cross platform ConnectJS / TiConnect 2014
Advanced web application architecture - Talk
XPages: No Experience Needed
Vulnerability, exploit to metasploit
Puppet Development Workflow
Inside the IT Territory game server / Mark Lokshin (IT Territory)
How to build a SaaS solution in 60 days
Scaling Django Apps using AWS Elastic Beanstalk
DevOps: Building by feature with immutable infrastructure at Serv.sg
Adobe AIR for mobile games
Ad

Recently uploaded (20)

PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
A Presentation on Artificial Intelligence
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Encapsulation theory and applications.pdf
PDF
Modernizing your data center with Dell and AMD
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Empathic Computing: Creating Shared Understanding
PDF
Approach and Philosophy of On baking technology
Review of recent advances in non-invasive hemoglobin estimation
Network Security Unit 5.pdf for BCA BBA.
A Presentation on Artificial Intelligence
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
Understanding_Digital_Forensics_Presentation.pptx
20250228 LYD VKU AI Blended-Learning.pptx
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Encapsulation theory and applications.pdf
Modernizing your data center with Dell and AMD
Diabetes mellitus diagnosis method based random forest with bat algorithm
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
NewMind AI Weekly Chronicles - August'25 Week I
Building Integrated photovoltaic BIPV_UPV.pdf
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Mobile App Security Testing_ A Comprehensive Guide.pdf
Empathic Computing: Creating Shared Understanding
Approach and Philosophy of On baking technology

Ottawa unity user_group_feb13_2015

  • 1. Ottawa Unity User Group Jon Keon – Karman Interactive http://karmaninteractive.com @jonkeon @KarmanLtd Feb 13, 2015
  • 2. Format • Share Tips, Tricks, Experiences with Unity over the last 3 years. •  = Good things •  = Bad things • These are not laws, many ways to do things, this is what has worked for us. Challenge it, question it, we’re happy to discuss.
  • 3. Format • About Us • Tips/Tricks/Experiences • Asset Store Plugins • Q&A
  • 5. About Us - Based in Ottawa and Toronto - Small company (2 full time + small team of highly trusted contractors) - Mobile and Web, games and experiences - Love to play with experimental and obscure technologies - Experiment driven, Client supported - Experiments keep us ahead of the curve - Client work keeps us sharp and pays the bills
  • 10. Library Switching – Big project with tons of textures?  iOS/Android importer takes FOREVER.  Don’t have the Asset Server license – Check out this one simple trick
  • 12. Library Switching – Close Unity – Rename Library folder – Open Unity again to create a new Library folder for the new Platform (happens once) or rename previous Library folders back to just Library. – Asset imported only imports the Deltas.  Much faster than regular switch platforms
  • 13. Custom Tools - Nudge – Designer gives you a PSD to match. – You need to pixel perfect match it.  Dragging is inaccurate, manually entering x and y coordinates is tedious.
  • 14. Custom Tools - Nudge
  • 15. Custom Tools - Nudge – Invest in writing a custom editor tool. – For us, H, U, J, K are keyboard shortcuts for nudging any Transform or Transforms by a configurable amount of units. – Y is a keyboard shortcut to toggle whether a GameObject or GameObjects are visible.  Matching comps is now a 5 second process.
  • 16. Asset Management – Difference between Author Time and Run Time Author Time Run Time Need to visually layout assets in a Prefab or Scene Only want the assets needed for the specific platform and specific size. Need to switch between 1X, 2X and 4X assets to ensure consistency Build size is limited! (50mb Google Play, 100mb iOS) Need to update assets/prefabs/scenes frequently Need all assets locally
  • 17. Asset Management – Prefabs • Create a different prefab for each permutation? • iOS 1X, Android 2X, etc. • Solves pretty much all the issues but…  Makes your life hell. Change a button in one of them, now you need to make the exact same change in all the rest.
  • 18. Asset Management – Prefabs • Have just one prefab and dynamically swap the assets? • Getting closer, but…  All of those assets are now referenced by the prefab so they get included in the build.  You’re going to have two sets of assets in most of your builds with one set you never use.
  • 19. Asset Management – Prefabs • Invest in custom editor tool?
  • 20. Asset Management – Karman Asset Pipeline (1/3) • Build Prefabs with assets normally. (Author Prefabs) • Anytime you hit play, save the scene or save the project, our script runs. • Detects all Author Prefabs with a different hash (to detect changes). • Duplicates all Author Prefabs and stores them in a different folder. (Runtime Prefabs) Removes all references to the assets on those prefabs and instead writes a metadata script to the GameObject instead.
  • 21. Asset Management – Karman Asset Pipeline (2/3) • Assets that changed are built to Asset Bundles for each platform and each size automatically. (iOS 1X, 2X, 4X, Android 1X, 2X, 4X etc) • New Runtime Prefabs are included in the build. Old Author Prefabs are not included, so no assets are included. • Asset Bundles can be specified to be External or Internal so that you can fill up as much of the 50MB(Android) or 100MB(iOS) limit as you want and let the rest be downloaded from a Server.
  • 22. Asset Management – Karman Asset Pipeline (3/3) • At Runtime, Asset Manager checks platform and screens-size. • Downloads required Asset Bundles if we don’t have them already. • Whenever a Runtime Prefab is Instantiated, metadata script pulls the correct asset from the bundle and sets it. Runtime Prefab now looks exactly the same as the Author Prefab but with the correct size of Assets.
  • 23. Asset Management – Author Prefab on left, Runtime Prefab on right
  • 24. Asset Management – Karman Asset Pipeline Post Mortem • Large initial investment to build. • Return in robustness and workflow worth it. – Benefits  Never forget, automatically happens during a Save or when pressing Play in the editor.  Build in the editor with the actual assets. (Like you’d expect to)  Have full control over all permutations of assets and whether they are internal or external.
  • 25. WWW Class  The WWW class has limitations. Basically allows for sending simple GET or POST requests.  Consider writing a wrapper to handle retries, timeouts, cache-busting etc. – Headers  Look to List of HTTP header fields (Wikipedia) for what headers can be sent and received.  Access by passing request headers to WWW constructor and check WWW.responseHeaders when it returns.
  • 26. WWW Class – Example: • Grabs the Status Code being returned. Far more useful for debugging than looking just at the WWW.error property.
  • 27. Launch From Any Scene – You have a Main Scene that starts your game. You press play and the game loads normally and you play. – You’re now working in the Level 6 scene. You make some changes and press play and everything errors because it can’t find the player etc. – That’s because the Player gets set in the Main scene and you just skipped all that.  You have to save your Level 6 scene, switch to Main scene, play and the switch back.
  • 28. Launch From Any Scene – Create a script that lives in every scene. When it starts, it destroys everything else in the scene and loads the Main Scene.
  • 29. Launch From Any Scene – But the scene I launched from threw a bunch of errors to the console before we launched the Main Scene!
  • 30. Launch From Any Scene – Now you can work in any scene and press play to go to your main scene. – You guarantee consistency in the launch flow so there are less bugs. – When you’re done testing, you go right back to the scene you were working in.  Time saved.
  • 32. Asset Store Plugins – 2D Toolkit • http://2dtoolkit.com/  Sprite Atlas creation is easy and has great features like: – Custom Anchor points per sprite – Ability to dice your sprite into smaller images so they take up less space – Remove duplicates (works really well with dicing)  Handles 9-sliced sprites nicely  Operates in 3D space so easy to merge 2D and 3D content.
  • 33. Asset Store Plugins – Text Mesh Pro • http://digitalnativestudios.com/  Bitmap Fonts work well for one size and can be large textures depending on how many characters.  Text Mesh Pro uses Signed Distance Fields to render the text crisply at any size. Textures are often smaller too.  Also has many other features for auto-sizing text, formatting etc. If you build anything multi-lingual this plugin is a necessity.
  • 34. Asset Store Plugins – DOTween • http://dotween.demigiant.com/  Successor to HOTween.  Handles making things move… nicely.  Even in beta, it’s the best tween engine we’ve seen for features, performance and API.
  • 35. Conclusions – Spend the money to explore Asset Store plugins. • Odds are high that the cost to purchase is far lower than the time it would take you to create it. • It will also have been bug tested and used by many others in live projects. – If an Asset Store Plugin doesn’t exist, invest the time to create your own tools. • Pick your biggest pain point and solve that first. • Test on a live project to find the pitfalls and actual use- cases. Give yourself time.
  • 36. • Concerns and Comments are also acceptable and encouraged. Questions? THANKS!

Editor's Notes

  • #33: We may replace with Unity’s new UI system. Still evaluating at this point.