В этом шаге мы разберём, как присвоить оружие игроку в начале игры.
Когда игрок появляется в первый раз, нужно выдать ему первое оружие из массива 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) и как заполнять эти массивы в начале игры.