Re ntlafalitse mekhoa ea lipalo tsa ballistic bakeng sa sethunya sa mohala ka algorithm ea puseletso ea netweke.

Re ntlafalitse mekhoa ea lipalo tsa ballistic bakeng sa sethunya sa mohala ka algorithm ea puseletso ea netweke.

Lumela, ke 'na Nikita Brizhak, moqapi oa li-server ho tsoa Pixonic. Kajeno ke rata ho bua ka ho lefella lag in mobile multiplayer.

Lingoliloeng tse ngata li ngotsoe mabapi le matšeliso a lag ea seva, ho kenyeletsoa ka Serussia. Sena ha se makatse, kaha theknoloji ena esale e sebelisoa ka mafolofolo ho theheng FPS ea libapali tse ngata ho tloha bofelong ba lilemo tsa bo-90. Ka mohlala, u ka hopola mokhoa oa QuakeWorld, oo e neng e le o mong oa pele oa ho o sebelisa.

Re boetse re e sebelisa ho Dino squad ea rona ea libapali tse ngata.

Sehloohong sena, sepheo sa ka ha se ho pheta se seng se ngotsoe ka makhetlo a sekete, empa ho bolela hore na re sebelisitse matšeliso a lag joang papaling ea rona, re ela hloko lisebelisoa tsa rona tsa theknoloji le likarolo tsa mantlha tsa papali.

Mantsoe a seng makae ka cortex le theknoloji ea rona.

Dino squad ke sethunya sa marang-rang sa PvP sa marang-rang. Libapali li laola li-dinosaurs tse nang le libetsa tse fapaneng 'me li loana ka lihlopha tse 6v6.

Ka bobeli moreki le seva li thehiloe ho Unity. Mehaho ea meralo ke ea khale haholo bakeng sa lithunya: seva ke bolaoli, 'me ponelopele ea bareki e sebetsa ho bareki. Papali ea papali e ngotsoe ho sebelisoa ECS ea ka tlung 'me e sebelisoa ho seva le moreki.

Haeba ke lekhetlo la pele u utloa ka matšeliso a lag, mona ke leeto le lekhutšoane mabapi le taba ena.

Lipapaling tsa libapali tse ngata tsa FPS, papali hangata e etsisoa ho seva e hole. Libapali li romela tlhahiso ea tsona (litaba tse mabapi le linotlolo tse hatisitsoeng) ho seva, 'me ka karabo seva se ba romella boemo bo ntlafalitsoeng ba papali ho nahanoa ka lintlha tse amoheloang. Ka morero ona oa ho sebelisana, tieho lipakeng tsa ho tobetsa konopo ea pele le nako eo sebapali se tsamaeang skrineng se tla lula se le seholo ho feta ping.

Ha e le marang-rang a lehae tieho ena (e tsebahalang e bitsoang input lag) e kanna ea se bonahale, ha e bapala ka Marang-rang e baka maikutlo a "ho thella leqhoeng" ha o laola sebapali. Bothata bona bo sebetsa habeli bakeng sa marang-rang a mehala, moo nyeoe ha ping ea sebapali e le 200 ms e ntse e nkuoa e le khokahano e ntle haholo. Hangata ping e ka ba 350, 500, kapa 1000 ms. Joale ho batla ho sa khonehe ho bapala sethunya se potlakileng ka lag ea ho kenya.

Tharollo ea bothata bona ke ponelopele ea ketsiso ea bareki. Mona mofani ka boeena o sebelisa ho kenya letsoho ho sebapali sa sebapali, ntle le ho emela karabo ho tswa ho seva. 'Me ha karabo e amoheloa, e mpa e bapisa liphello le ho ntlafatsa maemo a bahanyetsi. Tieho lipakeng tsa ho tobetsa konopo le ho hlahisa sephetho skrineng tabeng ena e nyane.

Ke habohlokoa ho utloisisa nuance mona: mofani o lula a itokolla ho ea ka tlhahiso ea hae ea ho qetela, le lira - ka ho lieha ha marang-rang, ho ea ka boemo bo fetileng ho tloha ho data ho tswa ho seva. Ke hore, ha a thunya sera, sebapali se mo bona nakong e fetileng a amana le eena. Tse ling mabapi le ponelopele ea bareki re ngotse pejana.

