マップの設定が完了しました。次のステップでは、プレイヤーが撃破を達成したときに武器を付与します。
プレイヤーが撃破を達成すると、次の 2 つのルールを適用します。
-
プレイヤーの武器のティアがチームで最も高いティアではない場合、またはすべてのプレイヤーが同じ武器のティアにいる場合、次のティアに昇格します。
-
チーム内に他より低い武器のティアにいるプレイヤーがいる場合は、代わりにそのプレイヤーを昇格させます。
これにより、プレイヤーはチームとして武器の切り替えを進めていき、チームメイトの誰も 2 つ以上先または後の武器を使用することがなくなります。
そのためには、プレイヤーがいつ撃破を達成したのかを把握し、次に武器のティアをチーム内にいる他のすべてのプレイヤーと比較して、上述の 2 つのルールに基づいてプレイヤーを昇格させる必要があります。
次の手順に従って、撃破を達成したプレイヤーに武器を付与します。
-
新しいメソッド
GiveNextWeaponをteam_elimination_gameクラスに追加します。このメソッドは、プレイヤーまたは属するチーム内の誰かが撃破を達成するたびに、上述の 2 つのルールに基づいてプレイヤーに武器を付与します。GiveNextWeapon(EliminatingPlayer : agent) : void = Print("Finding a player to promote") -
OnPlayerEliminatedを、どのプレイヤーが撃破を達成したかを追跡するように更新します。OnPlayerEliminatedはelimination_resultを受け取るため、撃破されたキャラクターと撃破したキャラクターの両方への参照を取得できます。プレイヤーはさまざまな方法 (落下ダメージ、セントリー、自己ダメージなど) で撃破される可能性があるため、EliminatingCharacterが実際のFortCharacter(つまり実際のプレイヤー) であるかどうかを推定する必要があります。Result.EliminatingCharacterへの参照を取得し、ローカル オプション変数Eliminatorに格納します。Eliminatorが有効なFortCharacterであるかどうかをチェックし、有効であればそのキャラクターのエージェントを別の変数EliminatorAgentに格納します。最後に、EliminatorAgentをGiveNextWeaponに渡します。
OnPlayerEliminated(Result : elimination_result) : void = Print("A Player was eliminated!") Eliminator := Result.EliminatingCharacter if (FortCharacter := Eliminator?, EliminatorAgent := FortCharacter.GetAgent[]): GiveNextWeapon(EliminatorAgent) -
GiveNextWeaponでは、適切なプレイヤーに新しい武器を付与するためにいくつかの変数を追跡する必要があります。次の宣言をGiveNextWeaponに追加します。-
int 変数
WeaponTier。これは、武器を付与するプレイヤーの武器のティアを追跡します。 -
MaybePlayerToGrantという名前の任意指定の agent 変数。これは、武器を付与するプレイヤーです。これはデフォルトでは、GiveNextWeaponに渡されたプレイヤーです。 -
MaybePlayerTeamという名前の任意指定の team 変数。これは武器を付与するプレイヤーのチームです。これはデフォルトでは、GiveNextWeaponに渡されたプレイヤーのチームです。
GiveNextWeapon(EliminatingPlayer : agent) : void = Print("Finding a player to promote") var WeaponTier : int = 0 var MaybePlayerToGrant : ?agent = option{EliminatingPlayer} # The player to grant a gun to var MaybePlayerTeam : ?team = option{GetPlayspace().GetTeamCollection().GetTeam[EliminatingPlayer]} # The team this player is on -
-
MaybePlayerTeamの値をローカル変数PlayerTeamに抽出し、次にWeaponTierを、TeamMapにあるそのプレイヤーのスコアの値に設定します。var MaybePlayerTeam : ?team = option{GetPlayspace().GetTeamCollection().GetTeam[EliminatingPlayer]} # The team this player is on if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]): -
そのチームのプレイヤーごとにイテレートし、それぞれの武器のティアを比較します。低いティアのプレイヤーがいた場合、
MaybePlayerToGrantをそのプレイヤーに、WeaponTierをそのプレイヤーのスコアに設定します。TeamMapはマップであるため、Teammate -> TeammateTier構文を使用して、キー (プレイヤー) と値 (武器のティア) の両方をローカル変数として抽出できます。if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]): for(Teammate -> TeammateTier : TeamMap[PlayerTeam], TeammateTier < WeaponTier): Print("Found a Teammate with a lower Tier at Tier {TeammateTier}") if(set WeaponTier = TeamMap[PlayerTeam][Teammate]): set MaybePlayerToGrant = option{Teammate} -
武器のティアが最も低い (または最も低いティアと同じ) プレイヤーが見つかったら、
WeaponTierを 1 だけ増やしてから、TeamMap内のそのプレイヤーの武器のティアをWeaponTierに設定します。if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]): for(Teammate -> TeammateTier : TeamMap[PlayerTeam], TeammateTier < WeaponTier): Print("Found a Teammate with a lower Tier at Tier {TeammateTier}") if(set WeaponTier = TeamMap[PlayerTeam][Teammate]): set MaybePlayerToGrant = option{Teammate} set WeaponTier = WeaponTier + 1 if(PlayerTeam := MaybePlayerTeam?, PlayerToGrant := player[MaybePlayerToGrant?], set TeamMap[PlayerTeam][PlayerToGrant] = WeaponTier): Print("Eliminating Player Tier is now {WeaponTier}") -
武器のティアを昇格するとゲームを終了するために必要な撃破数を超えることがあるため、ここでプレイヤーがゲームに勝利したかどうかを確認することをお勧めします。
- 新しいメソッド
EndGameをteam_elimination_gameクラス内に作成します。このメソッドは、指定されたプレイヤーが最終的な武器のティアに到達したときに、そのプレイヤーに対してEndGameDeviceをアクティブ化します。完成したメソッドは次のようになっているはずです。
EndGame(InPlayer : agent) : void = Print("Player reached final Weapon Tier, activating EndGameDevice") EndGameDevice.Activate(InPlayer)GiveNextWeaponに戻り、プレイヤーの武器のティアを増やした後に、WeaponTier >= EliminationsToEndGameであるかどうかをチェックします。この条件を満たしている場合は、プレイヤーを渡してEndGameを呼び出します。
if(PlayerTeam := MaybePlayerTeam?, PlayerToGrant := player[MaybePlayerToGrant?], set TeamMap[PlayerTeam][PlayerToGrant] = WeaponTier): Print("Eliminating Player Tier is now {WeaponTier}") if(WeaponTier >= EliminationsToEndGame): EndGame(EliminatingPlayer) - 新しいメソッド
-
この条件を満たしていない場合は、
GrantedPlayerに対してGrantWeaponを呼び出します。if(WeaponTier >= EliminationsToEndGame): EndGame(EliminatingPlayer) GrantWeapon(MaybePlayerToGrant, WeaponTier) -
完成した
GiveNextWeaponメソッドのコードは次のようになっているはずです。GiveNextWeapon(EliminatingPlayer : agent) : void = Print("Finding a player to promote") var WeaponTier : int = 0 var MaybePlayerToGrant : ?agent = option{EliminatingPlayer} # 銃を付与するプレイヤー var MaybePlayerTeam : ?team = option{GetPlayspace().GetTeamCollection().GetTeam[EliminatingPlayer]} # このプレイヤーが属するチーム if(PlayerTeam := MaybePlayerTeam?, set WeaponTier = TeamMap[PlayerTeam][EliminatingPlayer]): for(Teammate -> TeammateTier : TeamMap[PlayerTeam], TeammateTier < WeaponTier): Print("Found a Teammate with a lower Tier at Tier {TeammateTier}") if(set WeaponTier = TeamMap[PlayerTeam][Teammate]): set MaybePlayerToGrant = option{Teammate} set WeaponTier = WeaponTier + 1 if(PlayerTeam := MaybePlayerTeam?, PlayerToGrant := player[MaybePlayerToGrant?], set TeamMap[PlayerTeam][PlayerToGrant] = WeaponTier): Print("Eliminating Player Tier is now {WeaponTier}") if(WeaponTier >= EliminationsToEndGame): EndGame(EliminatingPlayer) GrantWeapon(MaybePlayerToGrant, WeaponTier)
Visual Studio Code でスクリプトを保存してコンパイルし、UEFN ツールバーの [Launch Session (セッションを起動)] をクリックしてレベルをプレイテストします。レベルをプレイテストするときは、WeaponGranters 配列の最初の武器をもう一度スポーンする必要があります。この動作をログで確認してくださいしてください。敵プレイヤーへの撃破が成功すると、次の武器に昇格します。昇格は、先ほど概説した 2 つのルールに従う必要があります。シーケンスの最終武器まで昇格して撃破すると、撃破したプレイヤーが勝者となってゲームが終了します。

次のステップ
このチュートリアルの 次のステップ では、進行中のゲームに参加するプレイヤーをマップに追加し、武器を割り当てる方法について学びます。