E faʻafefea ona matou faʻaleleia le faʻainisinia o faʻatusatusaga ballistic mo se fana feaveaʻi ma se fesoʻotaʻiga latency compensation algorithm

E faʻafefea ona matou faʻaleleia le faʻainisinia o faʻatusatusaga ballistic mo se fana feaveaʻi ma se fesoʻotaʻiga latency compensation algorithm

Talofa, o aʻu o Nikita Brizhak, o se tagata faʻapipiʻi server mai Pixonic. O le asō ou te fia talanoa e uiga i le taui mo le tuai i le telefoni feaveaʻi.

E tele tala na tusia e uiga i taui lag server, e aofia ai le gagana Rusia. E le o se mea e ofo ai, talu ai o lenei tekinolosi ua faʻaaogaina malosi i le fausiaina o le multiplayer FPS talu mai le tuai o 90s. Mo se faʻataʻitaʻiga, e mafai ona e manatua le QuakeWorld mod, o se tasi o muamua na faʻaaogaina.

Matou te faʻaaogaina foʻi i la matou telefoni feaveaʻi fana fana Dino Squad.

I totonu o lenei tusiga, o laʻu sini e le o le toe faia o mea ua uma ona tusia i le afe taimi, ae ia taʻu atu pe faʻafefea ona matou faʻatinoina le lag taui i la matou taʻaloga, ma amanaʻia a matou tekinolosi faʻapipiʻi ma vaega autu o taʻaloga.

O nai upu e uiga i la tatou cortex ma tekinolosi.

O le Dino Squad o se fesoʻotaʻiga telefoni feaveaʻi PvP fana. E pulea e le au taʻalo tainasoa faʻapipiʻiina i auupega eseese ma tau le tasi i le isi i le 6v6 'au.

E fa'avae uma le kalani ma le server ile Unity. O le fausaga e fai si masani mo tagata fanafana: o le server e pule, ma o le tagata o tausia valoʻaga e galue i tagata faʻatau. O le faʻataʻitaʻiga o le taʻaloga o loʻo tusia e faʻaaoga ai le ECS i totonu o le fale ma faʻaaogaina i luga o le server ma le tagata o tausia.

Afai o le taimi muamua lea ua e fa'alogo ai e uiga i taui tuai, o se fa'amatalaga pu'upu'u i le mataupu.

I ta'aloga FPS multiplayer, e masani ona fa'ata'ita'iina le ta'aloga i luga o se 'au'aunaga mamao. E auina atu e le au taʻalo a latou faʻamatalaga (faʻamatalaga e uiga i ki oomi) i le 'auʻaunaga, ma i le tali atu e tuʻuina atu e le 'auʻaunaga ia i latou se tulaga faʻafouina o taʻaloga e amanaʻia ai faʻamaumauga na maua. Faatasi ai ma lenei polokalame fegalegaleaiga, o le tuai i le va o le oomiina o le ki i luma ma le taimi e gaoioi ai le tagata taalo i luga o le lau o le a sili atu nai lo le ping.

A'o i luga o feso'ota'iga fa'apitonu'u, o lenei tuai (e ta'ua o le fa'aoga tu'u) atonu e le iloa, pe a ta'alo i luga o le Initaneti e tupu ai se lagona o le "se'ese'e i luga o le aisa" pe a pulea se tagata. O lenei faʻafitauli e faʻaluaina le talafeagai mo fesoʻotaʻiga feaveaʻi, pe a fai o le ping a le tagata taʻalo e 200 ms o loʻo manatu pea o se fesoʻotaʻiga sili ona lelei. E masani lava o le ping e mafai ona 350, 500, poʻo le 1000 ms. Ona toetoe a le mafai ai ona ta'alo se fana vave ma le tu'u o totonu.

Ole fofo ile fa'afitauli ole va'aiga fa'ata'ita'i ile itu o tagata. O iinei o le tagata o tausia lava ia e faʻaogaina le faʻaoga i le tagata taʻalo, e aunoa ma le faʻatali mo se tali mai le server. Ma pe a maua le tali, e naʻo le faʻatusatusaina o taunuuga ma faʻafouina tulaga o le au teteʻe. O le tuai i le va o le oomiina o se ki ma le faʻaalia o le taunuuga i luga o le lau i lenei tulaga e laʻititi.