Ka hona, ho bolela esale pele ha bareki ho rarolla bothata bo le bong, empa ho theha e 'ngoe: haeba sebapali se thunya sebakeng seo sera se neng se le teng nakong e fetileng, ho seva ha se thunya sebakeng se le seng, sera se ka' na sa se ke sa hlola se e-ba teng. Matšeliso a morao-rao a seva a leka ho rarolla bothata bona. Ha sebetsa se thunngoa, seva se khutlisetsa boemo ba papali eo sebapali se se boneng sebakeng sa heno nakong ea ho thunngoa, 'me se hlahloba hore na a ka be a otlile sera. Haeba karabo ke "e," ho otla ho baloa, le haeba sera se se se le seva ka nako eo.

Re hlometse ka tsebo ena, re ile ra qala ho kenya ts'ebetsong matšeliso a seva ho Dino Squad. Pele ho tsohle, re ne re tlameha ho utloisisa mokhoa oa ho khutlisa ho seva seo moreki a se boneng? Hona ke eng e hlileng e hlokang ho tsosolosoa? Papaling ea rona, likotlo tse tsoang ho libetsa le bokhoni li baloa ka mahlaseli le li-overlays - ke hore, ka ho sebelisana le lihlomo tsa 'mele tsa sera. Ka hona, re ne re hloka ho hlahisa boemo ba li-colliders tsena, tseo sebapali se li "boneng" sebakeng sa heno, ho seva. Ka nako eo re ne re sebelisa mofuta oa Unity 2018.x. API ea fisiks moo e tsitsitse, lefatše la 'mele le teng ka kopi e le' ngoe. Ha ho na mokhoa oa ho boloka boemo ba eona ebe o e khutlisa ho tloha lebokoseng. Joale ho etsoa'ng?

Tharollo e ne e le holimo; likarolo tsohle tsa eona li ne li se li sebelisitsoe ke rona ho rarolla mathata a mang:

  1. Bakeng sa moreki e mong le e mong, re hloka ho tseba hore na o bone bahanyetsi ka nako efe ha a tobetsa linotlolo. Re se re ngotse tlhahisoleseling ena ka har'a sephutheloana sa ho kenya 'me re se sebelisetse ho lokisa polelo ea moreki.
  2. Re hloka ho khona ho boloka nalane ea linaha tsa lipapali. Ke ho eona moo re tla ts'oara maemo a bahanyetsi ba rona (ka hona ba thulanang le bona). Re se re ntse re e-na le nalane ea mmuso ho seva, re e sebelisitse ho aha deltas. Ka ho tseba nako e nepahetseng, re ka fumana boemo bo nepahetseng habonolo historing.
  3. Kaha joale re na le boemo ba papali ho tloha nalaneng ka letsohong, re hloka ho khona ho hokahanya data ea libapali le boemo ba lefatše la 'mele. Li-collider tse teng - sisinyeha, tse sieo - theha, tse sa hlokahaleng - senya. Monahano ona o ne o boetse o ngotsoe mme o ne o e-na le mekhoa e mengata ea ECS. Re e sebelisitse ho tšoara likamore tse 'maloa tsa papali ka mokhoa o le mong oa Unity. 'Me kaha lefatše la nama ke ntho e le' ngoe ka mokhoa o le mong, le ne le tlameha ho sebelisoa hape lipakeng tsa likamore. Pele ho ts'epa e 'ngoe le e 'ngoe ea papiso, re "seta bocha" boemo ba lefatše la 'mele mme ra e nchafatsa ka lintlha tsa kamore ea hajoale, re leka ho sebelisa lintho tsa papali ea Unity ka hohle kamoo ho ka khonehang ka sistimi e bohlale ea ho kopanya. Sohle se neng se setse e ne e le ho kopa mohopolo o tšoanang bakeng sa boemo ba papali ho tloha nakong e fetileng.

Ka ho kopanya likarolo tsena kaofela, re fumane "mochine oa nako" o ka khutlisetsang boemo ba lefatše la 'mele ka nako e nepahetseng. Khoutu e ile ea bonahala e le bonolo:

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;
     }
}

Seo se neng se setse e ne e le ho fumana mokhoa oa ho sebelisa mochine ona ho lefella lithunya le bokhoni habonolo.

Boemong bo bonolo, ha mechini e ipapisitse le hitscan e le 'ngoe, ntho e ngoe le e ngoe e bonahala e hlakile: pele sebapali se thunya, se hloka ho khutlisetsa lefatše la 'mele sebakeng seo le se batlang, ho etsa raycast, ho bala ho otla kapa ho fosa, le khutlisetsa lefatše boemong ba pele.

