Найти тему

BP/CPP Player Index, как получить? Unreal Engine 4/5

Player Index, как можно понять по названию, указывает на номер игрока присоединившегося на определённый уровень. При разработке одиночной игры, обычно, не возникает потребности в определении номера игрока, он всегда равен нулю.

Когда игра рассчитана на несколько игроков, то подход в разработке меняется и номер игрока начинает играть огромную роль. Это можно особенно наблюдать в получении определённых компонентов игрока: Player Controller, Character и т.д.

Основные функции получения компонентов игрока, которые требуют Player Index
Основные функции получения компонентов игрока, которые требуют Player Index

Т.к. в открытом доступе информации по этому поводу толком не было либо она была максимально размешена ненужной информацией, я решил описать один из способов получения Player Index.

Суть следующая - когда новый игрок будет присоединятся к новому уровню сервер будет хранить номер данного игрока. Для этого идеально подойдёт GameMode, но обычный игрок(клиент) не имеет доступа к GameMode, да и сам GameMode должен различать, кто к нему обратился и какой у кого номер. Мол я такой-то такой-то, дай мне мой номер. Поэтому игровой режим будет хранить данные в связке ключ-значение(Map), где ключом будет являться уникальный айди пользователя - UniqueNetID, а значением простой int.

Event OnPostLogin - отслеживает присоединение новых игроков и возвращает PlayerController нового игрока. Через контроллер мы обращаемся к PlayerState и через него получаем уникальный ID, а потом заносим в Map с номером игрока. Также надо создать геттер для получения нашего Map.

-3

Как пример, свой PlayerIndex я буду получать через PlayerController по нажатию на клавишу, но разницы в этом особо нет. Так как игрок-клиент(AuotonomousProxy) то для получения информации с GameMode необходимо делать RPC вызов с клиента на сервер. Это будет выглядеть следующим образом:

Результат
Результат

Конечно для дальнейшего использования на клиенте потребуется сделать ещё один RPC вызов уже с сервера к клиенту(ам).

CPP

На плюсах логика такая же, только за исключением того, что в получении компонентов (как всё тот же пример) PlayerIndex не нужен, если вызывает их клиент.

Ссылка на DTF с кодом на CPP:

BP/CPP Player Index, как получить? Unreal Engine 4/5 — Gamedev на DTF