E taua le malamalama i le nuance iinei: o le kalani e faʻapipiʻi e ia lava e tusa ai ma ana mea mulimuli, ma fili - faʻatasi ai ma le tuai o fesoʻotaʻiga, e tusa ai ma le setete muamua mai faʻamatalaga mai le server. O lona uiga, pe a fana i se fili, e vaʻai le tagata taʻalo ia te ia i le taimi ua tuanaʻi e uiga ia te ia lava. Fa'amatalaga atili e uiga i valo'aga a le tagata o tausia sa matou tusia muamua.

O le mea lea, e foia ai e le tagata o tausia se faʻafitauli se tasi, ae faʻatupuina le isi: afai e fana e se tagata taʻalo i le mea sa i ai le fili i le taimi ua tuanaʻi, i luga o le server pe a fana i le itu lava e tasi, atonu o le a le toe i ai le fili i lena nofoaga. Server lag taui e taumafai e foia lenei faafitauli. Pe a fana se auupega, e toe faʻafoʻi e le 'auʻaunaga le taʻaloga taʻaloga na vaʻaia e le tagata taʻalo i le lotoifale i le taimi o le fana, ma siaki pe na mafai ona ia lavea le fili. Afai o le tali o le "ioe," o le lavea e faitaulia, e tusa lava pe le o toe i ai le fili i luga o le server i lena taimi.

Faʻaauupegaina i lenei malamalama, na amata ai ona matou faʻatinoina le taui o le server lag i le Dino Squad. Muamua lava, e tatau ona matou malamalama pe faʻafefea ona toe faʻafoʻi i luga o le server mea na vaʻaia e le kalani? Ma o le a tonu lava le mea e tatau ona toe faʻaleleia? I la tatou taʻaloga, o osofaʻiga mai auupega ma tomai e faʻatatauina e ala i ave ma faʻapipiʻi - o lona uiga, e ala i fegalegaleaiga ma le au faʻamalosi tino a le fili. E tusa ai ma lea, matou te manaʻomia le toe faia o le tulaga o nei colliders, lea na "vaʻaia" e le tagata taʻalo i le lotoifale, i luga o le 'auʻaunaga. I lena taimi sa matou faʻaaogaina le Unity version 2018.x. O le physics API o loʻo i ai e tumau, o le lalolagi faaletino o loʻo i ai i se kopi e tasi. E leai se auala e faʻasaoina ai lona tulaga ma toe faʻafoʻi mai le pusa. O le a la le mea e fai?

O le fofo sa i luga; o ona elemene uma ua uma ona matou faʻaaogaina e foia ai isi faʻafitauli:

  1. Mo tagata faʻatau taʻitasi, e tatau ona tatou iloa poʻo le a le taimi na ia vaʻaia ai le au tetee ina ua ia oomiina ki. Ua uma ona matou tusia lenei faʻamatalaga i totonu o le pusa faʻapipiʻi ma faʻaaogaina e faʻafetaui ai le vaʻaiga a le tagata o tausia.
  2. E tatau ona mafai ona tatou teuina le talaʻaga o setete taʻaloga. O totonu o le a tatou umia ai tulaga o tatou fili (ma o latou colliders). Ua uma ona i ai se matou tala faʻasolopito i luga o le 'auʻaunaga, matou te faʻaaogaina e fausia ai deltas. O le iloaina o le taimi saʻo, na faigofie ai ona tatou mauaina le tulaga saʻo i le talafaasolopito.
  3. I le taimi nei ua i ai le taʻaloga taʻaloga mai tala faʻasolopito i lima, e manaʻomia ona mafai ona faʻafetaui faʻamaumauga a tagata taʻalo ma le tulaga o le lalolagi faaletino. Colliders o loʻo i ai nei - gaoioi, o loʻo misi - fatu, mea e le manaʻomia - faʻaumatia. O lenei manatu ua uma ona tusia ma aofia ai le tele o faiga ECS. Sa matou fa'aaogaina e fa'amauina ai ni potu ta'aloga i se tasi faiga Unity. Ma talu ai o le lalolagi faaletino e tasi i le faagasologa, e tatau ona toe faʻaaogaina i le va o potu. Aʻo leʻi oʻo i siaki taʻitasi o le faʻataʻitaʻiga, matou te "toe faʻafouina" le tulaga o le lalolagi faaletino ma toe faʻafouina i faʻamatalaga mo le potu o loʻo i ai nei, taumafai e toe faʻaaogaina mea taʻaloga Unity i le tele e mafai ai e ala i se faiga faʻapipiʻi atamai. Pau lava le mea na totoe o le faʻaogaina lea o le manatu tutusa mo le taʻaloga taʻaloga mai le taimi ua tuanaʻi.