Empa ho na le mechini e fokolang haholo ho Dino squad! Boholo ba libetsa papaling li etsa li-projectiles - likulo tsa nako e telele tse fofang bakeng sa liboseleise tse 'maloa (maemong a mang, liboseleise tse ngata). Seo u lokelang ho se etsa ka tsona, li lokela ho fofa ka nako mang?

В sehlooho sa khale ka Half-Life network stack, bashanyana ba tsoang Valve ba ile ba botsa potso e tšoanang, 'me karabo ea bona e ne e le ena: puseletso ea projectile lag e na le mathata,' me ho molemo ho e qoba.

Re ne re sena khetho ena: libetsa tse thehiloeng ho projectile e ne e le karolo ea bohlokoa ea moralo oa papali. Kahoo re ile ra tlameha ho tla le ho hong. Ka mor'a ho buisana ka maikutlo, re thehile likhetho tse peli tse neng li bonahala li sebetsa:

1. Re tlama projectile ho nako ea sebapali se e entseng. Letšoao le leng le le leng la papiso ea seva, bakeng sa kulo e 'ngoe le e' ngoe ea sebapali se seng le se seng, re khutlisetsa lefatše la 'mele ho boemo ba bareki le ho etsa lipalo tse hlokahalang. Mokhoa ona o ile oa etsa hore ho khonehe ho ba le mojaro o abuoang ho seva le nako e boletsoeng esale pele ea sefofane sa projectiles. Ho bolela esale pele ho ne ho le bohlokoa haholo ho rona, kaha re na le li-projectiles tsohle, ho kenyelletsa le li-projectile tsa sera, tse boletsoeng esale pele ho moreki.

Re ntlafalitse mekhoa ea lipalo tsa ballistic bakeng sa sethunya sa mohala ka algorithm ea puseletso ea netweke.
Setšoantšong, sebapali sa tick 30 se thunya misaele ka tebello: se bona hore na sera se mathela kae mme se tseba lebelo le lekantsoeng la misaele. Sebakeng seo o bona hore o otla sepheo sa 33rd tick. Ka lebaka la puseletso ea lag, e tla hlaha hape ho seva

2. Re etsa ntho e 'ngoe le e' ngoe e tšoanang le ea khetho ea pele, empa, ha re balile letšoao le le leng la papiso ea bullet, ha re emise, empa re tsoela pele ho etsisa sefofane sa eona ka har'a tick e tšoanang ea seva, nako le nako e tlisa nako ea eona haufi le seva. letshwao ka bonngoe le ho nchafatsa maemo a ho thulana. Re etsa sena ho fihlela e 'ngoe ea lintho tse peli e etsahala:

  • Lerumo le feletsoe ke nako. Sena se bolela hore lipalo li felile, re ka bala ho fosa kapa ho otla. 'Me sena ke ka eona tick eo ho thunngoeng ho eona! Ho rona sena e ne e le ho kopanya le ho tlosa. A plus - hobane bakeng sa sebapali sa ho thunya sena se fokolitse haholo tieho lipakeng tsa ho otla le ho fokotseha ha bophelo ba sera. Ntho e nyahamisang ke hore phello e tšoanang e ile ea hlokomeloa ha bahanyetsi ba thunya sebapali: sera, ho ne ho tla bonahala eka se thunya rocket e liehang feela, 'me tšenyo e ne e se e baloa.
  • Bullet e fihlile nako ea seva. Tabeng ena, ketsiso ea eona e tla tsoela pele ho seva se latelang sa tick ntle le puseletso ea lag. Bakeng sa li-projectiles tse liehang, sena se ka fokotsa palo ea li-rollback tsa fisiks ha li bapisoa le khetho ea pele. Ka nako e ts'oanang, mojaro o sa lekaneng oa papiso o ile oa eketseha: seva se ne se sa sebetse, kapa ho sebatli se le seng sa seva se ne se bala liboseleise tse XNUMX bakeng sa likulo tse 'maloa.

Re ntlafalitse mekhoa ea lipalo tsa ballistic bakeng sa sethunya sa mohala ka algorithm ea puseletso ea netweke.
Boemo bo ts'oanang le setšoantšong se fetileng, empa bo baloa ho latela morero oa bobeli. Seqhomane se ile sa "tšoara" ka nako ea seva ka nako e le 'ngoe eo ho thunngoeng ka eona,' me ho otla ho ka baloa pele ho letšoao le latelang. Ho letšoao la 31, tabeng ena, matšeliso a lag ha a sa sebelisoa

