Максим Гринів “Правильна розробка мультиплеєру”

21
Від 2х до 1500 кросплатформених мультиплеєрних юнітів на карті Як правильно синхронізувати мультиплеєрні ігри Чому мультплеєр, завжди біг тинг, все з практики, динамічні ігри, шана АоЕ

Upload: lviv-startup-club

Post on 17-Jul-2015

148 views

Category:

Business


1 download

TRANSCRIPT

Page 1: Максим Гринів “Правильна розробка мультиплеєру”

Від 2х до 1500 кросплатформених

мультиплеєрних юнітів на карті

Як правильно синхронізувати мультиплеєрні ігри

Чому мультплеєр, завжди біг тинг, все з практики,

динамічні ігри, шана АоЕ

Page 2: Максим Гринів “Правильна розробка мультиплеєру”

Авторитарний сервер

Топологія

В 2х словах, Не робіть п2п

Page 3: Максим Гринів “Правильна розробка мультиплеєру”

Авторитарний сервер

Синхронізація

Подія з клієнта відправляється на сервер

Сервер підтверджує подію і відправляє результат всім клієнтам

Сервер генерує події та відправляє клієнтам

Page 4: Максим Гринів “Правильна розробка мультиплеєру”

Авторитарний сервер

Коли використовуємо:

Покрокові ігриОперації з внутрішньо-ігровими предметами, валютоюЛокальний мультиплеєр

Нюанси

Затримка дій юзера

Нагрузка на сервер

Розробка серверної частини гри

Лишній трафік

Чому взагалі за це згадав, не робіть так, фізика

Коли не використовуємо:Будь-яка динамікаВелика кількість юнітівВеликий пінг

Page 5: Максим Гринів “Правильна розробка мультиплеєру”

Незалежна симуляція

Топологія:

Не робіть п2п

Page 6: Максим Гринів “Правильна розробка мультиплеєру”

Незалежна симуляція

Синхронізація:

Подія моментально виконується на

клієнті та відсилається іншим клієнтам

Клієнти регулярно посилають частину

свого стану для синхронізації

Клієнти можуть перераховують симуляцію

якщо приходять повідомлення «з

минулого»

Page 7: Максим Гринів “Правильна розробка мультиплеєру”

Незалежна симуляція

Пересчет симуляции

Page 8: Максим Гринів “Правильна розробка мультиплеєру”

Незалежна симуляція

Фізика при незалежній симуляції

Page 9: Максим Гринів “Правильна розробка мультиплеєру”

Незалежна симуляція

Колізії:

Використовуємо психологію

Page 10: Максим Гринів “Правильна розробка мультиплеєру”

Незалежна симуляція

Коли використовуємо:

Динамічні ігри з швидким зворотнім звязком

(шутери, слешери, платформери, гонки ітд)

Нюанси

Можна використовувати non reliable повідомлення

Фізика: колізії тільки зі статичними тілами

При розробці завжди памятаємо за синхронізацію

Security

Кросплатформеність без проблем

Коли не використовуємо:

Велика кількість юнітів

Ідеальна синхронізація (шутер з одним патроном)

Page 11: Максим Гринів “Правильна розробка мультиплеєру”

1500 юнітів (simultaneous simulation /

simultaneous lockstep)Топологія:

Про синхронність, Не робіть п2п

Page 12: Максим Гринів “Правильна розробка мультиплеєру”

1500 юнітів

Синхронізовуєм годинник (кроки)

Клієнт відправляє подію іншим клієнтам

Подія виконується на всіхклієнтах одночасно (той самий крок, ідентичний порядок)

Кожну ітерацію клієнт посилає Іншим контрольну суму

Подія-дія юзера, код детермінований

Page 13: Максим Гринів “Правильна розробка мультиплеєру”

1500 юнітів

Умови

Однакове виконання коду на всіх клієнтах

Посилаємо лише події згенеровані юзером

Визначаємо максимальний час зворотнього звязку

Синхронізація

Invented by AoE

Page 14: Максим Гринів “Правильна розробка мультиплеєру”

1500 юнітів

Якщо команда запізнилась:

Визначте комфортну для геймплею затримку

Не привязуйтесь до fps

Page 15: Максим Гринів “Правильна розробка мультиплеєру”

1500 юнітів

Коли використовуємо:

Ігри з великою кількістю юнітів (RTS)

Нюанси

Запис ігрової сесії (для дебага та геймплейних юніт тестів(?))

Checksum error хрен віддебагаєш

В розробці мало відрізняється від сінглплеєру (якщо слідувати

правилам)

Правила (Не використовуємо події анімації, синхронізуємо

Random)

Дуже низький трафік

Не хакається - checksum error

Коли не використовуємо:

Ігри зі швидким зворотнім звязком (в умовах високого пінгу)

Page 16: Максим Гринів “Правильна розробка мультиплеєру”

Boid Multiplayer

Page 17: Максим Гринів “Правильна розробка мультиплеєру”

1500 юнітів

Page 18: Максим Гринів “Правильна розробка мультиплеєру”

Додаємо мультиплатформу

Floating point indeterminism

27.241412814841299999

vs.

27.241412814841200001

Intel 80 bit, different architectures, os etc, can be

fixed with compiler

Page 19: Максим Гринів “Правильна розробка мультиплеєру”

Додаємо мультиплатформу

Fixed point math

Використовуйте кросплатформену технологію

Замість float свій тип даних

Низька точність

Низька швидкодія деяких операцій

Неможливо використовувати чужі бібліотеки (пишемо свій Box2D,

path finding, ray casting, структури даних) Sin-lookup table, sqrt – for, числові ряди

Page 20: Максим Гринів “Правильна розробка мультиплеєру”

Поради

Використовуйте reliable UDP

Cloud

Не використовуйте P2P

Використовуйте protocol buffers

Продумуйте мультиплеєрну взаємодію до початку розробки

Неможливо переробити сінгл в мульти

Page 21: Максим Гринів “Правильна розробка мультиплеєру”

Питання

?