E ala i le tuʻufaʻatasia o nei elemene uma, matou te maua ai se "mesini taimi" e mafai ona toe faʻafoʻi le tulaga o le lalolagi faaletino i le taimi saʻo. O le code na faʻaalia e faigofie:

public class TimeMachine : ITimeMachine
{
     //История игровых состояний
     private readonly IGameStateHistory _history;

     //Текущее игровое состояние на сервере
     private readonly ExecutableSystem[] _systems;

     //Набор систем, расставляющих коллайдеры в физическом мире 
     //по данным из игрового состояния
     private readonly GameState _presentState;

     public TimeMachine(IGameStateHistory history, GameState presentState, ExecutableSystem[] timeInitSystems)
     {
         _history = history; 
         _presentState = presentState;
         _systems = timeInitSystems;  
     }

     public GameState TravelToTime(int tick)
     {
         var pastState = tick == _presentState.Time ? _presentState : _history.Get(tick);
         foreach (var system in _systems)
         {
             system.Execute(pastState);
         }
         return pastState;
     }
}

Pau lava le mea na totoe o le mafaufau pe faʻapefea ona faʻaogaina lenei masini e faigofie ai ona totogi mo ata ma tomai.

I le tulaga sili ona faigofie, pe a faʻavae le inisinia i luga o se tasi hitscan, e foliga mai e manino mea uma: aʻo leʻi fana le tagata taʻalo, e manaʻomia ona ia toe faʻafoʻi le lalolagi faaletino i le tulaga manaʻomia, fai se ave, faitau le lavea pe misi, ma toe faafoi le lalolagi i le tulaga muamua.

Ae e toaitiiti lava ia masini i le Dino Squad! O le tele o auupega i totonu o le taʻaloga e faia ai ni mea faʻapipiʻi - o pulu umi e lele mo le tele o siaki faʻataʻitaʻiga (i nisi tulaga, o le tele o siaki). O le a le mea e fai ia i latou, o le a le taimi e tatau ona latou felelei ai?

В tala anamua e uiga i le faaputuga fesoʻotaʻiga Half-Life, na fesili ai tama mai Valve i le fesili lava lea e tasi, ma o la latou tali o le: o le faʻafitauli o le faʻaogaina o le projectile lag, ma e sili atu le aloese mai ai.

Matou te le'i maua lenei filifiliga: o auupega e fa'avae i luga ole laiga o se vaega taua o le mamanu ta'aloga. O lea na tatau ai ona matou faia se mea. Ina ua uma ni manatu palepalealuga, sa matou faia ni filifiliga se lua e foliga mai e aoga:

1. Matou te nonoa le projectile i le taimi o le tagata taalo na faia. O siaki uma o le faʻataʻitaʻiga a le server, mo pulufana uma a tagata taʻaalo uma, matou te toe faʻafoʻi le lalolagi faaletino i le tulaga o le kalani ma faia faʻatusatusaga talafeagai. O lenei faiga na mafai ai ona maua le tufatufaina o uta i luga o le 'au'aunaga ma va'aiga va'aiga taimi va'alele o projectiles. Sa taua tele mo i matou le va'aiga, talu ai o lo'o i ai uma a matou fa'alavelave, e aofia ai ma'ie a le fili, na valoia i le tagata o tausia.

E faʻafefea ona matou faʻaleleia le faʻainisinia o faʻatusatusaga ballistic mo se fana feaveaʻi ma se fesoʻotaʻiga latency compensation algorithm
I le ata, o le tagata taalo i le siaki 30 na te fanaina se fana i le faʻamoemoe: na te vaʻai i le itu o loʻo tamoe ai le fili ma iloa le saoasaoa o le fana. I totonu o le lotoifale na ia vaaia na ia lavea le sini i le 33th tick. Faʻafetai i le lag taui, o le a faʻaalia foi i luga o le server

