Ny fomba nanatsaranay ny mekanika amin'ny kajy ballistic ho an'ny mpitifitra finday miaraka amin'ny algorithm fanonerana fahatarana amin'ny tambajotra

Ny fomba nanatsaranay ny mekanika amin'ny kajy ballistic ho an'ny mpitifitra finday miaraka amin'ny algorithm fanonerana fahatarana amin'ny tambajotra

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, я Никита Π‘Ρ€ΠΈΠΆΠ°ΠΊ, сСрвСрный Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΠ· Pixonic. БСгодня я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ компСнсации Π»Π°Π³ΠΎΠ² Π² мобильном ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅Π΅Ρ€Π΅.

ΠŸΡ€ΠΎ ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ Π»Π°Π³ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠ°Ρ†ΠΈΡŽ написано ΠΌΠ½ΠΎΠ³ΠΎ статСй, Π² Ρ‚ΠΎΠΌ числС Π½Π° русском языкС. Π’ этом Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ, вСдь эта тСхнология Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ создании ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… FPS Π΅Ρ‰Π΅ с ΠΊΠΎΠ½Ρ†Π° 90-Ρ‹Ρ…. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ QuakeWorld, ΠΏΡ€ΠΈΠ±Π΅Π³Π½ΡƒΠ²ΡˆΠΈΠΉ ΠΊ Π½Π΅ΠΉ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ….

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Π΅ ΠΈ ΠΌΡ‹ Π² своСм мобильном ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅Π΅Ρ€Π½ΠΎΠΌ ΡˆΡƒΡ‚Π΅Ρ€Π΅ Dino Squad.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ моя Ρ†Π΅Π»ΡŒ ― Π½Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ написано ΡƒΠΆΠ΅ тысячу Ρ€Π°Π·, Π½ΠΎ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΌΡ‹ внСдряли Π»Π°Π³ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠ°Ρ†ΠΈΡŽ Π² Π½Π°ΡˆΡƒ ΠΈΠ³Ρ€Ρƒ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ нашСго тСхнологичСского стэка ΠΈ особСнностСй ΠΊΠΎΡ€-гСймплСя.

Π’ ΠΏΠ°Ρ€Π΅ слов ΠΎ нашСм ΠΊΠΎΡ€Π΅ ΠΈ тСхнологиях.

Dino Squad ― сСтСвой ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ PvP-ΡˆΡƒΡ‚Π΅Ρ€. Π˜Π³Ρ€ΠΎΠΊΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ Π΄ΠΈΠ½ΠΎΠ·Π°Π²Ρ€Π°ΠΌΠΈ, ΠΎΠ±Π²Π΅ΡˆΠ°Π½Π½Ρ‹ΠΌΠΈ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΌ Π²ΠΎΠΎΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΈ ΡΡ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ 6 Π½Π° 6.

И ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΈ сСрвСр Ρƒ нас Π½Π° Unity. АрхитСктура довольно классичСская для ΡˆΡƒΡ‚Π΅Ρ€ΠΎΠ²: сСрвСр ― Π°Π²Ρ‚ΠΎΡ€ΠΈΡ‚Π°Ρ€Π½Ρ‹ΠΉ, Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°Ρ… Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ клиСнтскоС прСдсказаниС. Π˜Π³Ρ€ΠΎΠ²Π°Ρ симуляция написана с использованиСм in-house ECS ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Π½Π° сСрвСрС, Ρ‚Π°ΠΊ ΠΈ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅.

Если Π²Ρ‹ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΡƒΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ ΠΏΡ€ΠΎ Π»Π°Π³ΠΎΠΊΠΎΠΌΠΏΠ΅Π½ΡΠ°Ρ†ΠΈΡŽ, Π²ΠΎΡ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ экскурс Π² ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΠΊΡƒ.

Π’ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… FPS-ΠΈΠ³Ρ€Π°Ρ… ΠΌΠ°Ρ‚Ρ‡, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, симулируСтся Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ сСрвСрС. Π˜Π³Ρ€ΠΎΠΊΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ Π½Π° сСрвСр свой ΠΈΠ½ΠΏΡƒΡ‚ (ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π°ΠΆΠ°Ρ‚Ρ‹Ρ… ΠΊΠ»Π°Π²ΠΈΡˆΠ°Ρ…), Π° Π² ΠΎΡ‚Π²Π΅Ρ‚ сСрвСр присылаСт ΠΈΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ состояниС ΠΈΠ³Ρ€Ρ‹ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΉ схСмС взаимодСйствия Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ Π½Π° ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Β«Π²ΠΏΠ΅Ρ€Π΅Π΄Β» ΠΈ Ρ‚Π΅ΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° пСрсонаТ ΠΈΠ³Ρ€ΠΎΠΊΠ° Π½Π° экранС сдвинСтся с мСста, всСгда Π±ΡƒΠ΄Π΅Ρ‚ большС ΠΏΠΈΠ½Π³Π°.

