У карты, созданной игроком, нет подготовленного (cooked) уровня, на который можно перейти, а её геометрия слишком велика для репликации. Вот как мне удалось доставить такую карту на каждый клиент в выпущенном проекте UE5: хранить каждый фрагмент как id и transform, реплицировать байты сохранения как свойство на акторе, который всегда релевантен, а не через RPC, и дать каждой машине пересобрать уровень из собственного cooked-контента. Рассматриваются: заголовок сжатия, потолок по размеру и что делать, если карта его превышает, почему состояние «ожидание» — это не ошибка, две хеш-суммы, которые не дают клиенту собрать уровень, не совпадающий с хостом, и ловушка, которая обошлась мне дороже всего: если оставить фрагменты подвижными, клиент сохранит один из них как базу перемещения, которую сервер не может разрешить, и игрока начинает тянуть назад. Чистый C++ и репликация движка, без плагинов.
https://dev.epicgames.com/community/learning/tutorials/ornDv/unreal-engine-234c69