BP/CPP Player Index, как получить? Unreal Engine 4/5
Player Index, как можно понять по названию, указывает на номер игрока присоединившегося на определённый уровень. При разработке одиночной игры, обычно, не возникает потребности в определении номера игрока, он всегда равен нулю.
Когда игра рассчитана на несколько игроков, то подход в разработке меняется и номер игрока начинает играть огромную роль. Это можно особенно наблюдать в получении определённых компонентов игрока: Player Controller, Character и т.д.
Т.к. в открытом доступе информации по этому поводу толком не было либо она была максимально размешена ненужной информацией, я решил описать один из способов получения Player Index.
Суть следующая - когда новый игрок будет присоединятся к новому уровню сервер будет хранить номер данного игрока. Для этого идеально подойдёт GameMode, но обычный игрок(клиент) не имеет доступа к GameMode, да и сам GameMode должен различать, кто к нему обратился и какой у кого номер. Мол я такой-то такой-то, дай мне мой номер. Поэтому игровой режим будет хранить данные в связке ключ-значение(Map), где ключом будет являться уникальный айди пользователя - UniqueNetID, а значением простой int.
Event OnPostLogin - отслеживает присоединение новых игроков и возвращает PlayerController нового игрока. Через контроллер мы обращаемся к PlayerState и через него получаем уникальный ID, а потом заносим в Map с номером игрока. Также надо создать геттер для получения нашего Map.
Как пример, свой PlayerIndex я буду получать через PlayerController по нажатию на клавишу, но разницы в этом особо нет. Так как игрок-клиент(AuotonomousProxy) то для получения информации с GameMode необходимо делать RPC вызов с клиента на сервер. Это будет выглядеть следующим образом:
Конечно для дальнейшего использования на клиенте потребуется сделать ещё один RPC вызов уже с сервера к клиенту(ам).
CPP
На плюсах логика такая же, только за исключением того, что в получении компонентов (как всё тот же пример) PlayerIndex не нужен, если вызывает их клиент.
GameMode
PlayerController.CPP
PlayerController.h