gamedev 2017 - Анатолій Ландишев "aaa architecture in unity3d"

96
AAA ARCHITECTURE IN Speaker: Anatolii Landyshev

Upload: lviv-startup-club

Post on 27-Jan-2017

24 views

Category:

Education


4 download

TRANSCRIPT

Page 1: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

AAA ARCHITECTURE IN

Speaker: Anatolii Landyshev

Page 2: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

• Founder, CTO of Patriotic Games

• 6 years of experience in

http://patriotic.games

Anatolii Landyshev

Page 3: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Agenda• The goals of game architecture

• Unity architecture analysis• Components vs Inheritance• Singletons and Encapsulation

• Entity Component System (ECS)• Definition and advantages• ECS in Unity

Page 4: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Agenda• The goals of game architecture

• Unity architecture analysis• Components vs Inheritance• Singletons and Encapsulation

• Entity Component System (ECS)• Definition and advantages• ECS in Unity

Page 5: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Games vs Apps

Page 6: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Lots of real-time

simulations on single

screen

Page 7: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Look & feel

Experience

Fun

Page 8: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Content is over 50%

of the game

Page 9: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Perfect Game Architecture• Flexible

• Rapid prototyping

• “No Engineer required”

Page 10: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Agenda• The goals of game architecture

• Unity architecture analysis• Components vs Inheritance• Singletons and Encapsulation

• Entity Component System (ECS)• Definition and advantages• ECS in Unity

Page 11: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

The easiest architecture in Unity

Page 12: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

The easiest architecture in Unity

Page 13: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Check Zombie Toys on Asset Store

Page 14: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Agenda• The goals of game architecture

• Unity architecture analysis• Components vs Inheritance• Singletons and Encapsulation

• Entity Component System (ECS)• Definition and advantages• ECS in Unity

Page 15: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Components instead of Inheritance

Page 16: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Introducing Space Wars

Page 17: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

MonoBehaviour

Player Spaceship

AIPlayer

HumanPlayer

Scout

Defender

Cruiser

Page 18: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

MonoBehaviour

Player Spaceship

AIPlayer

HumanPlayer

Scout

Defender

Cruiser

Page 19: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

MonoBehaviour

Player Spaceship

AIPlayer

HumanPlayer

Scout

Defender

Cruiser

Page 20: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

AIPlayer

Defender

Gun

Composition over inheritance

Page 21: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

AIPlayer

Defender

Gun

Composition over inheritance

Page 22: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

AIPlayer

PlayerAI

RenderHealthTeam

Defender

MoveRenderHealthTeamGun

Components instead of inheritance

Page 23: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

AIPlayer

PlayerAI

RenderHealthTeam

Defender

MoveRenderHealthTeamGun

Components instead of inheritance

Page 24: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

AIPlayer

PlayerAI

RenderHealthTeamGun

Defender

MoveRenderHealthTeamGun

Components instead of inheritance

Page 25: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Components instead of Inheritance

Pros: flexibility

Cons: !code-sharing

Page 26: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Agenda• The goals of game architecture

• Unity architecture analysis• Components vs Inheritance• Singletons and Encapsulation

• Entity Component System (ECS)• Definition and advantages• ECS in Unity

Page 27: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Singleton GameManager

Page 28: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Singleton GameManager

breaksEncapsulatio

n

Page 29: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Data Instructions

Application

Page 30: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Data Instructions

Application Code

Variables

Functions (Methods)

Page 31: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Variables + Functions = Procedural Programming

Page 32: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"
Page 33: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

- the goal of OOP

Page 34: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Modularity

Goals of OOP

Scalability

Page 35: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Modularity

Goals of OOP

Scalability

Encapsulation

Page 36: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

What is an object?

Page 37: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

What is an object?

Page 38: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

What is an object?

Page 39: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Object-oriented program

Page 40: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Messages may read and modify state

Page 41: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Messages may read and modify state

Page 42: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Messages may read and modify state

The moment objects are sharedwe lose Encapsulation

Page 43: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Only way to encapsulate objects = strict hierarchy of references/messages

Page 44: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Only way to encapsulate objects = strict hierarchy of references/messages

Page 45: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Use of singleton GameManager

Page 46: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Expectation Reality

Page 47: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Singleton GameManager

Pros: simple

Cons: non-modular code

Page 48: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

What to use instead:strict hierarchy of references/messages?

