Перейти до основного вмісту
Жива гра

Цю сторінку ще не перекладено — показано англійську версію.

Передбачення власного руху

Ви дієте за власним введенням ще до відповіді сервера, а там, де ваш клієнт і сервер розходяться, клієнт сам себе виправляє. Помилка тут коштує невеликої візуальної корекції, і більше нічого. Тому з трьох механізмів передбачення саме цей можна налаштовувати найагресивніше.

Передбачення повторно застосовує оголошені правила, а не є їхньою другою копією

Ваш клієнт не запускає паралельну реалізацію вашого руху. Він виконує ту саму оголошену модель, що й платформа: модель належить модулю Locomotion, а передбачення (prediction) лише застосовує її раніше. Тому здебільшого обидві сторони й погоджуються: правила одні, застосовують їх двічі.

Тож немає ні операції «передбачити», яку треба викликати, ні операції «виправити». Передбачення працює, бо аспект оголосили передбачуваним.

Що передбачати, оголошують для кожного аспекту

Передбачуваність — це оголошення на аспекті сутності, а не глобальний перемикач:

  • Аспект, який клієнт може обчислити сам (наприклад, позицію за вашим власним введенням), передбачати можна.
  • Аспект, який авторитетна сторона змінює за правилами, яких клієнт не має, передбачати не можна. Якщо клієнт не може його вивести, здогадка закінчиться відкатом, і гравець сприйме це як обман з боку гри.

Протокол корекції і два числа, які його визначають

your machinethe server input applied at once, locally — the declared rules, run earlythe same inputthe same rules, laterthey agree — nothing happens, and you never knewthey disagree — your client is moved to the server
Ваше введення одразу застосовується локально, ті самі правила згодом виконує сервер, а клієнт виправляється лише там, де результати розходяться

Авторитетний стан приходить разом із номером останнього введення, яке він застосував, тож ваш клієнт точно знає, яка частина його буфера ще не підтверджена. Далі клієнт:

  1. Приймає авторитетний стан.
  2. Програє заново введення з буфера, що йшли після підтвердженого.
  3. Звіряє результат із тим, що вже показував, — це реконсиляція (reconciliation).

Як це відчувається, визначають два оголошені числа. Поріг розбіжності: нижче нього корекцію згладжують, вище — клієнт стрибком переходить до авторитетного стану й програє введення заново. І межа буфера непідтвердженого введення: переповнення не є невизначеною поведінкою. Деградацію оголошено, і її видно, тож клієнт на поганому з’єднанні знає, що перестав передбачати, а не дрейфує непомітно.

Розбіжність бачить лише той клієнт, у якого вона сталася. Ви можете дізнатися, що ваше передбачення виправили і наскільки. Це корисно для налаштування і для того, щоб показувати гравцеві точний індикатор з’єднання. Чужу розбіжність прочитати не можна: розмір помилки передбачення — це інформація про чуже з’єднання, а не про гру. Корекція відбувається на клієнті, бо всім іншим і так уже показували стан авторитетної сторони.

Якщо ви переходите з іншого рішення

  • Mover 2.0 в Unreal. Будова знайома: введення з позначкою тіку, модель руху, корекції від авторитетної сторони. Різниця в тому, де живе модель: тут ви її оголошуєте, а симулює її платформа. Тож нашого компонента руху, який треба успадковувати чи замінювати, немає.
  • Неткод із відкатом і повторним програванням, як у Photon Fusion. Повторне програвання власного непідтвердженого введення після корекції — той самий механізм, і тут він є повністю. Чого тут навмисно немає, то це повторного прогону світу заднім числом. Що відбувається натомість і чому, описано в Lag Compensation.

Чого ця сторінка не охоплює

Сутності інших гравців не передбачають, їх показують — про це сторінка Як показувати інших гравців. Оцінка пострілу за часовою лінією стрільця — серверний механізм, його описано в Lag Compensation. І жоден із трьох механізмів не діє, якщо режим авторитетності (authority mode) кімнати зовнішній: тоді тік належить тому, хто його виконує, а з ним і передбачення.