Ts'ebetsong ea rona, mekhoa ena e 'meli e ne e fapane ka mela e' maloa ea khoutu, kahoo re ile ra theha ka bobeli, 'me ka nako e telele li ne li le teng ka ho tšoana. Ho ipapisitsoe le boqapi ba sebetsa le lebelo la kulo, re khethile khetho e le 'ngoe kapa e' ngoe bakeng sa dinosaur ka 'ngoe. Phetoho mona e bile ponahalo ea papali ea mechini e kang "haeba u otla sera hangata ka nako e joalo, fumana bonase e joalo." Mak'henike ofe kapa ofe moo nako eo sebapali se otlang sera se neng se phetha karolo ea bohlokoa se ileng sa hana ho sebetsa ka mokhoa oa bobeli. Kahoo re ile ra qetella re tsamaea le khetho ea pele, 'me hona joale e sebetsa ho libetsa tsohle le bokhoni bohle bo sebetsang papaling.

Ka thoko, ho loketse ho phahamisa taba ea ts'ebetso. Haeba u ne u nahana hore sena sohle se tla liehisa lintho, ke araba: ho joalo. Unity e lieha haholo ho tsamaisa likhohlano le ho li bulela le ho li tima. Sehlopheng sa Dino, maemong a "mpe ka ho fetesisa", ho ka ba le li-projectiles tse makholo a 'maloa tse teng ka nako e le ngoe ntoeng. Ho tsamaisa li-collider ho bala projectile e 'ngoe le e' ngoe ka bonngoe ke mabothobotho a sa khoneheng. Ka hona, ho ne ho hlokahala hore re fokotse palo ea "rollbacks" ea fisiks. Ho etsa sena, re thehile karolo e arohaneng ho ECS eo ho eona re tlalehang nako ea sebapali. Re e kentse mekhatlong eohle e hlokang matšeliso a lag (projectiles, bokhoni, joalo-joalo). Pele re qala ho sebetsana le mekhatlo e joalo, re e kopanya ka nako ena ebe re e sebetsa hammoho, re khutlisetsa lefatše la sebele hang bakeng sa sehlopha ka seng.

Mothating ona re na le sistimi e sebetsang ka kakaretso. Khoutu ea eona ka mokhoa o batlang o nolofalitsoe:

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);
               }
          }
     }
}

Sohle se neng se setse e ne e le ho hlophisa lintlha:

1. Utloisisa hore na ke bokae ho fokotsa sebaka se seholo sa ho tsamaea ka nako.

Ho ne ho le bohlokoa ho rona ho etsa hore papali e fumanehe ka hohle kamoo ho ka khonehang maemong a marang-rang a futsanehileng a thekeng, kahoo re ile ra fokotsa pale ka moeli oa liboseleise tse 30 (ka sekhahla sa 20 Hz). Sena se lumella libapali ho otla bahanyetsi esita le li-pings tse phahameng haholo.

2. Etsa qeto ea hore na ke lintho life tse ka tsamaisoang ka nako le tse ke keng tsa tsamaisoa.

Ha e le hantle, re tsamaisa bahanyetsi ba rona. Empa lithebe tsa matla tse ka kenngoa, mohlala, ha li joalo. Re ile ra etsa qeto ea hore ho molemo ho etelletsa pele bokhoni ba ho itšireletsa, joalo ka ha ho etsoa hangata ho batho ba thunyang marang-rang. Haeba sebapali se se se behile thebe nakong ea hona joale, likulo tse lefshoang ho tloha nakong e fetileng ha lia lokela ho fofa ho eona.

3. Etsa qeto ea hore na hoa hlokahala ho lefella bokhoni ba li-dinosaur: ho loma, ho otla ka mohatla, joalo-joalo. Re ile ra etsa qeto ea hore na ho hlokahala eng le ho li sebetsa ho latela melao e tšoanang le likulo.

4. Etsa qeto ea seo u lokelang ho se etsa ka li-collider tsa sebapali seo ho etsoang puseletso ea lag bakeng sa sona. Ka mokhoa o motle, boemo ba bona ha boa lokela ho fetela nakong e fetileng: sebapali se lokela ho iponahatsa ka nako e le 'ngoe eo a leng ho eona hona joale ho seva. Leha ho le joalo, re boetse re khutlisa li-colliders tsa sebapali sa ho thunya, 'me ho na le mabaka a' maloa a sena.

