Цю сторінку ще не перекладено — показано англійську версію.
Передбачення власного руху
Ви дієте за власним введенням ще до відповіді сервера, а там, де ваш клієнт і сервер розходяться, клієнт сам себе виправляє. Помилка тут коштує невеликої візуальної корекції, і більше нічого. Тому з трьох механізмів передбачення саме цей можна налаштовувати найагресивніше.
Передбачення повторно застосовує оголошені правила, а не є їхньою другою копією
Ваш клієнт не запускає паралельну реалізацію вашого руху. Він виконує ту саму оголошену модель, що й платформа: модель належить модулю Locomotion, а передбачення (prediction) лише застосовує її раніше. Тому здебільшого обидві сторони й погоджуються: правила одні, застосовують їх двічі.
Тож немає ні операції «передбачити», яку треба викликати, ні операції «виправити». Передбачення працює, бо аспект оголосили передбачуваним.
Що передбачати, оголошують для кожного аспекту
Передбачуваність — це оголошення на аспекті сутності, а не глобальний перемикач:
- Аспект, який клієнт може обчислити сам (наприклад, позицію за вашим власним введенням), передб ачати можна.
- Аспект, який авторитетна сторона змінює за правилами, яких клієнт не має, передбачати не можна. Якщо клієнт не може його вивести, здогадка закінчиться відкатом, і гравець сприйме це як обман з боку гри.
Протокол корекції і два числа, які його визначають
Авторитетний стан приходить разом із номером останнього введення, яке він застосував, тож ваш клієнт точно знає, яка частина його буфера ще не підтверджена. Далі клієнт:
- Приймає авторитетний стан.
- Програє заново введення з буфера, що йшли після підтвердженого.
- Звіряє результат із тим, що вже показував, — це реконсиляція (reconciliation).
Як це відчувається, визначають два оголошені числа. Поріг розбіжності: нижче нього корекцію згладжують, вище — клієнт стрибком переходить до авторитетного стану й програє введення заново. І межа буфера непідтвердженого введення: переповнення не є невизначеною поведінкою. Деградацію оголошено, і її видно, тож клієнт на поганому з’єднанні знає, що перестав передбачати, а не дрейфує непомітно.
Розбіжність бачить лише той клієнт, у якого вона сталася. Ви можете дізнатися, що ваше передбачення виправили і наскільки. Це корисно для налаштування і для того, щоб показувати гравцеві точний індикатор з’єднання. Чужу розбіжність прочитати не можна: розмір помилки передбачення — це інформація про чуже з’єднання, а не про гру. Корекція відбувається на клієнті, бо всім іншим і так уже показували стан авторитетної сторони.
Якщо ви переходите з іншого рішення
- Mover 2.0 в Unreal. Будова знайома: введення з позначкою тіку, модель руху, корекції від авторитетної сторони. Різниця в тому, де живе модель: тут ви її оголошуєте, а симулює її платформа. Тож нашого компонента руху, який треба успадковувати чи замінювати, немає.
- Неткод із відкатом і повторним програванням, як у Photon Fusion. Повторне програвання власного непідтвердженого введення після корекції — той самий механізм, і тут він є повністю. Чого тут навмисно немає, то це повторного прогону світу заднім числом. Що відбувається натомість і чому, описано в Lag Compensation.
Чого ця сторінка не охоплює
Сутності інших гравців не передбачають, їх показують — про це сторінка Як показувати інших гравців. Оцінка пострілу за часовою лінією стрільця — серверний механізм, його описано в Lag Compensation. І жоден із трьох механізмів не діє, якщо режим авторитетності (authority mode) кімнати зовнішній: тоді тік належить тому, хто його виконує, а з ним і передбачення.