4. 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
5. 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!
6.
7. 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
8. 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
9.
10. 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.
11. Main Controller – Reset State
• Call GC.Collect to try to reclaim some memory.
12. Main Controller – Preload State
• Start loading the level asynchronously and change state to Load
14. Main Controller – Unload State
• Resources.UnloadUnusedAssets()
• Keep going until Unloading is done
15. Main Controller – Postload State
• Do things immediately after loading
• Update currentSceneName
16. 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
17. 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
18. 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.
19. Scene State Machine Implementation
• Example Implementation
• MenuController
• GameController
• MainController
38. 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
39. GameObjects are loaded from
storage and placed in a pool and
disabled.
Object Pool
Storage
Pool Based Objects