前提条件のトピック:トリプル侵入ゲーム01Verseでレベルをセットアップする
このセクションでは、以前に設定した、ランタイム時にプレイヤーとチームを検索する方法を説明します。
クラス メンバーを定義する
- Verse Explorer を開き、「triad_infiltration_game.verse」をダブルクリックして、Visual Studio Code でスクリプトを開きます。
- ファイルの先頭に、
Shuffle()関数にアクセスするための「using { /Verse.org/Random }」を追加します。これを使用して、バランスを取る前にプレイヤーのチームをランダムにシャッフルします。また、プレイヤー用にRespawn()関数にアクセスするための using { /Fortnite.com/FortPlayerUtilities } を追加します。これはゲーム開始時にプレイヤーをスポーン エリアにテレポートさせるためのもので、後ほど使用します。using { /Fortnite.com/Devices} using { /Fortnite.com/FortPlayerUtilities} using { /Verse.org/Simulation} using { /Verse.org/Random} using { /UnrealEngine.com/Temporary/Diagnostics} triad_infiltration_gameクラス定義に次のフィールドを追加します。MaximumInfiltrators、MaximumAttackers、MaximumDefendersという名前の 3 つの編集可能な整数。MaximumInfiltratorsを 2 に、MaximumAttackersとMaximumDefendersを 4 に初期化します。これらは各チームの最大プレイヤー数を追跡し、チームのバランスを動的に調整するために使用します。これらの数値を使用して、テスト目的で違う数値を試したり、ゲームに面白いバリエーションを作成したりできます。triad_infiltration := class(creative_device): # プレイヤーがチームに参加できない事態を避けるため、 # すべての Maximum(Team) 変数の合計に設定する必要があります。 # Infiltrator チームの最大プレイヤー数。 @editable MaximumInfiltrators:int = 2 # Attacker チームの最大プレイヤー数。 @editable MaximumAttackers:int = 4 # Defender チームの最大プレイヤー数。 @editable MaximumDefenders:int = 4TeamsAndTotalsという名前の変数map。これにより、プレイヤーのチームがそのチームの最大プレイヤー数にマッピングされます。# Infiltrator チームの最大プレイヤー数。 @editable MaximumInfiltrators:int = 2 # Attacker チームの最大プレイヤー数。 @editable MaximumAttackers:int = 4 # Defender チームの最大プレイヤー数。 @editable MaximumDefenders:int = 4 # 最大プレイヤー数に対するチームのマップ。 var TeamsAndTotals:[team]int = map{}Teleportersという名前の編集可能なテレポーターの配列。チームのバランス調整後、プレイヤーをスポーンにテレポートさせるためのテレポーターのリファレンスが保存されます。# 最大プレイヤー数に対するチームのマップ。 var TeamsAndTotals:[team]int = map{} # ゲームが開始されると、チームのスポーンにプレイヤーをテレポートさせるテレポーターの配列。 @editable Teleporters:[]teleporter_device = array{}WeaponGrantersという名前の編集可能なitem_granter_deviceの配列。これには、プレイヤーがスポーンしたときに、チームに基づいて武器を付与するのに必要なアイテム グランターが保存されます。# ゲームが開始されると、チームのスポーンにプレイヤーをテレポートさせるテレポーターの配列。 @editable Teleporters:[]teleporter_device = array{} # 各チームのための武器グランターの配列。 @editable var WeaponGranters:[]item_granter_device = array{}MaybeInfiltrators、MaybeAttackers、MaybeDefendersという名前の 3 つのオプションのteam変数。これらには各チームへの参照が保存されます。これにより、チームが正しく設定されているかどうかを確認できるようになります。# 各チームのための武器グランターの配列。 @editable var WeaponGranters:[]item_granter_device = array{} # Infiltrator チームへの参照。 var MaybeInfiltrators:?team = false # Attacker チームへの参照。 var MaybeAttackers:?team = false # Defender チームへの参照。 var MaybeDefenders:?team = falseTeamsという名前のチームの変数配列。ゲーム内のすべてのチームへの参照を保持します。これを使用すると、ゲームのバランスをとる際に、上記のオプションのチーム変数の設定や、プレイヤーを割り当てるチームの判別ができます。# Infiltrator チームへの参照。 var MaybeInfiltrators:?team = false # Attacker チームへの参照。 var MaybeAttackers:?team = false # Defender チームへの参照。 var MaybeDefenders:?team = false # ゲーム内のすべてのチームの配列。 var Teams:[]team = array{}
ランタイム時にプレイヤーとチームを検索する
OnBegin()で、前に [Experience Settings (エクスペリエンス設定)] で設定した各チームのTeams配列を更新します。fort_team_collectionAPI のGetTeams()関数を使用して、プレイ空間のすべてのチームの配列を取得することができます。OnBegin<override>()<suspends>:void = # すべてのチームを取得します。 set Teams = GetPlayspace().GetTeamCollection().GetTeams()MaybeInfiltrators、MaybeAttackers、MaybeDefendersをTeams配列内のそれぞれのチームに割り当てて、各チームへの参照を保存します。# 後で参照できるようにチームを保存します。 set MaybeInfiltrators = option{Teams[0]} set MaybeAttackers = option{Teams[1]} set MaybeDefenders = option{Teams[2]}- ここで、3 つのチームすべてが正しく設定されているかどうかを確認します。
MaybeInfiltrators、MaybeAttackers、MaybeDefendersはそれぞれoptionであるため、これらに実数値が含まれているかどうかを確認することで、この確認が可能です。含まれている場合、TeamsAndTotalsの各チームの値をそのチームの最大プレイヤー数に設定します。if: Infiltrators := MaybeInfiltrators? Attackers := MaybeAttackers? Defenders := MaybeDefenders? Logger.Print("Found all three teams") set TeamsAndTotals[Infiltrators] = MaximumInfiltrators set TeamsAndTotals[Attackers] = MaximumAttackers set TeamsAndTotals[Defenders] = MaximumDefenders Logger.Print("Set all three teams in TeamsAndTotals") else: Logger.Print("Couldn't find all teams, make sure to assign the correct teams in your island settings.") -
triad_infiltration_gameコードは次のようになるはずです。triad_infiltration_game := class(creative_device): Logger:log = log{Channel := triad_infiltration_log_channel} # プレイヤーがチームに参加できない事態を避けるため、 # すべての Maximum(Team) 変数の合計に設定する必要があります。 # Infiltrator チームの最大プレイヤー数。 @editable MaximumInfiltrators:int = 2 # Attacker チームの最大プレイヤー数。 @editable MaximumAttackers:int = 4 # Defender チームの最大プレイヤー数。 @editable MaximumDefenders:int = 4 # ゲームが開始されると、チームのスポーンにプレイヤーをテレポートさせるテレポーターの配列。 @editable Teleporters:[]teleporter_device = array{} # 各チームのための武器グランターの配列。 @editable var WeaponGranters:[]item_granter_device = array{} # 各チームのプレイヤー スポナーの配列。 @editable PlayersSpawners:[]player_spawner_device = array{} # Infiltrator チームへの参照。 var MaybeInfiltrators:?team = false # Attacker チームへの参照。 var MaybeAttackers:?team = false # Defender チームへの参照。 var MaybeDefenders:?team = false # ゲーム内のすべてのチームの配列。 var Teams:[]team = array{} # 最大プレイヤー数に対するチームのマップ。 var TeamsAndTotals:[team]int = map{} OnBegin<override>()<suspends>:void = # すべてのチームを取得します。 set Teams = GetPlayspace().GetTeamCollection().GetTeams() # Save the teams to later reference them set MaybeInfiltrators = option{Teams[0]} set MaybeAttackers = option{Teams[1]} set MaybeDefenders = option{Teams[2]} if: Infiltrators := MaybeInfiltrators? Attackers := MaybeAttackers? Defenders := MaybeDefenders? Logger.Print("Found all three teams") set TeamsAndTotals[Infiltrators] = MaximumInfiltrators set TeamsAndTotals[Attackers] = MaximumAttackers set TeamsAndTotals[Defenders] = MaximumDefenders Logger.Print("Set all three teams in TeamsAndTotals") else: Logger.Print("Couldn't find all teams, make sure to assign the correct teams in your island settings.") -
スクリプトを Visual Studio Code に保存し、メイン メニューの Verse で [Build Verse Scripts (Verse スクリプトをビルド)] をクリックして、レベル内の Verse で作成した仕掛けを更新します。
-
UEFN ツールバーの [Launch Session (セッションを起動)] をクリックし、レベルをプレイテストします。レベルをプレイテストする場合、3 チームすべてが
TeamsAndTotalsでセットアップされる必要があります。この動作をログで確認します。
次のステップ
このチュートリアルの 次のステップ では、ゲーム開始時にプレイヤーのチームのバランスを非対称にする方法を説明します。