4 подписчика
#1 - GODOT 4. НАЧАЛ РАЗРАБОТКУ МУЛЬТИПЛЕЙЕРА — ПЕРЕПИСЫВАЕМ СЕТЕВОЕ ДВИЖЕНИЕ: С ЛОКАЛЬНОГО КОНТРОЛЛЕРА НА СЕТЕВОЙ.
Сегодня хотел приоткрыть завесу тайны своего проекта, над которым работаю продолжительное время. Проект перешёл в стадию начало разработки мультиплейера. Первым делом будем адаптировать контроллер управления игрока, но сперва нужно определиться с моделью — а именно, сервер всегда прав, а клиент... скажем так, не спорит.
Посмотрите как выглядит обычный локальный контроллер на WASD:
func _physics_process(delta):
velocity.y -= grav * delta
process_input()
update_facing(delta)
move_and_slide()
Всё просто: гравитация, ввод с клавиатуры, поворот, движение. Персонаж слушается каждую кнопку мгновенно.
Теперь мультиплеер. Тот же контроллер, но появляется проверка — кто я? Сервер или клиент?
func _physics_process(delta):
if is_server_authority():
velocity.y -= grav * delta
process_input()
update_facing(delta)
move_and_slide()
else:
velocity = Vector3.ZERO
move_and_slide()
Сервер работает как раньше — считает физику, двигает, отправляет позицию остальным. Клиент — нет. Он обнуляет скорость и ждёт готовые координаты от MultiplayerSynchronizer.
MultiplayerSynchronizer — это нода в Godot, которая сама следит за изменениями нужных переменных и рассылает их клиентам. Без ручных вызовов каждый кадр, без лишнего кода. Настроил один раз — и персонаж двигается плавно на всех подключённых клиентах. Правильный мультиплеер в Godot строится вокруг этой ноды — без неё не сделать хорошо работающую сетевую игру.
1 минута
25 июня