Комментарии 5
Спасибо за статью, на самом деле захотелось углубится в движок после вашего поста.
Хорошая и полезная статья!
Но стоит отметить одну очень важную вещь о которую я споткнулся, когда был масленком: такой формат будет работать только в формате листен сервера, то есть когда хост у одного из игроков, на его клиенте. Можно, конечно, завести дедики через сессии, но кажется, что это путь большого сопротивления.
Еще хочу заметить, что идеологически класс AGameSession предназначен для работы с сессиями НЕ на стороне клиента, а на стороне сервера. Класс игровой сессии должен решать задачи обработки игрока в рамках сессии на бекенде (какой бы он не был, например это может быть генерация события "ваш друг начал играть в такой то сессии"), по сути он дублирует некоторые события гейм мода, связанные с подключением игроков и создан, чтобы вынести логику не касающуюся режима игры в отдельный класс игровой сессии.
Куда логичнее, на мой взгляд, было бы реализовать показанный в туторе функционал в сабсистеме, как сделан DestroySession.
Благодарю за комментарий!
Еще хочу заметить, что идеологически класс AGameSession предназначен для работы с сессиями НЕ на стороне клиента, а на стороне сервера.
Согласен, кроме того AGameSession, как я выразился существует лишь на сервере.
Вы правы, я такой подход применил на коммерческом проекте, создав прослойку в виде сабсистем, которая и регулировала выход/вход игрока на сервер, и сама решала, кем является игрок, клиентом, или сервером. Однако, это вопрос архитектуры, я не хотел перегружать и без того сложную статью.
Кроме того, почему такой формат не будет работать с dedicated сервером? Как бы вы реализовали эту механику с учетом размещения отдельного сервера?
Проблема дедиков тут в том, что для создания сессии требуется игрок, а точнее его NetId(SteamId в данном случае) и токен авторизации. И этот игрок будет являться владельцем сессии, а так же IP его машины (или в случае со стим его ID на магистрали vavle) будет записан в сессию, как URL подключения.
Дедикейтед сервер же не предоставляет игрока по определению. Можно конечно на машинах с серваками поднимать SteamCLI и делать сервисных игроков, которые будут хостить сессии. Я знавал одних челиков, которые так сделали, но куда проще взять какой нибудь PlayFab или GameLift и хостить дедики там.
Мультиплеер в Unreal Engine: Подключение и Хостинг