В этом шаге мы разберём, как присвоить оружие игроку в начале игры.
Когда игрок появляется в первый раз, нужно выдать ему первое оружие из массива WeaponGranters
. Для этого нужно будет подписать функции к каждой из точек появления игроков. Более подробно о событиях, допускающих подписку, рассказано в разделе Реализация взаимодействия с устройствами.
Выполните следующие действия, чтобы подписаться на события появления игроков и назначить им первое оружие.
-
Добавьте новый метод
OnPlayerSpawn()
к классуteam_elimination_game
. Этот метод позволит назначить игроку нужное оружие как при первом, так и при повторном появлении.OnPlayerSpawn(InPlayer : agent) : void = Print("Игрок появился!")
-
Чтобы подписать функции, уже привязанные к соответствующим событиям, необходимо добавить новый код в
OnBegin()
. Создайте циклfor
, чтобы подписаться наSpawnedEvent
каждого генератора игрока при помощиOnPlayerSpawn
.OnBegin<override>()<suspends> : void = # Получаем всех игроков set Teams = GetPlayspace().GetTeamCollection().GetTeams() set EliminationsToEndGame = WeaponGranters.Length Print("Количество устранений до завершения игры: {EliminationsToEndGame}") for (Spawner : PlayerSpawners): Spawner.SpawnedEvent.Subscribe(OnPlayerSpawn) # Подписываемся на каждую точку появления игроков
-
Чтобы выдать игрокам первое оружие, необходимо получить доступ к первому устройству выдачи предметов в массиве
WeaponGranters
. Для этого используем новый метод.- Добавьте новый метод
GrantWeapon
в классteam_elimination_game
. Этот метод принимает агента типаoption
и назначает ему оружие на основе предоставленногоWeaponTier
.
GrantWeapon(InPlayer : ?agent, WeaponTier : int) : void= Print("Выдаю игроку оружие уровня {WeaponTier}")
- Внутри метода
GrantWeapon
обратитесь к соответствующему устройству выдачи объектов из массиваWeaponGranters
, используяWeaponTier
в качестве индекса. Получите доступ к значению внутриInPlayer
и сохраните его в переменнойGrantedPlayer
.
GrantWeapon(InPlayer : ?agent, WeaponTier : int) : void= Print("Выдаю игроку оружие уровня {WeaponTier}") if(ItemGranter := WeaponGranters[WeaponTier], GrantedPlayer := InPlayer?):
- Предоставьте игроку соответствующее оружие при помощи метода
ItemGranter.GrantItem
. Вы можете проверить, какое оружие было выдано, путём вывода соответствующего сообщения сWeaponTier
в журнал выходных данных. БлокGrantWeapon
теперь должен выглядеть следующим образом.
GrantWeapon(InPlayer : ?agent, WeaponTier : int) : void= Print("Выдаю игроку оружие уровня {WeaponTier}") if(ItemGranter := WeaponGranters[WeaponTier], GrantedPlayer := InPlayer?): ItemGranter.GrantItem(GrantedPlayer)
- Добавьте новый метод
-
Внесите изменения в
OnPlayerSpawn
для вызоваGrantWeapon
. При появлении игрока присвойте целочисленной переменнойWeaponTier
значение 0, которое будет соответствовать индексу первого устройства выдачи предметов в массивеWeaponGranters
. После этого вызовитеGrantWeapon
, передав значениеWeaponTier
и ссылку на игрока. БлокOnPlayerSpawn
теперь должен выглядеть следующим образом.OnPlayerSpawn(InPlayer : agent) : void= Print("Игрок появился!") WeaponTier : int = 0 GrantWeapon(option{InPlayer}, WeaponTier) Print("Появившемуся игроку выдано оружие уровня {WeaponTier}")
-
Сохраните сценарий в Visual Studio Code, скомпилируйте его и нажмите Запустить сеанс на панели инструментов UEFN, чтобы выполнить игровой тест уровня. При тестировании уровня игрок должен появиться с первым оружием из массива
WeaponGranters
. Проверьте верность поведения с помощью журнала.
Что дальше
[Дальше] (team-elimination-game-4-tracking-players-using-maps-in-verse) мы разберём, как отслеживать игроков с помощью ассоциативных массивов (map) и как заполнять эти массивы в начале игры.