Ntlha ea pele, e ntlafatsa ho kopanya: re ka sebelisa boemo bo tšoanang ba 'mele bakeng sa libapali tsohle tse nang le li-pings tse haufi.

Taba ea bobeli, ho li-raycasts tsohle le ho fetellana re lula re qhelela ka thoko libapali tsa sebapali se nang le bokhoni kapa li-projectiles. Ho Dino squad, libapali li laola li-dinosaurs, tse nang le geometry e seng ea maemo ho latela litekanyetso tsa sethunya. Esita le haeba sebapali se thunya ka tsela e sa tloaelehang 'me tselana ea kulo e feta har'a khohlano ea dinosaur ea sebapali, kulo e tla e hlokomoloha.

Taba ea boraro, re bala maemo a sebetsa sa dinosaur kapa ntlha ea ts'ebeliso ea bokhoni ba ho sebelisa data ho tsoa ho ECS le pele ho qala puseletso ea lag.

Ka lebaka leo, boemo ba sebele ba li-colliders tsa sebapali sa lag-compensated ha bo bohlokoa ho rona, kahoo re ile ra nka tsela e atlehang le e bonolo ka nako e ts'oanang.

Network latency e ke ke ea tlosoa feela, e ka koaheloa feela. Joalo ka mokhoa o fe kapa o fe oa ho ipata, puseletso ea lag ea seva e na le tradeoffs ea eona. E ntlafatsa boiphihlelo ba papali ea sebapali se thunyang ka litšenyehelo tsa sebapali se thunngoeng. Bakeng sa Sehlopha sa Dino, leha ho le joalo, khetho mona e ne e hlakile.

Ehlile, sena sohle le sona se ne se tlameha ho lefelloa ke ho rarahana ho eketsehileng ha khoutu ea seva ka kakaretso - bakeng sa baetsi ba mananeo le baqapi ba lipapali. Haeba pejana papiso e ne e le pitso e bonolo ea tatellano ea litsamaiso, joale ka matšeliso a lag, li-loops le makala li ile tsa hlaha ho eona. Hape re ile ra etsa boiteko bo bongata ho etsa hore ho be bonolo ho sebetsa le bona.

Phetolelong ea 2019 (mme mohlomong pejana), Unity e kentse tšehetso e felletseng bakeng sa lipono tse ikemetseng tsa 'mele. Re li kentse ts'ebetsong ho seva hang hang ka mor'a ntlafatso, hobane re ne re batla ho tlosa ka potlako lefatše la 'mele le tloaelehileng likamoreng tsohle.

Re file kamore e 'ngoe le e 'ngoe ea papali sebaka sa eona sa 'mele, kahoo ra felisa tlhoko ea ho "hlakola" ketsahalo ho data ea kamore ea boahelani pele re bala papiso. Taba ea pele, e fane ka keketseho e kholo ea tlhahiso. Taba ea bobeli, e entse hore ho khonehe ho tlosa sehlopha sohle sa likokoana-hloko tse ileng tsa hlaha haeba moetsi oa lenaneo a entse phoso khoutu ea ho hloekisa sebaka ha a eketsa likarolo tse ncha tsa papali. Liphoso tse joalo li ne li le thata ho li lokisa, 'me hangata li ne li baka boemo ba lintho tse bonahalang sebakeng sa kamore e le' ngoe "ho phalla" ka kamoreng e 'ngoe.

Ho feta moo, re ile ra etsa lipatlisiso mabapi le hore na litšoantšo tsa 'mele li ka sebelisoa ho boloka histori ea lefatše la sebele. Ka mantsoe a mang, u se ke ua fana ka setšoantšo se le seng kamoreng e 'ngoe le e' ngoe, empa liketsahalo tse 30, 'me u etse sekheo sa cyclic ho tsona, moo ho boloka pale. Ka kakaretso, khetho e ile ea sebetsa, empa ha ea ka ea e sebelisa: ha ea ka ea bontša keketseho ea bohlanya ea tlhahiso, empa e hloka liphetoho tse kotsi. Ho ne ho le thata ho bolela esale pele hore na seva se tla itšoara joang ha se sebetsa nako e telele ka litšoantšo tse ngata. Ka hona, re ile ra latela molao ona: “Haeba e sa robeha, se ke oa e lokisa".

Source: www.habr.com

Eketsa ka tlhaloso