一連の消えるプラットフォームは、障害物コースのようなプラットフォーミング ゲーム モードの中心です。 このようなプラットフォームでは、プレイヤーはリズムを取って一連のプラットフォーム間をジャンプする必要があり、そうしなければ落下して最初からやり直さなければなりません。
このチュートリアルでは、Unreal Editor for Fortnite (UEFN) において、Verse で作成した 1 つの仕掛けで順番に現れて消える一連のプラットフォームを作成する方法を学習します。
使用する Verse 言語機能
array:array 型により、すばやくアクセスするとともにコードの重複を防ぐためにプラットフォームの参照をまとめて格納できます。
loop:プラットフォームの出現と消失のサイクルは、ゲームの開始時に始まり、継続的に実行される必要があります。 この例では、Verse の
loop式を使用してこのような動作を作成する方法を示します。for:
for式により、配列内の各プラットフォームをイテレートできます。
使用する Verse API
Sleep():Sleep()API により、プラットフォームを非表示および表示状態にする時間を選択できます。編集可能なプロパティ:Verse で作成した仕掛けの 7 つのプロパティが UEFN に公開されており、エディタでカスタマイズできます。3 つはプラットフォームの動作の遅延、4 つはプラットフォームの仕掛けの参照です。
手順
次の手順に従って、周期的に消えて現れる一連のプラットフォームを設定する方法を学習します。 完全なスクリプトは、参照用としてこのガイドの末尾に記載されています。
レベルを設定する
このチュートリアルでは、Verse スターター テンプレートを開始点として使用します。 開始するには、Verse の仕掛け機能の例から新しいプロジェクトを初期化します。
この例では、次の小道具と仕掛けを使用しています。
プレイヤー スポーン パッドの仕掛け × 1:この仕掛けにより、ゲームの開始時にプレイヤーがスポーンする場所を定義します。
クリエイティブ小道具 × 6:クリエイティブ小道具には、プラットフォームの可視性とコリジョンを切り替える
Hide()やShow()など、Verse で呼び出すことができる動作がいくつかあります。 このチュートリアルでは、プレイヤーが操作可能なプラットフォームとして Airborne Hoverplatform A を使用しますが、自分の体験のニーズに合わせて自由に変更可能です。
次の手順に従ってレベルを設定します。
シーンに Airborne Hoverplatform A を 1 つ追加します。 プレイヤーが消えるプラットフォームから時間内に飛び降りなければ落下するよう、フロアの上にこれを設置します。 アウトライナーで、プラットフォームに「SynchronizedPlatform1」という名前を付けます。
プラットフォームを何回か複製してラインを作成します。 次に、プレイヤーが開始させたいプラットフォームにプレイヤー スポーン パッドの仕掛けを設置します。 完成した設定は次のようになります。
仕掛けを作成する
この例では、Verse で作成した仕掛けを使用し、プラットフォームの可視性を切り替えるための動作を定義します。 Verse を使用してこのような仕掛けを作成するには、次の手順に従います。
「platform_series」という名前の新しい Verse の仕掛けを作成します。 Verse で新しい仕掛けを作成する方法については、「Verse を使用して独自の仕掛けを作成する」を参照してください。
仕掛け platform_series をコンテンツ ブラウザからレベルにドラッグします。
UEFN で仕掛けのプロパティを編集する
このセクションでは、次の仕掛けのプロパティをエディタでカスタマイズできるように UEFN に公開する方法を示します。
プラットフォームを非表示にする/表示する時間を格納する「
HeadStart」、「AppearDelay」、「DisappearDelay」という名前の 3 つの浮動定数。レベルに設置したクリエイティブ オブジェクトに対する仕掛けの参照。
前のセクションで作成した仕掛け platform_series からこれらのプロパティを公開するには、次の手順に従います。
Verse Explorer を開き、platform_series.verse をダブルクリックして Visual Studio Code でスクリプトを開きます。
platform_seriesクラスの定義に次のフィールドを追加します。「
HeadStart」という名前の編集可能な浮動小数値。 これは、プラットフォームが現れ始めてから消え始めるまでの待ち時間を秒単位で表します。 この値を「2.5」、つまり 2.5 秒に初期化します。Verse# How long to wait in seconds after platforms start appearing # before they start disappearing. @editable HeadStart:float = 2.5「
AppearDelay」という名前の編集可能な浮動小数値。 これは、次のプラットフォームが現れるまでの待ち時間を秒単位で表します。 この値を「1.0」、つまり 1 秒に初期化します。Verse# How long to wait in seconds before the next platform appears. @editable AppearDelay:float = 1.0「
DisappearDelay」という名前の編集可能な浮動小数値。 これは、次のプラットフォームが消えるまでの待ち時間を秒単位で表します。 この値を「1.25」、つまり 1.25 秒に初期化します。Verse# How long to wait in seconds before the next platform disappears. @editable DisappearDelay:float = 1.25「
DisappearingPlatform」という名前の編集可能なcreative_prop。 これは、消えたり現れたりするレベル内のプラットフォームです。 コードにはまだレベル内のこのオブジェクトへの参照がないため、空のアーキタイプcreative_prop{}を使用してこれをインスタンス化します。 後で、この参照を浮いているプラットフォームに割り当てます。Verse# The in-level platform that disappears and reappears. @editable DisappearingPlatform:creative_prop = creative_prop{}
platform_seriesクラスのフィールドは次のようになります。Verse# A Verse-authored creative device that can be placed in a level platform_series := class(creative_device): # How long to wait in seconds after platforms start appearing # before they start disappearing. @editable HeadStart:float = 2.5 # How long to wait in seconds before the next platform appears. @editable@editable属性を使用すると、スクリプトからエディタにAppearDelayなどの値を公開するのに役立ちます。 これにより、毎回 Verse コードを再ビルドすることなく値をカスタマイズできるようになり、すばやくイテレートしてゲームプレイ体験に合う値を見つけることができます。Visual Studio Code にスクリプトを保存します。
UEFN ツールバーで、[Verse] をクリックして [Build Verse Code (Verse コードをビルド)] をクリックし、レベルの仕掛け platform_series を更新します。
UEFN の [Outliner] パネルで仕掛け platform_series を選択し、[Details] パネルを開きます。
Platform Series の [Details] パネルで、オブジェクト ピッカーをクリックしてビューポートのプラットフォームを選択し、DisappearingPlatform を SynchronizedPlatform1 (レベルに追加したクリエイティブ小道具) に設定します。
プラットフォームを非表示にする/表示する
レベルと最初のプラットフォームを設定したら、プラットフォームを表示する/非表示にする機能を追加します。 仕掛け platform_series にこのような動作を追加するには、次の手順に従います。
creative_propクラスには、可視性を切り替えるHide()とShow()という 2 つのメソッドがあります。 Visual Studio Code に戻り、OnBegin()でHide()を呼び出し、次にDisappearingPlatformでShow()を呼び出します。Verse# Runs when the device is started in a running game OnBegin<override>()<suspends>:void= # Hide the platform. DisappearingPlatform.Hide() # Show the platform. DisappearingPlatform.Show()このコードを実行すると、
Hide()とShow()の呼び出しが直後に発生するため、プラットフォームが消えて再表示されることはありません。プラットフォームをより長く表示/非表示状態に維持するには、
Sleep()を使用してHide()またはShow()を呼び出すときの遅延を追加できます。Sleep()関数によってルーチンの実行が一時停止されるため、この関数にfloat引数を渡して実行を一時停止する時間 (秒) を指定します。 各Hide()およびShow()呼び出しの前に、先ほど定義したDisappearDelayを渡してSleep()を呼び出します。Verse# Runs when the device is started in a running game OnBegin<override>()<suspends>:void= # Hide the platform. DisappearingPlatform.Hide() # Wait for DisappearDelay seconds. Sleep(DisappearDelay) # Show the platform.このコードを実行した場合、
プラットフォームは 1 秒 (DisappearDelayで定義した時間) 非表示になった後、ゲームが終わるまで表示されるようになりました。Sleep()関数は、asynchronous コンテキストでのみ呼び出し可能です。OnBegin()メソッドはsuspends指定子を持っているため、すでに非同期コンテキストであるため、これ以上何もする必要はありません。suspends指定子の詳細については、「指定子と属性」を参照してください。
複数のプラットフォームを非表示にする/表示する
前の手順のコードは、非表示にするレベルのすべてのプラットフォームに対して繰り返すことができ、配列を作成してすべての仕掛けの参照を保存すると、より効率的です。 これによって、配列内で各プラットフォームをイテレートできるようになり、Verse の仕掛けを複数回複製することなく、各プラットフォームでコードを実行できます。 複数のプラットフォームを非表示にする/表示するには、次の手順に従います。
platform_seriesクラス定義で、DisappearingPlatformフィールドを「DisappearingPlatforms」という名前のcreative_propの配列に変更します。 この配列を使用して順番にプラットフォームに対する操作を繰り返します。 デフォルト値array{}(空の配列) で変数を初期化します。Verse# The in-level platforms that disappear and reappear in sequence. @editable DisappearingPlatforms:[]creative_prop = array{}for式を使用して配列の各要素をイテレートすることができます。for式は、X -> Yパターンを使用してインデックスと値のペアを示します。 インデックスは左部分 (X) に、値は右部分 (Y) に結合されます。 このケースでは、Xはプラットフォームの番号/インデックス、Yは配列から取得した各プラットフォームの参照になっています。 最初に、各要素をイテレートするためのfor式を作成し、変数PlatformNumberの各番号のインデックスを取得します。~~~(verse) # 実行中のゲームで仕掛けが開始されたときに実行します OnBegin<override>()<suspends>:void= for: PlatformNumber -> DisappearingPlatform:DisappearingPlatforms do: ~~~
プラットフォームの番号を出力し、
Hide()を呼び出してプラットフォームを非表示にします。 次にDisappearDelayの秒数の間、Sleep()を実行します。Verse# For each platform in DisappearingPlatforms, make it invisible and sleep. for: PlatformNumber -> DisappearingPlatform:DisappearingPlatforms do: # Hide the platform DisappearingPlatform.Hide() Print("Platform {PlatformNumber} is now hidden") Sleep(DisappearDelay)プラットフォームを表示するには、1 つ目の次に 2 つ目の
for式を使用します。 同様にDisappearingPlatformsの各プラットフォームをイテレートしますが、今回はプラットフォームを表示するためにShow()を呼び出し、AppearDelayの秒数の間、Sleep()を実行します。~~~(verse) # DisappearingPlatforms のプラットフォームごとに、表示してスリープにします。 for: PlatformNumber -> DisappearingPlatform:DisappearingPlatforms do: # プラットフォームを表示します。 DisappearingPlatform.Show() Print("Platform {PlatformNumber} is now visible") Sleep(AppearDelay) ~~~
コードを記述する際に、再利用するコードを別の関数に配置することをお勧めします。 これにより、別のコンテキストからコードを呼び出し、同じコードを何度も記述する必要がなくなります。 体験に応じて、さまざまな状況でプラットフォームを非表示にしたり表示したりすることが必要になる場合があります。そのため、これらを処理する関数を作成します。 「
HideAllPlatforms()」と「ShowAllPlatforms()」という名前の 2 つの新しい関数をplatform_seriesクラス定義に追加します。 プラットフォームの非表示を処理するfor式をHideAllPlatforms()に移動し、プラットフォームの表示を処理する式をShowAllPlatforms()に移動します。Sleep()関数を使用している場合は、これらの関数を非同期にする必要があるため、それぞれに<suspends>モディファイアを追加します。 次にOnBegin()でHideAllPlatforms()を呼び出し、次にShowAllPlatforms()を呼び出します。Verse# Runs when the device is started in a running game OnBegin<override>()<suspends>:void= HideAllPlatforms() ShowAllPlatforms() HideAllPlatforms()<suspends>:void= # For each platform in DisappearingPlatforms, make it invisible and sleep. for: PlatformNumber -> DisappearingPlatform:DisappearingPlatforms do:現状では、このコードは 1 回だけ実行されます。 ゲームの実行中にプラットフォームが消えて再び現れる動作が続くようにするには、loop 式を使用してこの動作を繰り返します。 これを処理にするには、
HideAllPlatforms()とShowAllPlatforms()の呼び出しを含むOnBegin()にloop式を追加します。この例では、ゲームの実行中にプラットフォームの可視性を切り替え続けます。したがって、break式を追加してloopを終了する必要はありません。Verse# Runs when the device is started in a running game OnBegin<override>()<suspends>:void= loop: # Hide all platforms. HideAllPlatforms() # Show all platforms. ShowAllPlatforms()このコードを実行した場合、プラットフォームはすべて順番どおりに消えてから同じ順番で再び現れ、ゲームが終わるまでその動作が繰り返されます。
コードを保存してコンパイルします。 UEFN の [Outliner] パネルで仕掛け platform_series を選択し、[Details] パネルを開きます。
[Details] パネルの DisappearingPlatforms で、レベル内の各プラットフォームの配列要素を追加します。 [Add Element] ボタンで新しい要素を配列に追加し、オブジェクト ピッカーをクリックして、ビューポートでクリエイティブ小道具を選択します。 この配列の順序が、イテレートする順序と一致することを確認してください。
このコードを実行した場合、プラットフォームはすべて順番どおりに消えてから同じ順番で再び現れ、ゲームが終わるまでその動作が繰り返されます。
消えて再び現れるプラットフォームを同期させる
プレイヤーがタイル間をジャンプするときにさらに緊迫感を持たせるには、後続のプラットフォームがまだ現れつつある状態のときにプラットフォームが消え始めるようにします。 そうなると、プレイヤーは急いでシリーズ間を移動しなければならなくなり、急がなければ落下することになります。 このような動作を作成するには、プラットフォームが消える前にプレイヤーがスタートを切って次のプラットフォームに飛び乗れるよう、両方のルーチン (ShowAllPlatforms() と HideAllPlatforms()) を同時に実行し、後者が前者に後れを取るようにしなければなりません。
プラットフォームをすべて同時に非表示にする/表示するには、次の手順に従います。
HideAllPlatforms()とShowAllPlatforms()を同時に実行するには、sync 式を使用します。sync式は、コード ブロックで 2 つ以上の async 式を同時に実行し、その式のすべてが完了するまで待ってから次に進みます。OnBegin()のloop式内にあるHideAllPlatforms()とShowAllPlatforms()に、sync式を追加します。Verse# Runs when the device is started in a running game OnBegin<override>()<suspends>:void= loop: # Run both expressions concurrently using sync. sync: # Hide all platforms. HideAllPlatforms() # Show all platforms. ShowAllPlatforms()このコードをこのまま実行した場合、プラットフォームの非表示と表示が同時に行われるようになります。 これは望む結果ではないので、プラットフォームが消えるのを少し遅らせる必要があります。 プレイヤーが先にスタートを切れるようにするには、
Sleep()を使用してHeadStart値を渡します。sync式は、コード ブロックで式のすべてを同時に実行するため、block式を使用してSleep()とHideAllPlatforms()をネストする必要があります。Sleep()とHideAllPlatforms()をカバーするblock式を追加します。 これで、sync 式で 2 つの式が実行されます。 最初の式がShowAllPlatforms()を呼び出し、次の式がSleep()を呼び出して、その後にHideAllPlatforms()を呼び出します。Verse# Runs when the device is started in a running game OnBegin<override>()<suspends>:void= loop: # Run both expressions concurrently using sync. sync: block: Sleep(HeadStart) # Hide all platforms. HideAllPlatforms() # Show all platforms.スクリプトを保存し、[Verse] をクリックして [Build Verse Code] をクリックし、コードをコンパイルします。
UEFN ツールバーの [Launch Session (セッションを開始)] をクリックしてレベルをプレイテストします。
ここでレベルをプレイテストすると、後続のプラットフォームが再び現れつつある中でプラットフォームが順番に消え始め、ゲームの実行中はこのパターンが繰り返し続けられます。
完全なスクリプト
次のコードは、順番に現れて消える一連のプラットフォームを作成するための完全なスクリプトです。
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
# See https://dev.epicgames.com/documentation/en-us/uefn/create-your-own-device-in-verse for how to create a verse device.
# A Verse-authored creative device that can be placed in a level
platform_series := class(creative_device):
# How long to wait in seconds after platforms start appearing
応用編
このチュートリアルでは、Verse を使用して、ゲームの実行中に一連のプラットフォームの可視性を切り替え続ける仕掛けを作成する方法を学習しました。
ここで学習したことを活かして以下を試してみてください。
プラットフォームが現れて消える順番を変更する。
同じように、小道具移動装置の仕掛けなどの他の仕掛けタイプで周期的に関数を呼び出す。