Если Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… сСтях эта Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° (Π² Π½Π°Ρ€ΠΎΠ΄Π΅ имСнуСмая input lag) ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½Π°, Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΠ³Ρ€Π΅ Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΎΠ½Π° создаСт ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠ΅ «скольТСния ΠΏΠΎ Π»ΡŒΠ΄ΡƒΒ» ΠΏΡ€ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ пСрсонаТСм. Π­Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²Π΄Π²ΠΎΠΉΠ½Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π° для ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… сСтСй, Π³Π΄Π΅ случай, ΠΊΠΎΠ³Π΄Π° Ρƒ ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΏΠΈΠ½Π³ составляСт 200 мс, считаСтся Π΅Ρ‰Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ соСдинСниСм. Часто ΠΏΠΈΠ½Π³ Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΈ 350, ΠΈ 500, ΠΈ 1000 мс. Π’ΠΎΠ³Π΄Π° ΡƒΠΆΠ΅ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ с ΠΈΠ½ΠΏΡƒΡ‚ Π»Π°Π³ΠΎΠΌ Π² быстрый ΡˆΡƒΡ‚Π΅Ρ€ становится практичСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

РСшСниСм этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ становится прСдсказаниС симуляции Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π—Π΄Π΅ΡΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сам примСняСт ΠΈΠ½ΠΏΡƒΡ‚ ΠΊ пСрсонаТу ΠΈΠ³Ρ€ΠΎΠΊΠ°, Π½Π΅ доТидаясь ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΎΡ‚ сСрвСра. А ΠΊΠΎΠ³Π΄Π° ΠΎΡ‚Π²Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½, просто свСряСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΈ обновляСт ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ². Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ Π½Π° ΠΊΠ»Π°Π²ΠΈΡˆΡƒ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π½Π° экранС Π² этом случаС минимальна.

Π’ΡƒΡ‚ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ нюанс: сСбя ΠΊΠ»ΠΈΠ΅Π½Ρ‚ всСгда рисуСт ΠΏΠΎ послСднСму своСму ΠΈΠ½ΠΏΡƒΡ‚Ρƒ, Π° Π²Ρ€Π°Π³ΠΎΠ² ― с сСтСвой Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ, ΠΏΠΎ ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ… с сСрвСра. Π’ΠΎ Π΅ΡΡ‚ΡŒ, стрСляя Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ°, ΠΈΠ³Ρ€ΠΎΠΊ Π²ΠΈΠ΄ΠΈΡ‚ Π΅Π³ΠΎ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сСбя. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΡ€ΠΎ клиСнтскоС прСдсказаниС nanoratra izahay teo aloha.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ клиСнтскоС прСдсказаниС Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π½ΠΎ создаСт Π΄Ρ€ΡƒΠ³ΡƒΡŽ: Ссли ΠΈΠ³Ρ€ΠΎΠΊ стрСляСт Π² Ρ‚Ρƒ Ρ‚ΠΎΡ‡ΠΊΡƒ, Π³Π΄Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ находился Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ, Π½Π° сСрвСрС ΠΏΡ€ΠΈ выстрСлС Π² эту ΠΆΠ΅ Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ° Π² Ρ‚ΠΎΠΌ мСстС ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΆΠ΅ ΠΈ Π½Π΅ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ. БСрвСрная лагкомпСнсация пытаСтся Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. ΠŸΡ€ΠΈ выстрСлС ΠΈΠ· оруТия сСрвСр восстанавливаСт Ρ‚ΠΎ состояниС ΠΈΠ³Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΈΠ΄Π΅Π» ΠΈΠ³Ρ€ΠΎΠΊ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ выстрСла локально, ΠΈ провСряСт, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ ΠΎΠ½ ΠΌΠΎΠ³ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ°. Если ΠΎΡ‚Π²Π΅Ρ‚ Β«Π΄Π°Β», ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅ засчитываСтся, Π΄Π°ΠΆΠ΅ Ссли ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ° Π² этой Ρ‚ΠΎΡ‡ΠΊΠ΅ Π½Π° сСрвСрС ΡƒΠΆΠ΅ Π½Π΅Ρ‚.

