OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Embed Size (px)
Transcript of OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell


Architecting Games in Unity
Common patterns for developing games in Unity

If this was your house, what would you do?

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

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!


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

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


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.

Main Controller – Reset State
• Call GC.Collect to try to reclaim some memory.

Main Controller – Preload State
• Start loading the level asynchronously and change state to Load

Main Controller – Load State
• Keep going until loading is done

Main Controller – Unload State
• Resources.UnloadUnusedAssets()
• Keep going until Unloading is done

Main Controller – Postload State
• Do things immediately after loading
• Update currentSceneName

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

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

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.

Scene State Machine Implementation
• Example Implementation • MenuController
• GameController
• MainController

MenuController


GameController


MainController











Implementing Gameplay
• Controllers manage the objects
• Inter-object communication • Static public methods
• Temporary public instance methods
• Messages, events
• Most common are: • Singletons
• “Pool” controllers

Singleton
• Only one of them in the game
• Static public methods
• Examples: • Score
• Player
• World
• Game

Singleton
• Example Implementation

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

GameObjects are loaded from storage and placed in a pool and disabled.
Object Pool
Storage
Pool Based Objects

GameObjects are activated when needed.
Object Pool
Storage
Pool Based Objects

GameObjects are deactivated when no longer needed. This returns them to the pool.
Object Pool
Storage
Pool Based Objects

Pool Based Objects
• Example Implementation

SpawnPointController


AgentController






Download
• Find the Template.zip here:
http://goo.gl/8WZGxn

Best-Practices
• Use C#
• Naming conventions
• Logical folder structure
• Zero-tolerance for warnings and errors
• Zero-tolerance for runtime memory allocation