OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

53

Transcript of OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

Page 1: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Page 2: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

Architecting Games in Unity

Common patterns for developing games in Unity

Page 3: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

If this was your house, what would you do?

Page 4: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

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

Page 5: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

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!

Page 6: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Page 7: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

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

Page 8: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

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

Page 9: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Page 10: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

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.

Page 11: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

Main Controller – Reset State

• Call GC.Collect to try to reclaim some memory.

Page 12: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

Main Controller – Preload State

• Start loading the level asynchronously and change state to Load

Page 13: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

Main Controller – Load State

• Keep going until loading is done

Page 14: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

Main Controller – Unload State

• Resources.UnloadUnusedAssets()

• Keep going until Unloading is done

Page 15: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

Main Controller – Postload State

• Do things immediately after loading

• Update currentSceneName

Page 16: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

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

Page 17: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

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

Page 18: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

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.

Page 19: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

Scene State Machine Implementation

• Example Implementation • MenuController

• GameController

• MainController

Page 20: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

MenuController

Page 21: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Page 22: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

GameController

Page 23: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Page 24: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

MainController

Page 25: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Page 26: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Page 27: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Page 28: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Page 29: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Page 30: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Page 31: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Page 32: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Page 33: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Page 34: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Page 35: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

Implementing Gameplay

• Controllers manage the objects

• Inter-object communication • Static public methods

• Temporary public instance methods

• Messages, events

• Most common are: • Singletons

• “Pool” controllers

Page 36: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

Singleton

• Only one of them in the game

• Static public methods

• Examples: • Score

• Player

• World

• Game

Page 37: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

Singleton

• Example Implementation

Page 38: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

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

Page 39: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

GameObjects are loaded from storage and placed in a pool and disabled.

Object Pool

Storage

Pool Based Objects

Page 40: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

GameObjects are activated when needed.

Object Pool

Storage

Pool Based Objects

Page 41: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

GameObjects are deactivated when no longer needed. This returns them to the pool.

Object Pool

Storage

Pool Based Objects

Page 42: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

Pool Based Objects

• Example Implementation

Page 43: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

SpawnPointController

Page 44: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Page 45: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

AgentController

Page 46: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Page 47: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Page 48: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Page 49: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Page 50: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell
Page 51: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

Download

• Find the Template.zip here:

http://goo.gl/8WZGxn

Page 52: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

Best-Practices

• Use C#

• Naming conventions

• Logical folder structure

• Zero-tolerance for warnings and errors

• Zero-tolerance for runtime memory allocation

Page 53: OGDC 2014_Architecting Games in Unity_Mr. Rustum Scammell

Thank You!

Rustum Scammell

Email: [email protected]

Skype: rustumscammell