Verse Detonation テンプレートは、2 つのチームが爆発地点でその設置と解除を競って戦うゲームの作成方法を示しています。
このチュートリアルでは、Verse の仕掛けとマップ インジケーターの仕掛けなどの基本的な仕掛けを使用して、条件に応じてビーコンを表示するなどのゲームプレイ メカニズムを実行します。
このテンプレートは、次のような Verse の概念を示しています。
列挙型
並列処理
race
待機
概要
次に、この島を理想的な順序で作り直すのに必要な手順の概要を示します。
新規プロジェクトを作成し、島設定を変更してゲームを設定します。
仕掛けを設定します。
Verse スクリプトを追加します。
新規プロジェクトを作成してゲームを設定する
UEFN を開き、空のプロジェクトを作成します。
[Outliner (アウトライナー)] で [IslandSettings] の仕掛けを選択し、[User Options - Game Rules (ユーザー オプション - ゲーム ルール)] を見つけます。
以下のように [User Options] を変更します。
| オプション | 値 | 説明 |
|---|---|---|
Teams (チーム) | チーム インデックス 2 | プレイヤーが 2 人のチームに分けられます。 |
Total Rounds (合計ラウンド) | 5 | ゲームが終了するまでに 5 ラウンドあります。 |
Allow Spectating Other Teams (他のチームの観戦を許可) | 不許可 | プレイヤーは他のチームを観戦することはできません。 |
無限の建築素材 | False (オフ) | ゲーム中、プレイヤーが所有できる建築素材の数が無限になりません。 |
Building Can Destroy Environment (建築物が環境オブジェクトを破壊できる) | False (オフ) | プレイヤーがビルドした構造物を配置した際に、その構造物が重なっている環境の部分を破壊しなくなります。 |
Environment Damage (環境ダメージ) | Off (オフ) | プレイヤーがゲーム中、環境にダメージを与えることができなくなります。 |
Pickaxe Destruction (ツルハシでの破壊) | None (なし) | つるはしが環境や建物にダメージを与えなくなります。 |
Allow Manual Respawning (手動リスポーンを許可) | False (オフ) | プレイヤーが、ゲーム中にリスポーン メニュー オプションを使用できなくなります。 |
Use Team Score (チーム スコアを使用) | True (オン) | ゲーム内の各チームは、そのプレイヤーの合計を通じて統計を取得します。 |
仕掛けを設定する
このチュートリアルでは、次の仕掛けを使用します。
爆破 x 8
時限式破壊オブジェクト × 2
マップ インジケータ x 4
エンド ゲーム x 1
~ x プレイヤー スポーン パッド
Verse x 1
爆破仕掛け
爆破仕掛けを使用して、起爆タイマーを作動させます。 マップの反対側に、4 つの爆破仕掛けのグループをコピーして配置します。
この仕掛けを設定するには、[User Options (ユーザー オプション)] を次のように設定します。
| オプション | 値 | 説明 |
|---|---|---|
Can Be Damaged | False (オフ) | この仕掛けはプレイヤーからのダメージを受けなくなります。 |
時限式破壊オブジェクト
時限式破壊オブジェクトの仕掛けは、各地点の起爆装置として機能します。 爆破仕掛けの両方のグループに時限式破壊オブジェクトの仕掛けを配置します。
この仕掛けを設定するには、[User Options (ユーザー オプション)] を次のように設定します。
| オプション | 値 | 説明 |
|---|---|---|
Time (時間) | 30 | 目標のタイマーの長さを決定します。 |
Start Score (起動時のスコア) | 2 | 起動していないタイマーを正常に開始するために付与するスコアの量を設定します。 |
Stop Score (停止時のスコア) | 5 | 動いているタイマーの停止に成功した後に与えられるスコアの量を決定します。 |
Completed Score (タイマー ゼロ時のスコア) | 3 | タイマーが完了したときに付与されるスコアの量を設定します。 |
Timer Label Text Style (タイマー ラベルのテキスト スタイル) | Bold Orange (太字オレンジ) | カウントダウン表示とカスタム テキストのスタイルを設定します。 |
Start Team Filter (起動チーム フィルタ) | チーム インデックス 1 | 未起動のタイマーを開始可能なチームを決定します。 |
Start Interact Text (起動時のインタラクト テキスト) | Arm Bomb (爆弾を設置しよう) | 未起動のタイマーを開始可能なプレイヤー向けのプロンプトとして表示するカスタム テキストを設定します。 |
Start Interact Time (起動時のインタラクト時間) | 5 | 未起動のタイマーを開始するのに必要なインタラクションの長さを決定します。 |
Stop Team Filter (停止チームフィルタ) | チーム インデックス 2 | アクティブなタイマーを停止できるチームを決定します。 |
Stop Interact Text (停止時のインタラクト テキスト) | Disarm Bomb (爆弾を解除しよう) | アクティブなタイマーを停止可能なプレイヤー向けのプロンプトとして表示するカスタム テキストを設定します。 |
Stop Interact Time (停止時のインタラクト時間) | 5.0 | アクティブなタイマーを停止するのに必要なインタラクションの長さを決定します。 |
Timer Sound Distance (タイマーの音が届く距離) | Whole Map (マップ全体) | タイマーの音をマップ上のどこかでローカライズするか、または聞こえるようにするかを決定します。 |
マップ インジケーターの仕掛け
マップ インジケータの仕掛けを使用すると、ミニマップ上にカスタム マーカーを作成できます。 各爆発地点の上に、各チームに 1 つずつ 2 つのマップ インジケーターの仕掛けを配置します。
この仕掛けを設定するには、[User Options (ユーザー オプション)] を次のように設定します。
| オプション | 値 | 説明 |
|---|---|---|
Icon Color (アイコンの色) | 色を選択 | 表示されるアイコンの色を設定します。 各チームを表す色を選択してください。 |
テキスト | 爆弾 A - 爆弾 B | マップ インジケーターの仕掛けの一つのペアに爆弾 A ともう一つの爆弾 B の名前を付けます。 |
エンド ゲームの仕掛け
爆弾処理に成功した場合、または 30 秒が経過して Verse スクリプトを介して爆発した場合は、エンド ゲームの仕掛けによりラウンドを終了します。
この仕掛けを設定するには、[User Options (ユーザー オプション)] を次のように設定します。
| オプション | 値 | 説明 |
|---|---|---|
Winning Team (勝利チーム) | Activating Team (チームを起動中) | 仕掛けをアクティブにしたチームがゲームに勝利します。 |
終了の対象 | ラウンド終了 | この仕掛けがゲーム ラウンドを終了します。 |
プレイヤー スポーン パッドの仕掛け
チームのプレイヤー スポーン パッドの仕掛けをマップの反対側にグループ化します。 各チームには独自のスポナーがあります。チーム 1 は爆弾の設置を行い、チーム 2 は爆弾の処理を行います。 チームの役割はラウンドごとに入れ替わります。
この仕掛けを設定するには、[User Options (ユーザー オプション)] を次のように設定します。
| オプション | 値 | 説明 |
|---|---|---|
Player Team (プレイヤーのチーム) | チーム インデックス 1 - 2 | スポーン パッドの一つのセットはチーム インデックス 1 に設定され、もう一つのセットはチーム インデックス 2 に設定されます。 |
Verse スクリプトを追加する
まず @editable 関数で仕掛けを参照し、次の Verse スクリプトを追加します。
コードは、記述されている順にコピーできます。 わかりやすくするため、スクリプト内にコメントが追加されています。
# enum to determine the state of the bombs
bomb_state<public>:= enum {AllUnarmed, BombAArmed, BombBArmed}上記のコードは、爆弾の状態を追跡するための列挙型を定義しています。
search_and_destroy := class(creative_device):
Logger:log = log{Channel:=log_search_and_destroy}
@editable
TimedObjectiveA: timed_objective_device = timed_objective_device{}
@editable
@editable で仕掛けを参照できます。
# Runs when the device is started in a running game
OnBegin<override>()<suspends>:void=
# The race expression is used to run a block of two or more async expressions concurrently (simultaneously). When the fastest expression completes, it "wins the race".
# https://www.fortnite.com/en-US/creative/docs/uefn/race-in-verse
race:
コードの最初のセクションは、爆弾 A と爆弾 B のどちらが最初に設置されたのかを判断するための race を使用した並列処理を示しています。
block:
# Wait for Bomb B to be armed
ArmingPlayer:= TimedObjectiveB.StartedEvent.Await()
Print("Bomb B Armed",?Duration:=5.0)
上記のコードは、時限式破壊オブジェクトが完了するか停止するまでスクリプトが待機する並列処理を示しています。
# Disable the unarmed Beacons and enable the Beacon over the armed bomb
UpdateBeacons():void=
BombABeaconArm.Disable()
BombBBeaconArm.Disable()
上記のコードは、設置された爆弾に応じてビーコンの状態を更新します。
BombDetonated(Agent:agent):void=
Print("Bomb Detonated", ?Duration:=5.0)
# Determine which set barrels should explode
if:
BombState = bomb_state.BombAArmed
上記のメソッドは、時限式破壊オブジェクトの仕掛けが完了すると呼び出されます。 どちらの爆弾が爆発してゲームを終了するかを決定します。
ExplodeBarrels(Barrels:[]explosive_device, Agent:agent):void=
for (Barrel : Barrels):
Barrel.Explode(Agent)
上記の for ループは、正しい爆発地点でそれぞれの樽を爆発させます。
Verse の仕掛け
Verse スクリプトをコンパイルし、その仕掛けをコンテンツ ドロワーで見つけます。 Verse の仕掛けをマップの非表示のエリアにドラッグし、設定をカスタマイズします。
この仕掛けを使用し、ディレクト イベント バインディングを必要な仕掛けにリンクすると、Verse スクリプトがそれらの仕掛けを参照できます。
仕掛けの [Details (詳細)] パネルで、上の画像のように、参照される仕掛けそれぞれに合うように設定を構成します。
この仕掛けを設定するには、[User Options (ユーザー オプション)] を次のように設定します。
| オプション | 値 | 説明 |
|---|---|---|
TimeObjectiveA | 時限式破壊オブジェクト BombSiteA | 時限式破壊オブジェクトの仕掛けを爆発地点にリンクします。 |
TimeObjectiveB | 時限式破壊オブジェクト BombSiteB | 時限式破壊オブジェクトの仕掛けを爆発地点にリンクします。 |
ExplosiveBarrelsA | 0 - BarrelBombSiteA_1 | 爆発の仕掛けをリンクします。 |
ExplosiveBarrelsA | 1 - BarrelBombSiteA_2 | 爆発の仕掛けをリンクします。 |
ExplosiveBarrelsA | 2 - BarrelBombSiteA_3 | 爆発の仕掛けをリンクします。 |
ExplosiveBarrelsA | 3 - BarrelBombSiteA_4 | 爆発の仕掛けをリンクします。 |
ExplosiveBarrelsB | 0 - BarrelBombSiteB_1 | 爆発の仕掛けをリンクします。 |
ExplosiveBarrelsB | 1 - BarrelBombSiteB_2 | 爆発の仕掛けをリンクします。 |
ExplosiveBarrelsB | 2 - BarrelBombSiteB_3 | 爆発の仕掛けをリンクします。 |
ExplosiveBarrelsB | 3 - BarrelBombSiteB_4 | 爆発の仕掛けをリンクします。 |
EndGameDevice | End Game Device2 | エンド ゲームの仕掛けをリンクします。 |
BombAMapIndicators | 0 - Map_Team1_BombsiteA | マップ インジケーターの仕掛けを爆発地点にリンクします。 |
BombAMapIndicators | 1 - Map_Team2_BombsiteA | マップ インジケーターの仕掛けを爆発地点にリンクします。 |
BombBMapIndicators | 0 - Map_Team1_BombsiteB | マップ インジケーターの仕掛けを爆発地点にリンクします。 |
BombBMapIndicators | 1 - Map_Team2_BombsiteB | マップ インジケーターの仕掛けを爆発地点にリンクします。 |
BombABeaconArm | BeaconArmBombSiteA | サイト A の爆弾を設置します。 |
BombABeaconDisarm | BeaconDisarmBombSiteA | サイト A の爆弾を解除します。 |
BombBBeaconArm | BeaconArmBombSiteB | サイト B の爆弾を設置します。 |
BombBBeaconDisarm | BeaconDisarmBombSiteB | サイト B の爆弾を解除します。 |
[Launch Session (セッションを開始)] を選択して、完成したレベルをテストします。