Transcript

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

Thank You!

Rustum Scammell

Email: rus@unity3d.com

Skype: rustumscammell

top related