プレイヤーが進行中のゲームに参加する場合、新しいラウンドが始まるまで観戦者として待たせる必要はありません。新しいプレイヤーもすぐにスポーンしてプレイを開始できるようにするのが理想的です。そのためには、新しいプレイヤーを TeamMap に追加して、そのプレイヤーの撃破イベントにサブスクライブし、最初の武器を付与する必要があります。
次の手順に従い、プレイヤーが進行中のゲームに参加してプレイヤー イベントをサブスクライブするときに武器を付与します。
-
新しいメソッド
OnPlayerAddedをteam_elimination_gameクラスに追加します。このメソッドでは、進行中のゲームに参加するプレイヤーを、そのチーム内で武器のティアが最も低いプレイヤーと同じティアまで昇格させます。OnPlayerAdded(InPlayer : player) : void = Print("A New Player Joined!") -
GetTeam[]を使用して新しいプレイヤーのチームを取得し、ローカル変数Teamに格納します。そのプレイヤーのFortCharacterを取得して変数FortCharacterに格納します。OnPlayerAdded(InPlayer : player) : void = Print("A New Player Joined!") if: Team := GetPlayspace().GetTeamCollection().GetTeam[InPlayer] FortCharacter := InPlayer.GetFortCharacter[] -
新しいプレイヤーを
TeamMapに割り当てるには、その新しいプレイヤーのTeamと関連付けられているplayer_mapにアクセスする必要があります。新しいプレイヤーと関連付けられているplayer_mapを取得して、ローカル変数PlayerMapに格納します。OnPlayerAdded(InPlayer : player) : void = Print("A New Player Joined!") if: Team := GetPlayspace().GetTeamCollection().GetTeam[InPlayer] FortCharacter := InPlayerr.GetFortCharacter[] var PlayerMap : player_map = TeamMap[Team] -
そのプレイヤーの
PlayerMap内でのスコアを 0 に設定し、TeamMapをローカル変数PlayerMapで更新します。OnPlayerAdded(InPlayer : player) : void = Print("A New Player Joined!") if: Team := GetPlayspace().GetTeamCollection().GetTeam[InPlayer] FortCharacter := InPlayer.GetFortCharacter[] var PlayerMap : player_map = TeamMap[Team] set PlayerMap[InPlayer] = 0 set TeamMap[Team] = PlayerMap -
GrantWeaponを呼び出してそのプレイヤーに最初の武器を付与し、その新しいプレイヤーの撃破イベントにサブスクライブします。OnPlayerAddedのコードは次のようになっているはずです。OnPlayerAdded(InPlayer : player) : void = Print("A New Player Joined!") if: Team := GetPlayspace().GetTeamCollection().GetTeam[InPlayer] FortCharacter := InPlayer.GetFortCharacter[] var PlayerMap : player_map = TeamMap[Team] set PlayerMap[InPlayer] = 0 set TeamMap[Team] = PlayerMap then: GrantWeapon(option{InPlayer}, 0) Print("Set new player weapon tier to 0 in the TeamMap") FortCharacter.EliminatedEvent().Subscribe(OnPlayerEliminated) # このプレイヤーの撃破イベントにサブスクライブします -
OnBegin内で、OnPlayerAddedを使用してプレイ空間PlayerAddedEventにサブスクライブします。これで、プレイヤーが進行中のゲームに参加するとOnPlayerAddedがトリガーされるようになりました。PlayerAddedEventはプレイ空間自体によってトリガーされるイベントであるため、特定の仕掛けをそのイベントにサブスクライブする必要はありません。OnBegin<override>()<suspends> : void = set Teams = GetPlayspace().GetTeamCollection().GetTeams() set EliminationsToEndGame = WeaponGranters.Length Print("Number of eliminations to end game is {EliminationsToEndGame}") Print("Beginning to assign players") PopulateTeamsAndPlayers() for (Spawner : PlayerSpawners): Spawner.SpawnedEvent.Subscribe(OnPlayerSpawn) # Subscribe to each player spawn pad for (Sentry : Sentries): Sentry.EliminatedEvent.Subscribe(TestPlayerEliminated) # 各セントリーにサブスクライブします # ゲームに参加した新しいプレイヤーにサブスクライブします。 GetPlayspace().PlayerAddedEvent().Subscribe(OnPlayerAdded)
Visual Studio Code でスクリプトを保存してコンパイルし、UEFN ツールバーの [Launch Session (セッションを起動)] をクリックしてレベルをプレイテストします。新しいプレイヤーが進行中のゲームに参加すると、最初の武器を装備してスポーンします。そのプレイヤーまたはチームメイトが撃破を達成すると、次の武器のティアに昇格します。
次のステップ
このチュートリアルの 次のステップ では、セントリーを使用したシングル プレイヤーのプレイ時に撃破をテストする方法について学びます。