2. Matou te faia mea uma lava e tasi e pei ona i ai i le filifiliga muamua, ae, i le faitauina o le tasi siaki o le faʻataʻitaʻiga o pulufana, matou te le tuʻua, ae faʻaauau pea ona faʻataʻitaʻiina lana vaalele i totonu o le siaki server e tasi, i taimi uma e faʻalatalata atu ai lona taimi i le server. tasi ma le tasi siaki ma faʻafouina tulaga collider. Matou te faia lenei mea seia tupu se tasi o mea e lua:

  • Ua uma le pulu. O lona uiga ua mae'a fa'atatau, e mafai ona tatou faitauina se misi po'o se lavea. Ma o le taimi lava lea e tasi na fana ai le fana! Mo i matou, o lenei mea o se faʻaopoopoga ma se faʻaititia. O se faʻaopoopoga - ona o le tagata taʻalo fana na faʻaitiitia ai le tuai i le va o le lavea ma le faʻaitiitia o le soifua maloloina o le fili. O le itu i lalo o le aafiaga lava lea e tasi na matauina pe a fanaina e le au tetee le tagata taalo: o le fili, e foliga mai, na o le fanaina o se roketi lemu, ma ua uma ona faitauina le leaga.
  • Ua o'o le pulufana ile taimi ole server. I lenei tulaga, o lona faʻataʻitaʻiga o le a faʻaauau i le isi server tick e aunoa ma se taui tuai. Mo galuega fa'agesegese, o lenei mea e mafai ona fa'aitiitia ai le numera o fa'asolo i tua o le fisiki pe a fa'atusatusa i le filifiliga muamua. I le taimi lava e tasi, o le uta le tutusa i luga o le faʻataʻitaʻiga na faʻateleina: o le 'auʻaunaga na leai se aoga, pe i totonu o le tasi server tick o loʻo faʻatatauina le sefulu lua faʻataʻitaʻiga siaki mo le tele o pulu.

E faʻafefea ona matou faʻaleleia le faʻainisinia o faʻatusatusaga ballistic mo se fana feaveaʻi ma se fesoʻotaʻiga latency compensation algorithm
O le ata lava e tasi e pei o le ata muamua, ae fuafua e tusa ai ma le polokalame lona lua. O le fana "maua" i le taimi o le server i le taimi lava e tasi na tupu ai le fana, ma o le lavea e mafai ona faitau vave i le isi siaki. I le fa'ailoga lona 31, i le tulaga lea, e le toe fa'aaogaina le taui tuai

I la matou faʻatinoga, o nei auala e lua e eseese i na o ni nai laina faʻailoga, o lea na matou faia uma ai, ma mo se taimi umi na i ai i le tutusa. Faʻalagolago i le masini o le auupega ma le saoasaoa o le pulufana, matou te filifilia se tasi poʻo se isi filifiliga mo tainasoa taʻitasi. O le suiga i inei o le foliga mai i le taaloga o masini e pei o le "afai e te lavea le fili i le tele o taimi i lea ma lea taimi, maua se ponesi faapena." Soʻo se faʻainisinia o loʻo i ai le taimi na taia ai e le tagata taʻalo le fili na faia se sao taua na musu e galue i le auala lona lua. O lea na iu ai ina matou alu i le filifiliga muamua, ma ua faʻaaoga nei i auupega uma ma malosi uma i le taʻaloga.

Tuʻueseese, e taua le faʻatupuina o le mataupu o le faʻatinoga. Afai e te manatu o nei mea uma e faʻagesegese ai mea, ou te tali atu: o lea. E fai si telegese le lotogatasi i le fe'avea'i o feto'ai ma ki ma tape. I le Dino Squad, i se fa'aaliga "sili ona leaga", e mafai ona i ai ni nai fa'ailoga o lo'o iai i le taimi e tasi i le taua. O le fe'avea'i o mea fa'afefete e faitau ta'i ta'ito'atasi o se mea taugata e le mafai ona fa'atauina. O le mea lea, sa matua tatau lava mo i matou ona faʻaitiitia le numera o le fisiki "rollbacks". Ina ia faia lenei mea, na matou fatuina se vaega eseese i le ECS lea matou te faamaumauina ai le taimi o le tagata taalo. Matou te faʻaopoopoina i faʻalapotopotoga uma e manaʻomia le totogi tuai (projectiles, tomai, ma isi). A'o le'i amataina le fa'agaioiina o ia vaega, matou te fa'aputuina i latou i le taimi nei ma fa'a'aga fa'atasi, fa'asolo fa'atasi le lalolagi fa'aletino mo fuifui ta'itasi.

