🧑💻 Продолжаю работать над архитектурой мультиплеера!
Всем привет! Сегодня расскажу про систему мультисцен и разделение игрока на два уровня.
Система Universe и Place на мультисценах
Для реализации вселенных использовал мультисцены Unity. При старте сервера запускается главная сцена Universe — это общее пространство вселенной. Когда игрок хочет зайти в конкретный Place — подгружается дополнительная сцена.
✔️ Такой подход позволяет держать и обрабатывать несколько плейсов одновременно на одном сервере. Игроки могут находиться в разных местах, и каждое место живёт в своей сцене независимо от остальных.
Два уровня игрока
Разделил сущность игрока на два уровня.
✔️ PlayerUniverse — сущность игрока на уровне вселенной. Хранит общую информацию: ник, статус, текущий плейс. Благодаря этому можно видеть, в каких плейсах сейчас играют другие игроки, и при необходимости телепортироваться к ним.
✔️ PlayerPlace — сущность игрока внутри конкретного Place. Здесь уже вся игровая информация: позиция, инвентарь, взаимодействие с блоками. Создаётся при входе в плейс, уничтожается при выходе.
Спавн, синхронизация чанков и игроков
🌐 Игроки теперь полноценно спавнятся при подключении к серверу. При этом спавн не происходит мгновенно — сервер сначала дожидается, пока чанки вокруг точки спавна будут сгенерированы и готовы. Это исключает ситуации, когда игрок проваливается сквозь мир или появляется в пустоте.
✔️ Сервер сам решает, какие чанки нужны каждому игроку, на основе его позиции и радиуса видимости. Отправляются только дельты — что добавилось, что изменилось, что вышло из зоны. Данные чанков сжимаются перед отправкой, а для хоста стриминг вообще пропускается, так как данные уже и так есть локально. Чанки отправляются порциями, чтобы не забивать канал. Приоритет отдаётся ближайшим к игроку чанкам.
😏 Дальше на очереди — сохранение данных игрока, синхронизация инвентаря и переходы между плейсами. Работы еще очень много, но двигаемся по маленьку
📌 Прикрепил скрины организации сцен, можете посмотреть как выстроена архитектура)
Post #841
1.29K




- 🔥 17
- 👍 4
- 🥰 1