the use of data-oriented programming paradigm in unity games

Post on 16-Apr-2017

255 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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

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

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

Простая идея

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

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

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

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

Pure Entity Component System

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

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 в игровой логике

Warrior

Bad practiceEnum Weapon{

sworddaggershield

}

If (ManType == Warrior){

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

}

Good practice

Component Sword

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

Component Shield

Component dagger

EnumManType{

warrioranother

}

Pool

Entity

Component

Entity Entity

Component

System

System

System

Человек

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

Военный

Разведчик

Снайпер

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

Кенгуру

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

быстрее

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

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

Class

Component 1

Component 2

Component 4

Component 3

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

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

Entitites

Core 1 Core 2

Entitites

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

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

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

Entity Component System для Unity

Наш выбор

Entitas

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

Почему

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

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

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

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

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

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

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

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

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

Виды данных

Persistent data Config data

Runtime data

Unity Editor

Entitas

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

Entitas External API

Component

Спасибо!Вова Роттердамскийmarinegreatvv@yahoo.comSkype: maringreatvv

Альвина Рубальскаяalvinamail@gmail.comSkype: raprii

top related