Pros: modularity

Cons: lack of flexibility

Page 49: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

What about cross-cutting concerns?

Page 50: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

What about cross-cutting concerns?

Page 51: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Expectation Reality

Page 52: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

What to use instead:strict hierarchy of references/messages?

Pros: modularity

Cons: lack of flexibility

Page 53: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Absence of structure is better than bad structure

Page 54: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Data Instructions

Application

Page 55: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Agenda• The goals of game architecture

• Unity architecture analysis• Components vs Inheritance• Singletons and Encapsulation

• Entity Component System (ECS)• Definition and advantages• ECS in Unity

Page 56: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

ECS is mainstream in

MMO & AAA games

Page 57: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Unity

SceneGameObjectGameObjectGameObject

GameObject

MonoBehaviourMonoBehaviourMonoBehaviour

MonoBehaviour

DataBehaviour

Page 58: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Unity

SceneGameObjectGameObjectGameObject

GameObject

MonoBehaviourMonoBehaviourMonoBehaviour

MonoBehaviour

DataBehaviour

Context

EntityEntityEntity

EntityComponentComponentComponent

Component

Data

ECS

Page 59: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Unity

SceneGameObjectGameObjectGameObject

GameObject

MonoBehaviourMonoBehaviourMonoBehaviour

MonoBehaviour

DataBehaviour

Context

EntityEntityEntity

EntityComponentComponentComponent

Component

Data

ECS No Behaviour in Components!

Page 60: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"
Page 61: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

OK, WHAT ABOUT LOGIC?

Page 62: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"
Page 63: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Systemschain of responsibility

Page 64: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Systemschain of responsibility

Page 65: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

ECS advantages

Page 66: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

• Testability

Page 67: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

• Co-dependent logic

Page 68: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

• Co-dependent logic

Page 69: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

• Querying

Page 70: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

OK, WHAT ABOUT PERFORMANCE?

Page 71: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

OK, WHAT ABOUT PERFORMANCE?•Multithreading almost for free•Data locality

Page 72: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"
Page 73: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"
Page 74: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"
Page 75: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"
Page 76: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"
Page 77: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Agenda• The goals of game architecture

• Unity architecture analysis• Components vs Inheritance• Singletons and Encapsulation

• Entity Component System (ECS)• Definition and advantages• ECS in Unity

Page 78: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

“Entity Systems are the future of MMOG development”

Adam Martin (t-machine.org)

Page 79: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

ECS frameworks for Unity• Entitas C# -

https://github.com/sschmid/Entitas-CSharp

• Artemis C# - https://github.com/thelinuxlich/artemis_CSharp

• uFrame ECS – https://github.com/uFrame/ECS

• EgoCS - https://github.com/andoowhy/EgoCS

Page 80: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

ECS Framework for Unitytinyurl.com/entitas

or search for ENTITAS UNITY on YouTube

Page 81: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Entitas advantages:

Page 82: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

is open sourcegithub.com/sschmid/Entitas-

CSharp

Page 83: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Entitas advantages:

• It’s open-source

Page 84: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Excellent community & support

Page 85: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Entitas advantages:

• It’s open-source• Excellent community & support

Page 86: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Entitas advantages:

• It’s open-source• Excellent community & support• Code-sharing

Page 87: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Unity Visual Debug

Page 88: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Entitas advantages:

• It’s open-source• Excellent community & support• Code-sharing• Special debug features for Unity

Page 89: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Entitas advantages:

• It’s open-source• Excellent community & support• Code-sharing• Special debug features for Unity• Great performance

Page 90: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Unity vs Entitas Performance1000 objects with 2 components

Page 91: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

• Memory: 9x (2.9MB vs 0.32MB)

• CPU: 17x (105ms vs 6ms)

Unity vs Entitas Performance1000 objects with 2 components

Page 92: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

• reuses Entities• reuses Components• caches Groups• can index Components

Entitas…

Page 93: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

• Initialize Systems• Execute Systems• Reactive Systems• only processes changed

entities

Systems in Entitas

Page 94: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

#madeWithEntitas

Page 95: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Agenda• The goals of game architecture

• Unity architecture analysis• Components vs Inheritance• Singletons and Encapsulation

• Entity Component System (ECS)• Definition and advantages• ECS in Unity

Page 96: GameDev 2017 - Анатолій Ландишев "AAA architecture in Unity3D"

Questions?