Successfully reported this slideshow.
Your SlideShare is downloading. ×

OGDC 2014: Architecting Games in Unity


Check these out next

1 of 28 Ad

More Related Content

Similar to OGDC 2014: Architecting Games in Unity (20)


More from GameLandVN (20)

OGDC 2014: Architecting Games in Unity

  1. 1. Architecting Games in Unity Common patterns for developing games in Unity
  2. 2. If this was your house, what would you do?
  3. 3. Broken Windows •Fix the windows. •In New York City, Albuquerque and The Netherlands, improving the physical appearance of a neighbourhood has been shown to reduce crime and increase quality of life. •People are influenced by their environment: • Social norms and conformity • Routine monitoring
  4. 4. Ah, Freedom! •Unity gives you a rich set of building blocks that can be used to construct any type of game. •Unity is flexible. •There are hundreds of ways to build projects. •And developers use ALL of them!
  5. 5. Architecture for Games •But let's look at what you need •And let's create a structure that can be reused for efficiency and robustness
  6. 6. Good Architecture = Good Standards •Use C# •Naming conventions • Use descriptive names • Use standardized capitalization • In Unity don’t be afraid of using spaces in names •Logical folder structure •Zero-tolerance for warnings and errors •Zero-tolerance for runtime memory allocation
  7. 7. Core Application Logic •Main Controller • Base controller to manage high level application • Uses public static methods so everyone can access it • Uses Object.DontDestroyOnLoad so it is available throughout the project •Scenes • Other scenes are loaded on top of this. • MainController loads and unloads other scenes and cleans up.
  8. 8. Main Controller – Reset State •Call GC.Collect to try to reclaim some memory.
  9. 9. Main Controller – Preload State •Start loading the level asynchronously and change state to Load
  10. 10. Main Controller – Load State •Keep going until loading is done
  11. 11. Main Controller – Unload State •Resources.UnloadUnusedAssets() •Keep going until Unloading is done
  12. 12. Main Controller – Postload State •Do things immediately after loading •Update currentSceneName
  13. 13. Main Controller – Ready State •Call GC.Collect to try to reclaim some memory. • Avoid this if you have unused assets in the scene that may be used later. •Do things just before beginning: e.g.: Get User Input to Start
  14. 14. Main Controller – Run State •We stay here until currentLevelName != nextLevelName •This can be changed by calling SwitchScene static public method on the Main Controller from anywhere
  15. 15. Scene State Machine Implementation •We can use a switch-case • Gets difficult to maintain and read •We can use delegates • Unfortunately, setting a delegate allocates memory •So we use an array of delegates.
  16. 16. Scene State Machine Implementation •Example Implementation • MainController, MenuController and GameController • Let’s look at the Profiler too!
  17. 17. Implementing Gameplay •Controllers manage the objects •Inter-object communication • Static public methods • Temporary public instance methods • Messages, events •Most common are: • Singletons • “Pool” controllers
  18. 18. Singleton •Only one of them in the game •Static public methods •Examples: • Score • Player • World • Game
  19. 19. Singleton •Example Implementation
  20. 20. Pool Based Objects •Numerous instances in the game •Limited number at any one time •Preload simultaneously used quantity and disable •Static public method to “spawn” one finds first disabled one and enables it •Examples: • Explosions • Bullets • Enemies • Scenery
  21. 21. GameObjects are loaded from storage and placed in a pool and disabled. Object Pool Storage Pool Based Objects
  22. 22. GameObjects are activated when needed. Object Pool Storage Pool Based Objects
  23. 23. GameObjects are deactivated when no longer needed. This returns them to the pool. Object Pool Storage Pool Based Objects
  24. 24. Pool Based Objects •Example Implementation
  25. 25. Download •Find the here:
  26. 26. Best-Practices •Use C# •Naming conventions •Logical folder structure •Zero-tolerance for warnings and errors •Zero-tolerance for runtime memory allocation
  27. 27. Thank You! Rustum Scammell Email: Skype: rustumscammell