Π’ΠΎΠΎΡ€ΡƒΠΆΠΈΠ²ΡˆΠΈΡΡŒ этими знаниями, ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ Π»Π°Π³ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠ°Ρ†ΠΈΡŽ Π² Dino Squad. ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго прСдстояло ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π° сСрвСрС Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²ΠΈΠ΄Π΅Π» ΠΊΠ»ΠΈΠ΅Π½Ρ‚? И Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ? Π’ нашСй ΠΈΠ³Ρ€Π΅ попадания оруТия ΠΈ способностСй Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· рСйкасты ΠΈ ΠΎΠ²Π΅Ρ€Π»Π°ΠΏΡ‹ ― Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Ρ‡Π΅Ρ€Π΅Π· взаимодСйствия с физичСскими ΠΊΠΎΠ»Π»Π°ΠΉΠ΄Π΅Ρ€Π°ΠΌΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ°. БоотвСтствСнно, Ρ‚ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ этих ΠΊΠΎΠ»Π»Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Β«Π²ΠΈΠ΄Π΅Π»Β» ΠΈΠ³Ρ€ΠΎΠΊ локально, Π½Π°ΠΌ ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ воспроизвСсти Π½Π° сСрвСрС. На Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΡ‹ использовали Unity вСрсии 2018.x. API Ρ„ΠΈΠ·ΠΈΠΊΠΈ Ρ‚Π°ΠΌ статичСский, физичСский ΠΌΠΈΡ€ сущСствуСт Π² СдинствСнном экзСмплярС. ВозмоТности ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ состояниС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ‚ΠΎΠΌ Π΅Π³ΠΎ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ, Π½Π΅Ρ‚. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ?

РСшСниС Π±Ρ‹Π»ΠΎ Π½Π° повСрхности, всС Π΅Π³ΠΎ элСмСнты ΡƒΠΆΠ΅ Π½Π°ΠΌΠΈ использовались для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π·Π°Π΄Π°Ρ‡:

  1. ΠŸΡ€ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΠ½ Π²ΠΈΠ΄Π΅Π» ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ², ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΆΠΈΠΌΠ°Π» Π½Π° клавиши. ΠœΡ‹ ΡƒΠΆΠ΅ писали эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈΠ½ΠΏΡƒΡ‚Π° ΠΈ использовали Π΅Π΅ для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ клиСнтского прСдсказания.
  2. Нам Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΌΠ΅Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ состояний ΠΈΠ³Ρ€Ρ‹. ИмСнно Π² Π½Π΅ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ² (Π° Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΈ ΠΈΡ… ΠΊΠΎΠ»Π»Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ²). На сСрвСрС история состояний Ρƒ нас ΡƒΠΆΠ΅ Π±Ρ‹Π»Π°, ΠΌΡ‹ использовали Π΅Π΅ для построСния Π΄Π΅Π»ΡŒΡ‚. Зная Π½ΡƒΠΆΠ½ΠΎΠ΅ врСмя, ΠΌΡ‹ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Π½ΡƒΠΆΠ½ΠΎΠ΅ состояниС Π² истории.
  3. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρƒ нас Π½Π° Ρ€ΡƒΠΊΠ°Ρ… Π΅ΡΡ‚ΡŒ состояниС ΠΈΠ³Ρ€Ρ‹ ΠΈΠ· истории, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΌΠ΅Ρ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ± ΠΈΠ³Ρ€ΠΎΠΊΠ°Ρ… с состояниСм физичСского ΠΌΠΈΡ€Π°. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠ»Π»Π°ΠΉΠ΄Π΅Ρ€Ρ‹ ― ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ, Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ ― ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ, лишниС ― ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ. Π­Ρ‚Π° Π»ΠΎΠ³ΠΈΠΊΠ° Ρƒ нас Ρ‚ΠΎΠΆΠ΅ ΡƒΠΆΠ΅ Π±Ρ‹Π»Π° написана ΠΈ состояла ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ECS систСм. Использовали ΠΌΡ‹ Π΅Π΅ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ нСсколько ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠ½Π°Ρ‚ Π² ΠΎΠ΄Π½ΠΎΠΌ Unity-процСссС. И ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ физичСский ΠΌΠΈΡ€ ― ΠΎΠ΄ΠΈΠ½ Π½Π° процСсс, Π΅Π³ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠ½Π°Ρ‚Π°ΠΌΠΈ. ΠŸΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Ρ‚ΠΈΠΊΠΎΠΌ симуляции ΠΌΡ‹ «сбрасывали» состояниС физичСского ΠΌΠΈΡ€Π° ΠΈ Π·Π°Π½ΠΎΠ²ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ для Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹, ΠΏΡ‹Ρ‚Π°ΡΡΡŒ ΠΏΠΎ максимуму ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Unity Ρ‡Π΅Ρ€Π΅Π· Ρ…ΠΈΡ‚Ρ€ΡƒΡŽ систСму ΠΏΡƒΠ»ΠΎΠ². ΠžΡΡ‚Π°Π²Π°Π»ΠΎΡΡŒ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ эту ΠΆΠ΅ Π»ΠΎΠ³ΠΈΠΊΡƒ для ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ состояния ΠΈΠ· ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ.

Π‘ΠΎΠ±Ρ€Π°Π² всС эти элСмСнты вмСстС, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Β«ΠΌΠ°ΡˆΠΈΠ½Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈΒ», которая ΡƒΠΌΠ΅Π»Π° ΠΎΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ состояниС физичСского ΠΌΠΈΡ€Π° Π΄ΠΎ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°. Код получился нСзамысловатый:

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