I lenei la'asaga o lo'o i ai a matou faiga masani e galue ai. O lona code i se faiga fa'afaigofie:

public sealed class LagCompensationSystemGroup : ExecutableSystem
{
     //Машина времени
     private readonly ITimeMachine _timeMachine;

     //Набор систем лагкомпенсации
     private readonly LagCompensationSystem[] _systems;
     
     //Наша реализация кластеризатора
     private readonly TimeTravelMap _travelMap = new TimeTravelMap();

    public LagCompensationSystemGroup(ITimeMachine timeMachine, 
        LagCompensationSystem[] lagCompensationSystems)
     {
         _timeMachine = timeMachine;
         _systems = lagCompensationSystems;
     }

     public override void Execute(GameState gs)
     {
         //На вход кластеризатор принимает текущее игровое состояние,
         //а на выход выдает набор «корзин». В каждой корзине лежат энтити,
         //которым для лагкомпенсации нужно одно и то же время из истории.
         var buckets = _travelMap.RefillBuckets(gs);

         for (int bucketIndex = 0; bucketIndex < buckets.Count; bucketIndex++)
         {
             ProcessBucket(gs, buckets[bucketIndex]);
         }

         //В конце лагкомпенсации мы восстанавливаем физический мир 
         //в исходное состояние
         _timeMachine.TravelToTime(gs.Time);
     }

     private void ProcessBucket(GameState presentState, TimeTravelMap.Bucket bucket)
     {
         //Откатываем время один раз для каждой корзины
         var pastState = _timeMachine.TravelToTime(bucket.Time);

         foreach (var system in _systems)
         {
               system.PastState = pastState;
               system.PresentState = presentState;

               foreach (var entity in bucket)
               {
                   system.Execute(entity);
               }
          }
     }
}

Pau lava le mea na totoe o le faʻatulagaina o faʻamatalaga:

1. Malamalama i le tele e fa'atapula'a ai le mamao aupito maualuga o fe'avea'i i le taimi.

Na taua mo i matou le faia o le taʻaloga e mafai ona maua i tulaga o fesoʻotaʻiga feaveaʻi le lelei, o lea na matou faʻatapulaʻaina ai le tala i le pito o le 30 ticks (faʻatasi ai ma le fua faʻatatau o le 20 Hz). O lenei mea e mafai ai e le au taʻalo ona taia fili e oʻo lava i ping maualuga.

2. Iloilo po o fea mea faitino e mafai ona gaoioi i le taimi ae o fea e le mafai.

O i matou, o le mea moni, o loʻo faʻagasolo a matou fili. Ae faʻapipiʻi talipupuni malosi, mo se faʻataʻitaʻiga, e leai. Na matou filifili e sili atu le tuʻuina atu o le faʻamuamua i le malosi puipui, e pei ona masani ona faia i luga o le initaneti fana. Afai ua uma ona tuu e le tagata taalo se talipupuni i le taimi nei, e le tatau ona lele atu i ai ni pulu-taui tuai mai le taimi ua tuanai.

3. Filifili pe tatau ona totogi le gafatia o tainasoa: u, taʻi siʻusiʻu, ma isi. Na matou filifili le mea e manaʻomia ma faʻatautaia e tusa ai ma tulafono tutusa e pei o pulu.

4. Fuafua po'o le a le mea e fai i ta'avale a le tagata ta'alo lea o lo'o faia ai le taui tuai. I se auala lelei, e le tatau ona suia lo latou tulaga i le taimi ua tuanaʻi: e tatau i le tagata taʻalo ona vaʻai ia te ia lava i le taimi lava e tasi o loʻo i ai nei i luga o le 'auʻaunaga. Ae ui i lea, matou te taʻavale foʻi i tua le faʻafefe o le tagata fana, ma e tele mafuaʻaga mo lenei mea.

Muamua, e faʻaleleia le faʻapipiʻiina: e mafai ona tatou faʻaogaina le tulaga faʻaletino tutusa mo tagata taʻaalo uma e latalata pings.

