Спросил я тут свой вопрос у чат бота, вот че он мне ответил:
Для вашей задачи реализации сессионной игры с использованием Netcode for GameObjects, я бы посоветовал следующий подход:
• Создание сервера: Создайте один экземпляр сервера, который будет управлять всей игровой сессией. Этот сервер будет отвечать за синхронизацию состояний между клиентами, обработку игровой логики и контроль окончания матча.
• Синхронизация состояний: Используйте функциональность Netcode for GameObjects для синхронизации состояний между клиентами и сервером. Например, вы можете отправить RPC от сервера ко всем клиентам для передачи стартовых данных и конфигурации игры.
• Спавн игроков: После получения данных о старте игры, каждый клиент может создать свой собственный игровой объект игрока, используя playerPrefab из лобби. При создании игрока на клиенте используйте функцию NetworkManager.Spawn() для синхронизации создания игрового объекта между клиентами и сервером.
• Управление игровыми объектами: В случае, если локальные игроки должны иметь возможность уничтожать свои игровые объекты, вы можете отправить RPC от клиента к серверу, чтобы сервер вызвал функцию Destroy() для соответствующего игрового объекта. Затем сервер может отправить сообщение об удалении объекта всем клиентам, чтобы они также уничтожили свои экземпляры объектов.
• Окончание матча: Когда матч завершается, сервер может отправить сообщение о его окончании всем клиентам и выполнить необходимые действия, такие как подведение итогов, показ результатов или переход к следующей игровой сессии. После этого сервер может быть уничтожен на серверной стороне.
В целом, его задумка не лишена смысла, так например работают серверы всяких мультиплеерных шутеров, например контер страйк, дейз и т.п, но что касается моей задумки в целом, то матчи 1х1 планируются и получается, для каждой игровой сессии нада будет запускать новый экземпляр на сервере (физическом) с определенным портом для того чтоб клиентам сообщить об этом, т.е лобби менеджер (который уже получается отдельный сервис) отправит инфу клиентам (в юнити билд) с адресом и портом для коннекта, ну может еще какой нить секретный хэш отправить чтоб никто не вломился на сервак кроме нужных игроков. Далее клиенты подключатся, всем выдаются их префабы и собсна начинается coop игра, где все игроки полностью синхронизируются с этим экземпляром сервера.
Но у меня сомнения этож если будет допустим онлайн 1000 чел которые "внезапно" тыкнут в матчмейкер но над будет запустить 500 экземпляров сервера... В сервере у меня доступно всего 192гб (из них реально доступно 170гб) это получается сервак сможет обработать только 1700 серваков (сейчас билд занимает 100мб в памяти) а это 3400 игроков (при условии матча 1х1). С одной стороны это вроде и не мало, но с другой стороны, с точки зрения масштабируемости как то жирно по деньгам (если еще один сервак покупать с 170гб оперативы к примеру).