ΠžΡΡ‚Π°Π²Π°Π»ΠΎΡΡŒ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΌΠ°ΡˆΠΈΠ½Ρƒ для лагкомпСнсации выстрСлов ΠΈ способностСй.

Π’ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ случаС, ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ построСны Π½Π° ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠΌ хитсканС, Π²Ρ€ΠΎΠ΄Π΅ всС понятно: ΠΏΠ΅Ρ€Π΅Π΄ выстрСлом ΠΈΠ³Ρ€ΠΎΠΊΠ° Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ физичСский ΠΌΠΈΡ€ Π΄ΠΎ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ состояния, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ рСйкаст, Π·Π°ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΌΠ°Ρ… ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΌΠΈΡ€ Π² Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС.

Но Π² Dino Squad Ρ‚Π°ΠΊΠΈΡ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎ! Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ оруТия Π² ΠΈΠ³Ρ€Π΅ создаСт ΠΏΡ€ΠΎΠ΄ΠΆΠ΅ΠΊΡ‚Π°ΠΉΠ»Ρ‹ ― Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΠ΅ ΠΏΡƒΠ»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ лСтят нСсколько Ρ‚ΠΈΠΊΠΎΠ² симуляции (Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ― дСсятки Ρ‚ΠΈΠΊΠΎΠ²). Как Π±Ρ‹Ρ‚ΡŒ с Π½ΠΈΠΌΠΈ, Π² ΠΊΠ°ΠΊΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»Π΅Ρ‚Π΅Ρ‚ΡŒ?

Π’ Π΄Ρ€Π΅Π²Π½Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΡ€ΠΎ сСтСвой стСк Half-Life рСбята ΠΈΠ· Valve задавались Ρ‚Π΅ΠΌ ΠΆΠ΅ вопросом, ΠΈ ΠΈΡ… ΠΎΡ‚Π²Π΅Ρ‚ Π±Ρ‹Π» Ρ‚Π°ΠΊΠΎΠΉ: лагкомпСнсация ΠΏΡ€ΠΎΠ΄ΠΆΠ΅ΠΊΡ‚Π°ΠΉΠ»ΠΎΠ² ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½Π°, ΠΈ Π»ΡƒΡ‡ΡˆΠ΅ Π΅Π΅ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ.

Π£ нас этой ΠΎΠΏΡ†ΠΈΠΈ Π½Π΅ Π±Ρ‹Π»ΠΎ: ΠΎΡ€ΡƒΠΆΠΈΠ΅, основанноС Π½Π° ΠΏΡ€ΠΎΠ΄ΠΆΠ΅ΠΊΡ‚Π°ΠΉΠ»Π°Ρ…, Π±Ρ‹Π»ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°Ρ‚ΡŒ. НСмного ΠΏΠΎΠ±Ρ€Π΅ΠΉΠ½ΡˆΡ‚ΠΎΡ€ΠΌΠΈΠ², ΠΌΡ‹ сформулировали Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΌ показались Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌΠΈ:

1. ΠœΡ‹ привязываСм ΠΏΡ€ΠΎΠ΄ΠΆΠ΅ΠΊΡ‚Π°ΠΉΠ» ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Π³ΠΎ создал. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΊ сСрвСрной симуляции для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡƒΠ»ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΌΡ‹ ΠΎΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅ΠΌ физичСский ΠΌΠΈΡ€ Π΄ΠΎ клиСнтского состояния ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ вычислСния. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволял ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° сСрвСр ΠΈ прСдсказуСмоС врСмя ΠΏΠΎΠ»Π΅Ρ‚Π° ΠΏΡ€ΠΎΠ΄ΠΆΠ΅ΠΊΡ‚Π°ΠΉΠ»ΠΎΠ². ΠŸΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ для нас Π±Ρ‹Π»Π° особСнно Π²Π°ΠΆΠ½Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρƒ нас всС ΠΏΡ€ΠΎΠ΄ΠΆΠ΅ΠΊΡ‚Π°ΠΉΠ»Ρ‹, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΡ€ΠΎΠ΄ΠΆΠ΅ΠΊΡ‚Π°ΠΉΠ»Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ², ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅.

Ny fomba nanatsaranay ny mekanika amin'ny kajy ballistic ho an'ny mpitifitra finday miaraka amin'ny algorithm fanonerana fahatarana amin'ny tambajotra
На ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ ΠΈΠ³Ρ€ΠΎΠΊ Π² 30-ΠΎΠΌ Ρ‚ΠΈΠΊΠ΅ стрСляСт Ρ€Π°ΠΊΠ΅Ρ‚ΠΎΠΉ Π½Π° ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: ΠΎΠ½ Π²ΠΈΠ΄ΠΈΡ‚, Π² ΠΊΠ°ΠΊΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ Π±Π΅ΠΆΠΈΡ‚ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ, ΠΈ Π·Π½Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°ΠΊΠ΅Ρ‚Ρ‹. Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎ ΠΎΠ½ Π²ΠΈΠ΄ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΏΠ°Π» Π² Ρ†Π΅Π»ΡŒ Π² 33-Π΅ΠΌ Ρ‚ΠΈΠΊΠ΅. Благодаря лагкомпСнсации ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ ΠΎΠ½ ΠΈ Π½Π° сСрвСрС

2. ΠœΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ всС Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅, Π½ΠΎ, посчитав ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΊ симуляции ΠΏΡƒΠ»ΠΈ, Π½Π΅ останавливаСмся, Π° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΡΠΈΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ ΠΏΠΎΠ»Π΅Ρ‚ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ сСрвСрного Ρ‚ΠΈΠΊΠ°, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· приблиТая Π΅Π΅ врСмя ΠΊ сСрвСрному Π½Π° ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΊ ΠΈ обновляя ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΊΠΎΠ»Π»Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π”Π΅Π»Π°Π΅ΠΌ ΠΌΡ‹ это Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ случится ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΄Π²ΡƒΡ…:

  • Π‘Ρ€ΠΎΠΊ ΠΆΠΈΠ·Π½ΠΈ ΠΏΡƒΠ»ΠΈ истСк. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ вычислСния ΠΎΠΊΠΎΠ½Ρ‡Π΅Π½Ρ‹, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΌΠ°Ρ… ΠΈΠ»ΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅. И это Π² Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ выстрСл! Для нас это Π±Ρ‹Π»ΠΎ ΠΈ плюсом, ΠΈ минусом. Плюсом ― ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для ΡΡ‚Ρ€Π΅Π»ΡΡŽΡ‰Π΅Π³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ° это сущСствСнно ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π»ΠΎ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ Π²Ρ€Π°Π³Π°. ΠœΠΈΠ½ΡƒΡΠΎΠΌ ― ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ эффСкт наблюдался ΠΏΡ€ΠΈ ΡΡ‚Ρ€Π΅Π»ΡŒΠ±Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ² ΠΏΠΎ ΠΈΠ³Ρ€ΠΎΠΊΡƒ: ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ, казалось Π±Ρ‹, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ выстрСлил ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ Ρ€Π°ΠΊΠ΅Ρ‚ΠΎΠΉ, Π° ΡƒΡ€ΠΎΠ½ ΡƒΠΆΠ΅ засчитали.
  • ΠŸΡƒΠ»Ρ достигла сСрвСрного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’ этом случаС Π΅Π΅ симуляция продолТится Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ сСрвСрном Ρ‚ΠΈΠΊΠ΅ ΡƒΠΆΠ΅ Π±Π΅Π· лагкомпСнсации. Для ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄ΠΆΠ΅ΠΊΡ‚Π°ΠΉΠ»ΠΎΠ² это тСорСтичСски ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ число Β«ΠΎΡ‚ΠΊΠ°Ρ‚ΠΎΠ²Β» Ρ„ΠΈΠ·ΠΈΠΊΠΈ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя возрастала Π½Π΅Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° ΡΠΈΠΌΡƒΠ»ΡΡ†ΠΈΡŽ: сСрвСр Ρ‚ΠΎ простаивал, Ρ‚ΠΎ Π·Π° ΠΎΠ΄ΠΈΠ½ сСрвСрный Ρ‚ΠΈΠΊ просчитывал дСсяток Ρ‚ΠΈΠΊΠΎΠ² симуляции для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡƒΠ»ΡŒ.

Ny fomba nanatsaranay ny mekanika amin'ny kajy ballistic ho an'ny mpitifitra finday miaraka amin'ny algorithm fanonerana fahatarana amin'ny tambajotra
Π’ΠΎΡ‚ ΠΆΠ΅ сцСнарий, Ρ‡Ρ‚ΠΎ ΠΈ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅, Π½ΠΎ посчитанный ΠΏΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ схСмС. Π Π°ΠΊΠ΅Ρ‚Π° Β«Π΄ΠΎΠ³Π½Π°Π»Π°Β» сСрвСрноС врСмя Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Ρ‚ΠΈΠΊΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» выстрСл, ΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΊ. Π’ 31-ΠΎΠΌ Ρ‚ΠΈΠΊΠ΅ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС лагкомпСнсация ΡƒΠΆΠ΅ Π½Π΅ примСняСтся

