Upload
devgamm-conference
View
254
Download
0
Embed Size (px)
Citation preview
Применение принциповдата-ориентированного программированияк играм на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
Спасибо!Вова Роттердамский[email protected]: maringreatvv
Альвина Рубальская[email protected]: raprii