Lona lua, i ave uma ma faʻapipiʻi, matou te faʻateʻaina i taimi uma tagata faʻafefe a le tagata taʻalo e ona tomai poʻo projectiles. I le Dino Squad, e pulea e le au taʻalo tainasoa, o loʻo i ai ni geometry e le masani ai e ala i tulaga fana. E tusa lava pe fana le tagata taalo i se tulimanu e le masani ai ma ui atu le ala o le pulufana i totonu o le tainasoa a le tagata taalo, o le a le amanaiaina e le pulufana.

Lona tolu, matou te faʻatusatusa tulaga o le auupega a le dinosau poʻo le tulaga o le faʻaogaina o le gafatia e faʻaaoga ai faʻamatalaga mai le ECS e oʻo lava i le amataga o le lag taui.

O se taunuuga, o le tulaga moni o le colliders o le lag-compensated player e le taua mo i matou, o lea na matou faia ai se auala sili atu ona aoga ma i le taimi lava e tasi e sili atu ona faigofie.

E le mafai ona na'o le aveesea o le latency network, e na'o le ufiufi. E pei lava o so'o se isi lava auala e fa'afoliga, o le taui o le server lag e iai ona fa'atauga. E fa'aleleia ai le fa'afiafiaga o le ta'aloga a le tagata ta'alo o lo'o fana i le tau o le tagata ta'alo na fanaina. Mo Dino Squad, peitaʻi, o le filifiliga iinei na manino.

O le mea moni, o nei mea uma e tatau foi ona totogi e ala i le faʻateleina o le lavelave o le code server atoa - e le gata mo tagata fai polokalame ma tagata fai taaloga. Afai na muamua atu le faʻataʻitaʻiga o se faʻasologa faʻasolosolo faigofie o faiga, ona faʻatasi ai lea ma le lag taui, faʻapipiʻi faʻamau ma lala na faʻaalia i totonu. Sa matou faʻaaluina foʻi le tele o taumafaiga e faʻafaigofie ai le galulue faatasi.

I le 2019 version (ma atonu o sina taimi muamua atu), ua faʻaopoopoina e le Unity le lagolago atoatoa mo vaaiga tutoʻatasi faaletino. Na matou faʻatinoina i luga o le 'auʻaunaga toetoe lava a maeʻa le faʻafouga, aua na matou mananaʻo e faʻaumatia vave le lalolagi faaletino masani i potu uma.

Na matou tuʻuina atu i potu taʻaloga taʻitasi a latou lava vaaiga faʻaletino ma faʻapea ona faʻaumatia le manaʻoga e "faʻamama" le vaaiga mai faʻamatalaga o le potu tuaoi aʻo leʻi fuafuaina le faʻataʻitaʻiga. Muamua, na maua ai se faʻaopoopoga tele o le gaosiga. Lona lua, na mafai ai ona faʻaumatia se vasega atoa o bugs na tulaʻi mai pe a fai e le tagata fai polokalame se mea sese i le faʻailoga faʻamamaina o le vaaiga pe a faʻaopoopo elemene taʻaloga fou. O ia mea sese sa faigata ona debug, ma e masani ona iu i le tulaga o mea faitino i le vaaiga o le tasi potu "tafe" i se isi potu.

E le gata i lea, na matou faia ni suʻesuʻega pe mafai ona faʻaogaina vaaiga faʻaletino e teu ai le tala faasolopito o le lalolagi faaletino. O lona uiga, tu'utu'uga, tu'ufa'atasia le tasi le vaaiga i potu ta'itasi, ae 30 vaaiga, ma fai se fa'ata'amilosaga fa'ata'amilo mai ai, e teu ai le tala. I se tulaga lautele, o le filifiliga na foliga mai o loʻo galue, ae matou te leʻi faʻatinoina: e leʻi faʻaalia ai se faʻalavelave faʻafuaseʻi i le gaosiga, ae manaʻomia ni suiga lamatia. Sa faigata ona vaʻai pe faʻafefea ona amio le server pe a galue mo se taimi umi ma le tele o vaaiga. O le mea lea, na matou mulimuli ai i le tulafono: "Afai e le malepe, aua le toe faʻaleleia".

puna: www.habr.com

Faaopoopo i ai se faamatalaga