SlideShare ist ein Scribd-Unternehmen logo
1 von 36
REALTIME MULTIPLAYER WITH PHYSICS
AND
LOTS OF TANGO FOXTROT
CONTROLS
INCEPTION
А давайте сделаем игру про машинки?
INCEPTION
А давайте с мультиплеером?
А давайте в realtime?
А давайте с физикой?
А машинки же с людьми как в GTA?
А давайте чтобы на айфончике?
CHALLENGE ACCEPTED
gafferongames.com
Наверное, лучший сайт, чтобы понять, как
работает сетевой код в реалтайм игре.
SNAPSHOTS AND INTERPOLATION
Сервер шлет клиенту состояние игрового мира
Клиент шлет серверу пользовательский ввод
SNAPSHOTS AND INTERPOLATION
youtube: Battle(non)sense
SNAPSHOTS
gafferongames.com
PAST PRESENT FUTURE
ClientTime = ServerTime – 100ms;
position = Vector3.Lerp(prevPosition, nextPosition, t);
INTERPOLATION
gafferongames.com
FORGIVE FORGET
TCP не подходит
для REALTIME игр.
FORGIVE FORGET
Если данные потерялись - это не
страшно. Придут новые.
UNET
UNET
BINARY PROTOCOL
JSON, XML, BSON, protobuf etc.
Nope.
BINARY PROTOCOL
Vector3: 32 * 3 = 96 бит
BINARY PROTOCOL
Применим знание о размере мира:
от (-100f, -100f, -100f) до (100f, 100f, 100f)
Vector3: (8 + 6) * 3 = 42 бита
Экономия ~56%
LA LA LAG
PING = 100ms
160ms <= LATENCY <= 220ms
PING = 150ms
210ms <= LATENCY <= 270ms
PREDICTION
HIDING LAG
HIDING LAG
INDIRECT CONTROLS
Непрямое управление = хорошо
Прямое управление без мгновенного отклика = плохо
UNITY AS SERVER
Игровой сервер -- “обычный” билд игры
NETWORK IDENTITY
Каждый объект, который
синхронизирует какие-либо
данные имеет уникальный
идентификатор.
AbstractSyncComponent
На стороне сервера на каждом тике определяет нужно ли слать
данные о себе на клиент.
На стороне клиента на каждом кадре интерполирует между
полученными данными.
SyncTransformComponent
Расходует 80% трафика
SyncAnimatorComponent
Мы синхронизируем все значимые
параметра у аниматора
TRIGGERS
Используются в аниматоре, при
стрельбе из оружия и при взрывах
TRIGGERS
TRIGGERS
System.Random(currentTime + networkIdentity.objectId)
REPLICATION
Спавн объектов происходит только при старте игры
BAD DESICIONS
Нужно синхронизировать весь
мир целиком, а не объекты по
отдельности
QUESTIONS?
bit.ly/DevGAMMTacticool
USEFUL LINKS
http://gafferongames.com/
https://youtu.be/vTH2ZPgYujQ
https://www.youtube.com/watch?v=mQ2KTRn4BMI&t=2911s
https://youtu.be/j4YAY36xjwE
https://developer.valvesoftware.com/wiki/Source_Multiplayer_Netwo
rking
https://youtu.be/ayF8e8q_aA8
USEFUL LINKS
https://youtu.be/p72GaGq-B_0
http://www.gdcvault.com/play/1014345/I-Shot-You-First-Networking
http://www.gdcvault.com/play/1022195/Physics-for-Game-
Programmers-Networking
https://www.youtube.com/channel/UCP7QY6L5pvmm0-stL-pNFrw
http://mrelusive.com/publications/papers/The-DOOM-III-Network-
Architecture.pdf
http://ithare.com/

Weitere ähnliche Inhalte

Mehr von DevGAMM Conference

Mehr von DevGAMM Conference (20)

Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
 
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
 
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
 
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
 
How to increase wishlists & game sales from China? Growth marketing tactics &...
How to increase wishlists & game sales from China? Growth marketing tactics &...How to increase wishlists & game sales from China? Growth marketing tactics &...
How to increase wishlists & game sales from China? Growth marketing tactics &...
 
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
 
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
 
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
 
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
 
Branded Content: How to overcome players' immunity to advertising / Alex Brod...
Branded Content: How to overcome players' immunity to advertising / Alex Brod...Branded Content: How to overcome players' immunity to advertising / Alex Brod...
Branded Content: How to overcome players' immunity to advertising / Alex Brod...
 
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
 
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
 
Launching a title in Asia Pacific and China / Maxim Chuvalov (Wargaming)
Launching a title in Asia Pacific and China / Maxim Chuvalov (Wargaming)Launching a title in Asia Pacific and China / Maxim Chuvalov (Wargaming)
Launching a title in Asia Pacific and China / Maxim Chuvalov (Wargaming)
 
5 things I wish I knew before becoming a VFX Artist / Paulina Grigonis (Tuatara)
5 things I wish I knew before becoming a VFX Artist / Paulina Grigonis (Tuatara)5 things I wish I knew before becoming a VFX Artist / Paulina Grigonis (Tuatara)
5 things I wish I knew before becoming a VFX Artist / Paulina Grigonis (Tuatara)
 
Pitching with Killer Demos / Jaroslav Stacevič (Nordcurrent)
Pitching with Killer Demos / Jaroslav Stacevič (Nordcurrent)Pitching with Killer Demos / Jaroslav Stacevič (Nordcurrent)
Pitching with Killer Demos / Jaroslav Stacevič (Nordcurrent)
 
