29
Применение принципов дата-ориентированного программирования к играм на Unity

The use of data-oriented programming paradigm in Unity games

Embed Size (px)

Citation preview

Page 1: The use of data-oriented programming paradigm in Unity games

Применение принциповдата-ориентированного программированияк играм наUnity

Page 2: The use of data-oriented programming paradigm in Unity games

The teamAnswer the question, “Why are we the ones to solve the problem we identified?”

Альвина Рубальская Вова Роттердамский

Page 3: The use of data-oriented programming paradigm in Unity games

Интерактивный мульт

Page 4: The use of data-oriented programming paradigm in Unity games

Сложность проекта

Сложность кода

Сложность игровой логики

Page 5: The use of data-oriented programming paradigm in Unity games

Уникальная конфигурация

Уникальные узкоспециализированные программные решения

Уникальная иерархия классов

Сложность кода

Page 6: The use of data-oriented programming paradigm in Unity games

ДАННЫЕ НА ПЕРВОММЕСТЕ!

Простая идея

Page 7: The use of data-oriented programming paradigm in Unity games

Набор простых правил

Page 8: The use of data-oriented programming paradigm in Unity games

Композиция вместо наследования

Отсутствие инкапсуляции

Разделение данных и их трансформации

Pure Entity Component System

Page 9: The use of data-oriented programming paradigm in Unity games

Программируйтепротив самого частого случаяа не самого общего

Page 10: The use of data-oriented programming paradigm in Unity games

Level 0 Game LogicBad practiceMethod 1

If Data is ….....{

.........

.........}If Data is ….....{

.........

.........

.........}

Good practice

If Data is ….....{

Method 1}If Data is ....{

Method 2}

RUN Method 1

RUNMethod 2

Используйте меньше if в игровой логике

Page 11: The use of data-oriented programming paradigm in Unity games

Warrior

Bad practiceEnum Weapon{

sworddaggershield

}

If (ManType == Warrior){

switch Weaponcase sword:….......break;....................

}

Good practice

Component Sword

Не используйте enum

Component Shield

Component dagger

EnumManType{

warrioranother

}

Page 12: The use of data-oriented programming paradigm in Unity games

Pool

Entity

Component

Entity Entity

Component

System

System

System

Человек

Диаграмма классов

Военный

Разведчик

Снайпер

Юнит в джунглях

Кенгуру

Page 13: The use of data-oriented programming paradigm in Unity games

Пишите такой код который работает как можно

быстрее

Page 14: The use of data-oriented programming paradigm in Unity games

ПРЕИМУЩЕСТВА PURE ECS

Page 15: The use of data-oriented programming paradigm in Unity games

Низкая глубина наследования

Class

Component 1

Component 2

Component 4

Component 3

Page 16: The use of data-oriented programming paradigm in Unity games

Легкая тестируемость“Remember,whenyou'redoingdata-orienteddevelopment yourgameisentirelydrivenbystatefuldataandstateless transforms.Itisverysimpletoproduceunittestsforyourtransforms.Youdon'tevenneedaframework,justaninput andoutputtableandthenacomparison functiontocheckthatthetransformproduced therightdata.”

Page 17: The use of data-oriented programming paradigm in Unity games

Многопоточность

Entitites

Core 1 Core 2

Entitites

Page 18: The use of data-oriented programming paradigm in Unity games
Page 19: The use of data-oriented programming paradigm in Unity games

Artemis - https://thelinuxlich.github.io/artemis_CSharp/

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

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

Entity Component System для Unity

Page 20: The use of data-oriented programming paradigm in Unity games

Наш выбор

Entitas

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

Page 21: The use of data-oriented programming paradigm in Unity games

Почему

• Фиксированный порядок исполнения• Тестируемость• Кодогенерация - Отличное API• Независимость от Unity• Заменяет все паттерны ООП

Page 22: The use of data-oriented programming paradigm in Unity games

Фиксированный порядок исполнения

Page 23: The use of data-oriented programming paradigm in Unity games

Тестируемость

Page 24: The use of data-oriented programming paradigm in Unity games

Кодогенерация -Отличное API

Page 25: The use of data-oriented programming paradigm in Unity games

Независимость от Unity

Просто не используйте никакие методы Unity API

Да, придется создать аналоги методов (например Vector3) но зато просто перенести на сервер.

Page 26: The use of data-oriented programming paradigm in Unity games

Заменяет все паттерны ООП

Вы все равно их не используете

Page 27: The use of data-oriented programming paradigm in Unity games

Виды данных

Persistent data Config data

Runtime data

Unity Editor

Entitas

Page 28: The use of data-oriented programming paradigm in Unity games

Взаимодействие с внешнем API

Entitas External API

Component

Page 29: The use of data-oriented programming paradigm in Unity games

Спасибо!Вова Роттердамский[email protected]: maringreatvv

Альвина Рубальская[email protected]: raprii