Π’ нашСй Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ эти Π΄Π²Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΎΡ‚Π»ΠΈΡ‡Π°Π»ΠΈΡΡŒ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ ΠΏΠ°Ρ€ΠΎΠΉ строчСк ΠΊΠΎΠ΄Π°, поэтому Π·Π°ΠΏΠΈΠ»ΠΈΠ»ΠΈ ΠΌΡ‹ ΠΎΠ±Π°, ΠΈ Π΄ΠΎΠ»Π³ΠΎΠ΅ врСмя ΠΎΠ½ΠΈ Ρƒ нас сущСствовали ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ. Π’ зависимости ΠΎΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ оруТия ΠΈ скорости ΠΏΠΎΠ»Π΅Ρ‚Π° ΠΏΡƒΠ»ΠΈ ΠΌΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π»ΠΈ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄ΠΈΠ½ΠΎΠ·Π°Π²Ρ€Π°. ΠŸΠ΅Ρ€Π΅Π»ΠΎΠΌΠ½Ρ‹ΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ‚ΡƒΡ‚ стало появлСниС Π² ΠΈΠ³Ρ€Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊ Ρ‚ΠΈΠΏΠ° «Ссли Ρ‚Ρ‹ ΠΏΠΎΠΏΠ°Π» ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ-Ρ‚ΠΎ Ρ€Π°Π· ΠΏΠΎ Π²Ρ€Π°Π³Ρƒ Π·Π° Ρ‚Π°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя, ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Ρ‚Π°ΠΊΠΎΠΉ-Ρ‚ΠΎ бонус». Π›ΡŽΠ±Π°Ρ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠ°, Π³Π΄Π΅ врСмя, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ³Ρ€ΠΎΠΊ ΠΏΠΎΠΏΠ°Π» ΠΏΠΎ Π²Ρ€Π°Π³Ρƒ, ΠΈΠΌΠ΅Π»ΠΎ Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ, ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°Π»Π°ΡΡŒ Π΄Ρ€ΡƒΠΆΠΈΡ‚ΡŒ со Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅, ΠΈ сСйчас ΠΎΠ½ примСняСтся для всСго оруТия ΠΈ всСх Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… способностСй Π² ΠΈΠ³Ρ€Π΅.

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ стоит ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ вопрос ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Если Π²Π°ΠΌ показалось, Ρ‡Ρ‚ΠΎ всС это Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ΡŒ, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽ: Ρ‚Π°ΠΊ ΠΎΠ½ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ², ΠΈΡ… Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Unity Π΄Π΅Π»Π°Π΅Ρ‚ довольно ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. Π’ Dino Squad Π² Β«Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌΒ» случаС Π² бою ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ нСсколько сотСн ΠΏΡ€ΠΎΠ΄ΠΆΠ΅ΠΊΡ‚Π°ΠΉΠ»ΠΎΠ². Π”Π²ΠΈΠ³Π°Ρ‚ΡŒ ΠΊΠΎΠ»Π»Π°ΠΉΠ΄Π΅Ρ€Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΠΆΠ΅ΠΊΡ‚Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ― Π½Π΅ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ€ΠΎΡΠΊΠΎΡˆΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π°ΠΌ Π±Ρ‹Π»ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ число Β«ΠΎΡ‚ΠΊΠ°Ρ‚ΠΎΠ²Β» Ρ„ΠΈΠ·ΠΈΠΊΠΈ. Для этого ΠΌΡ‹ создали ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π² ECS, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ записываСм врСмя ΠΈΠ³Ρ€ΠΎΠΊΠ°. Π•Π³ΠΎ ΠΌΡ‹ повСсили Π½Π° всС энтити, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ лагкомпСнсации (ΠΏΡ€ΠΎΠ΄ΠΆΠ΅ΠΊΡ‚Π°ΠΉΠ»Ρ‹, способности ΠΈ Ρ‚. Π΄.). ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Ρ‚Π°ΠΊΠΈΡ… энтитСй, ΠΌΡ‹ кластСризуСм ΠΈΡ… ΠΏΠΎ этому Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΈΡ… вмСстС, откатывая физичСский ΠΌΠΈΡ€ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ кластСра.

На этом этапС ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π² Ρ†Π΅Π»ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ систСму. Π•Π΅ ΠΊΠΎΠ΄ Π² нСсколько ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅:

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

ΠžΡΡ‚Π°Π²Π°Π»ΠΎΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈ:

1. ΠŸΠΎΠ½ΡΡ‚ΡŒ, насколько сильно ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ пСрСмСщСния Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Для нас Π±Ρ‹Π»ΠΎ Π²Π°ΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ максимально доступной Π² условиях ΠΏΠ»ΠΎΡ…ΠΈΡ… ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… сСтСй, поэтому ΠΌΡ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ»ΠΈ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ с запасом ― 30-ю Ρ‚ΠΈΠΊΠ°ΠΌΠΈ (ΠΏΡ€ΠΈ Ρ‚ΠΈΠΊΡ€Π΅ΠΉΡ‚Π΅ Π² 20 Π³Ρ†). Π­Ρ‚ΠΎ позволяСт ΠΈΠ³Ρ€ΠΎΠΊΠ°ΠΌ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ² Π΄Π°ΠΆΠ΅ Π½Π° ΠΎΡ‡Π΅Π½ΡŒ высоких ΠΏΠΈΠ½Π³Π°Ρ….

2. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π° ΠΊΠ°ΠΊΠΈΠ΅ Π½Π΅Ρ‚.

ΠŸΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ² ΠΌΡ‹, понятно, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ. А Π²ΠΎΡ‚ устанавливаСмыС энСргСтичСскиС Ρ‰ΠΈΡ‚Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅Ρ‚. ΠœΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΡ‚Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π·Π°Ρ‰ΠΈΡ‚Π½ΠΎΠΉ способности, ΠΊΠ°ΠΊ часто ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π² сСтСвых ΡˆΡƒΡ‚Π΅Ρ€Π°Ρ…. Если ΡƒΠΆ ΠΈΠ³Ρ€ΠΎΠΊ поставил Ρ‰ΠΈΡ‚ Π² настоящСм, лагкомпСнсируСмыС ΠΏΡƒΠ»ΠΈ ΠΈΠ· ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠ»Π΅Ρ‚Π°Ρ‚ΡŒ сквозь Π½Π΅Π³ΠΎ.

3. Π Π΅ΡˆΠΈΡ‚ΡŒ, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ Π»Π°Π³ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ способности Π΄ΠΈΠ½ΠΎΠ·Π°Π²Ρ€ΠΎΠ²: укус, ΡƒΠ΄Π°Ρ€ хвостом ΠΈ Ρ‚. ΠΏ. ΠœΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ, ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΈΡ… ΠΏΠΎ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡƒΠ»ΠΈ.

4. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с ΠΊΠΎΠ»Π»Π°ΠΉΠ΄Π΅Ρ€Π°ΠΌΠΈ ΠΈΠ³Ρ€ΠΎΠΊΠ°, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ выполняСтся лагкомпСнсация. По-Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΌΡƒ, ΠΈΡ… позиция Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ΅: ΠΈΠ³Ρ€ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ сСбя Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ находится сСйчас Π½Π° сСрвСрС. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΊΠΎΠ»Π»Π°ΠΉΠ΄Π΅Ρ€Ρ‹ ΡΡ‚Ρ€Π΅Π»ΡΡŽΡ‰Π΅Π³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΌΡ‹ Ρ‚ΠΎΠΆΠ΅ ΠΎΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅ΠΌ, ΠΈ Π½Π° Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ нСсколько ΠΏΡ€ΠΈΡ‡ΠΈΠ½.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, это ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ ΠΊΠ»Π°ΡΡ‚Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ: ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ физичСскоС состояниС для всСх ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ² с Π±Π»ΠΈΠ·ΠΊΠΈΠΌ ΠΏΠΈΠ½Π³ΠΎΠΌ.

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π²ΠΎ всСх рСйкастах ΠΈ ΠΎΠ²Π΅Ρ€Π»Π°ΠΏΠ°Ρ… ΠΌΡ‹ ΠΈ Ρ‚Π°ΠΊ всСгда ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΊΠΎΠ»Π»Π°ΠΉΠ΄Π΅Ρ€Ρ‹ ΠΈΠ³Ρ€ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ способности ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ΄ΠΆΠ΅ΠΊΡ‚Π°ΠΉΠ»Ρ‹. Π’ Dino Squad ΠΈΠ³Ρ€ΠΎΠΊΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ Π΄ΠΈΠ½ΠΎΠ·Π°Π²Ρ€Π°ΠΌΠΈ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… достаточно нСстандартная ΠΏΠΎ ΠΌΠ΅Ρ€ΠΊΠ°ΠΌ ΡˆΡƒΡ‚Π΅Ρ€ΠΎΠ² гСомСтрия. Π”Π°ΠΆΠ΅ Ссли ΠΈΠ³Ρ€ΠΎΠΊ стрСляСт ΠΏΠΎΠ΄ Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΡƒΠ³Π»ΠΎΠΌ, ΠΈ траСктория ΠΏΡƒΠ»ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ»Π»Π°ΠΉΠ΄Π΅Ρ€ Π΄ΠΈΠ½ΠΎΠ·Π°Π²Ρ€Π° ΠΈΠ³Ρ€ΠΎΠΊΠ°, пуля Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚.

Π’-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ оруТия Π΄ΠΈΠ½ΠΎΠ·Π°Π²Ρ€Π° ΠΈΠ»ΠΈ Ρ‚ΠΎΡ‡ΠΊΡƒ примСнСния способности ΠΌΡ‹ вычисляСм ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠ· ECS Π΅Ρ‰Π΅ Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° лагкомпСнсации.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² лагкомпСнсируСмого ΠΈΠ³Ρ€ΠΎΠΊΠ° для нас нСсущСствСнно, поэтому ΠΌΡ‹ пошли ΠΏΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΈ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя Π±ΠΎΠ»Π΅Π΅ простому ΠΏΡƒΡ‚ΠΈ.