How to Craft the Perfect Pitch / Nathan Sölbrandt ( Xsolla)
How to Craft the Perfect Pitch / Nathan Sölbrandt ( Xsolla)How to Craft the Perfect Pitch / Nathan Sölbrandt ( Xsolla)
How to Craft the Perfect Pitch / Nathan Sölbrandt ( Xsolla)
 
Making Games We Like aka Personal Biases in Game Design / Rok Mioč (Outfit7)
Making Games We Like aka Personal Biases in Game Design / Rok Mioč (Outfit7)Making Games We Like aka Personal Biases in Game Design / Rok Mioč (Outfit7)
Making Games We Like aka Personal Biases in Game Design / Rok Mioč (Outfit7)
 
How to game the Xbox system / Neil Holmes (Xbox)
How to game the Xbox system / Neil Holmes (Xbox)How to game the Xbox system / Neil Holmes (Xbox)
How to game the Xbox system / Neil Holmes (Xbox)
 
AI-Enhanced Game Development: Unleashing Creativity and Empowering Leaders / ...
AI-Enhanced Game Development: Unleashing Creativity and Empowering Leaders / ...AI-Enhanced Game Development: Unleashing Creativity and Empowering Leaders / ...
AI-Enhanced Game Development: Unleashing Creativity and Empowering Leaders / ...
 
AI for Art Generation / Dave Savio (Artifactory.ai)
AI for Art Generation / Dave Savio (Artifactory.ai)AI for Art Generation / Dave Savio (Artifactory.ai)
AI for Art Generation / Dave Savio (Artifactory.ai)
 

Tacticool: Realtime multiplayer with physics

Hinweis der Redaktion

  1. Всем привет! Меня зовут Дмитрий и я работаю в кампании Panzerdog над игрой Tacticool. Сегодня я попробую рассказать о том как мы делали мультиплеер в нашей игре. Если коротко, то Тактикул – это мобильный шутер с короткими матчами 5 на 5. Думаю после просмотра видео станет более понятно, что из себя представляет игра.
  2. На мой взгляд от управление в игре очень сильно влияет на то как вы будете писать сетевой код. В нашей игре персонаж всегда бежит вперед. Как в раннере. Экран разделен на две части: игрок нажимает на левую часть экрана – персонаж начинает поворачивать влево, на правую – вправо. Все просто. Также в правом нижнем углу есть одна кнопка – применить абилку. Абилкой может быть бросок гранаты или выстрел из рпг, например.
  3. Все началось с этой фразы.
  4. После пары-тройки отстойных прототипов стало понятно, что мы хотим сделать игру с синхронным мультиплеером и не пошаговую. Да, мы пробовали сделать управление машиной пошаговым. Позже конечно же концепция «игры про машинки» эволюционировала. Игрок больше не управлял машиной, теперь игрок управляет персонажем и сам решает хочет ли он садиться в машину или нет.
  5. Я не могу не упомянуть этот блог. Он помог мне разобраться с чего же начать писать сетевой код и прояснил очень много вопросов.
  6. В нашей игре максимально глупый клиент. Можно сказать, что клиент это просто плеер, который проигрывает данные полученные от сервера и шлет на сервер пользовательский ввод. Сервер же в свою очередь занимается обработкой пользовательского ввода и симуляцией игрового мира.
  7. В нашей игре мы выбрали частоту отправки данных 30 раз в секунду. Т.е клиент отправляет на сервер инпуты 30 раз в секунду и получает от сервера состояние игрового мира с частотой 30 раз в секунду.
  8. Рассмотрим на кубиках как будет работать клиент. Самая наивная реализация это применять самый свежий снэпшот. С левой стороны показано как выглядит мир на сервере, справа на клиенте.
  9. Пусть клиент всегда находится в прошлом относительно сервера. Например на 100мс
  10. Вместо того чтобы применять снэпшот как только он пришел будем сохранять его в буффер. И когда нам нужно будет обновить игровой мир в нашем буфере можно будет найти два снэпшота между которыми можно интерполировать данныем.
  11. TCP гарантирует, что данные будут доставлены и в том порядке в котором были отправлены. Грубо говоря TCP представляет из себя поток данных в который можно писать и из которого можно читать. На низком уровне при отправке данных TCP разбивает их на пакеты и шлет нужному адресату. Проблемы возникают в тот момент когда какой-нибудь пакет теряется. Возникает большая пауза пока TCP не поймет, что пакет потерялся, перепошлет его и так далее. Во время этой паузы невозможно получить новые данные до тех пор пока TCP не удостовериться что потерянный пакет пришел. Это может занять секунды.
  12. UDP наш выбор.
  13. Примерно в тот момент, когда мы начали делать игру Unity выпустила UNET. Это библиотека которая упрощает синхронизацию данных.
  14. Обычно ее разбивают на два слоя – низкий уровень и высокий. Низкий уровень умеет держать соединение между двумя устройствами и обмениваться данными между ними с помощью UDP. Также стоит отметить, что в UNET реализован Reliable UDP. На высшем же уровне доступны такие концпции как синхронизация Transforma или отдельных переменных, вызов функций с сервера и т.д. В тактикуле мы используем только возможности низшего уровня, чтобы иметь как можно больше контроля над происходящим.
  15. Посчитаем время, которое проходит между применением игроком какого-либо действия и отображением результата на это действие.
  16. В шутерах используется такой способ как предсказания. Клиент мнгновенно обрабатывает действия игрока, а сервер потом корректирует состояние игрового мира. Почему не получается делать предсазания в нашей игре. Проблема предсказаний в том что клиент не может предсказать как поведут себя другие игроки.