Π‘Π΅Ρ‚Π΅Π²ΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ нСльзя просто ΡƒΠ±Ρ€Π°Ρ‚ΡŒ, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΌΠ°ΡΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Как ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ способ маскировки, сСрвСрная лагкомпСнсация ΠΈΠΌΠ΅Π΅Ρ‚ свои Ρ‚Ρ€Π΅ΠΉΠ΄ΠΎΡ„Ρ„Ρ‹. Она ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ ΠΎΠΏΡ‹Ρ‚ ΡΡ‚Ρ€Π΅Π»ΡΡŽΡ‰Π΅Π³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ° Π·Π° счСт Ρ‚ΠΎΠ³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡΡ‚Ρ€Π΅Π»ΡΡŽΡ‚. Для Dino Squad, Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, Π²Ρ‹Π±ΠΎΡ€ здСсь Π±Ρ‹Π» ΠΎΡ‡Π΅Π²ΠΈΠ΄Π΅Π½.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π·Π°ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ Π·Π° это всС ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π΅Ρ‰Π΅ ΠΈ Π²ΠΎΠ·Ρ€ΠΎΡΡˆΠ΅ΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ сСрвСрного ΠΊΠΎΠ΄Π° Π² Ρ†Π΅Π»ΠΎΠΌ ― ΠΊΠ°ΠΊ для программистов, Ρ‚Π°ΠΊ ΠΈ для Π³Π΅ΠΉΠΌΠ΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ΠΎΠ². Если Ρ€Π°Π½ΡŒΡˆΠ΅ симуляция прСдставляла ΠΈΠ· сСбя простой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² систСм, Ρ‚ΠΎ с лагкомпСнсациСй Π² Π½Π΅ΠΉ появились Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΈ вСтвлСния. На Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ с Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΌΡ‹ Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΠ»ΠΈ Π½Π΅ΠΌΠ°Π»ΠΎ сил.

Π’ 2019 вСрсии (Π° ΠΌΠΎΠΆΠ΅Ρ‚, ΠΈ Ρ‡ΡƒΡ‚ΡŒ Ρ€Π°Π½ΡŒΡˆΠ΅), Π² Unity появилась плюс-минус полноцСнная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° нСзависимых физичСских сцСн. ΠœΡ‹ ΠΏΠΎΡ‡Ρ‚ΠΈ сразу послС обновлСния Π²Π½Π΅Π΄Ρ€ΠΈΠ»ΠΈ ΠΈΡ… Π½Π° сСрвСрС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ поскорСС ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ для всСх ΠΊΠΎΠΌΠ½Π°Ρ‚ физичСского ΠΌΠΈΡ€Π°.

ΠœΡ‹ Π²Ρ‹Π΄Π°Π»ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅ ΠΏΠΎ своСй физичСской сцСнС ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ избавились ΠΎΡ‚ нСобходимости Β«ΠΎΡ‡ΠΈΡ‰Π°Ρ‚ΡŒΒ» сцСну ΠΎΡ‚ Π΄Π°Π½Π½Ρ‹Ρ… сосСднСй ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ расчСтом симуляции. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, это Π΄Π°Π»ΠΎ сущСствСнный прирост ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Ρ†Π΅Π»ΠΎΠ³ΠΎ класса Π±Π°Π³ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΈ Π² случаС, Ссли программист допустил ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² ΠΊΠΎΠ΄Π΅ очистки сцСны ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²Ρ‹Ρ… ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… элСмСнтов. Π’Π°ΠΊΠΈΠ΅ ошибки Π±Ρ‹Π»ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½Ρ‹ Π² ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅, ΠΈ ΠΎΠ½ΠΈ часто ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΈ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ состояниС физичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² со сцСны ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ Β«ΠΏΠ΅Ρ€Π΅Ρ‚Π΅ΠΊΠ°Π»ΠΎΒ» Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ.

Помимо этого, ΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Π»ΠΈ нСбольшоС исслСдованиС Π½Π° Ρ‚Π΅ΠΌΡƒ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ физичСскиС сцСны для хранСния истории физичСского ΠΌΠΈΡ€Π°. Π’ΠΎ Π΅ΡΡ‚ΡŒ, условно, Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅ Π½Π΅ ΠΎΠ΄Π½Ρƒ сцСну, Π° 30 сцСн, ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ· Π½ΠΈΡ… цикличСский Π±ΡƒΡ„Π΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ. Π’ Ρ†Π΅Π»ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ оказался Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ, Π½ΠΎ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ ΠΌΡ‹ Π΅Π³ΠΎ Π½Π΅ стали: ΠΎΠ½ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π» ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΡΡƒΠΌΠ°ΡΡˆΠ΅Π΄ΡˆΠ΅Π³ΠΎ прироста ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π» довольно рискованных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π‘Π»ΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΠΎΠ²Π΅Π΄Π΅Ρ‚ сСбя сСрвСр ΠΏΡ€ΠΈ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ‚Π°ΠΊΠΈΠΌ количСством сцСн. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ послСдовали ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ: Β«Raha tsy vaky io dia aza amboary".

Source: www.habr.com

Add a comment