【UEFN】Verseの始め方と基本操作|VScodeの使い方

UEFN上でVerseを立ち上げる方法
画面左上の「Verse」→「Verse Explorer」にチェックを入れるとタブが表示される。
「Verse Explorer」タブから自身のプロジェクト名の書かれた親ファイルを選択し右クリック →「Add new Verse file to project」をクリック
「Verse Device」テンプレートを選択。Device Nameを設定して「作成」ボタンを押す。
例:「Test_device」
「Verse Explorer」タブに新しく作成した「Test_device.verse」のようなファイルが追加されているはずです。ダブルクリックして展開しましょう。
Visual Studio Code (VScode)でVerseコードを書くための基本操作
【Verse】簡単な基本操作の流れ
- フルコード
-
using { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics } #(ハッシュタグ)を先頭に付けるとメモが書ける Test_device := class(creative_device): OnBegin<override>()<suspends>:void= Print("Hello, world!") Print("2 + 2 = {2 + 2}")
#(ハッシュタグ)を先頭に付けるとメモが書ける
#(ハッシュタグ)を先頭に付けるとコードに影響しないメモを書くことができます。初期テンプレートの状態でも、公式が説明書きをメモしてくれていますよね。メモなので不要であれば消して構いません。
コードの冒頭で、使いたい機能の種類をあらかじめ宣言してあげる必要があります。デフォルトでは下記の3種類が書かれています。
using { /Fortnite.com/Device }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
例えば、一番上のDeviceの部分で「Deviceの機能を使うよ」と前もって宣言することで、はじめてDevice(仕掛け)の要素をVerse内でいじることができるわけですね。
要するに、ここから先のコードは新しい仕掛け(Device)を作るためのものです。フォートナイトに標準で用意されている仕掛けとは別に、自分でオリジナルの仕掛けを作ることができるわけですね。
Test_device := class(creative_device):
OnBegin<override>()<suspends>:void=
Print("Hello, world!")
Print("2 + 2 = {2 + 2}")
デフォルトではこのようなコードが書かれていると思います。私の場合は「Test_device」という名前の新しい仕掛け(Device)を作ろうとしているわけです。
また、その中身としては「OnBegin(開始時)」というコードの下を見ていくことで分かります。現状 Print関数が動作して、テキスト情報が出力されるだけのシンプルな機能になっています。
今回はデフォルトの状態のまま、次のステップへ進みゲーム内で動作を確認していきます。
VScodeでコードを書き終わったらUEFNに戻ってきて「Verse」→「Verseコードをビルド」をクリックします。そうすると変更が反映され、エラーがなければVerseのマークに緑色のチェックマークが付きます。
※問題がある場合は、赤色の警告マークが出るのでコードを修正する必要があります。
Verseで自作した仕掛け(Device)もフォートナイト標準のデバイスと同じように、レベル内に配置して使うことができます。
コンテンツドロワーから、自身のプロジェクト名が書かれたフォルダの中を確認してみましょう。すると新しく「Test_device (Verseクラス)」というようなデータが追加されていると思います。
早速、ドラッグ&ドロップしてレベル内に配置してみましょう。コンピューターのような見た目をしています。これが自作の仕掛けです。
「詳細タブ」→「ユーザーオプション」→「Visible in Game」のチェックを外します。チェックを入れたままの状態だとゲーム中に見えてしまうので、外して見た目を非表示にした方がよいでしょう。
※「Enable At Game Start」はゲーム開始時に有効化する項目です。オンのまま使っていきます。
「セッションを開始」ボタンを押してテストプレイしてみましょう。
ゲームを起動すると画面左上に一瞬メッセージが表示されます。
早すぎて見逃した方は「M」キーを押して「ログ」の項目を確認してみましょう。すると過去の動作履歴を確認することができます。
Hello, world!
2 + 2 = 4
というような内容が書かれていると思います。これがPrint関数の機能です。しっかりと動作していますね。
【Verse】EXPRORERタブ内の digest.verseファイルとは
VScodeで、EXPLORERタブ内に「Assets.digest.verse」「Verse.digest.verse」「Fortnite.digest.verse」というようなファイルがあります。
これらのファイルは「VSCodeがVerseのコードを理解しやすくするために用意された辞書みたいなもの」 です。

どういうこと?
VSCodeでは、関数の説明がポップアップで出たり、コード補完(候補が出る機能) がありますよね?そのためには、コードの中にどんな関数や変数があるのか、事前に知っておく必要があります。
その「事前に用意された情報(辞書)」を保存しているのが、○○.digest.verse
というファイルです。

機械だけではなく、私たち人間もこの辞書を覗いてみることで、Verseコードでどんなことが出来るのかを確認することができます。
【Verse】digest.verseファイル内で検索する方法
例:Print
検索内容がヒットしたら「Enter」キーを押すことで順番に見ていくことができます。
【Verse】Print関数の使い方
Print関数で出来ること
「Verse.digest.verse」ファイルで「Print」と検索すると以下のような内容が書かれています。
Print<native><public>(Message:string, ?Duration:float = external {}, ?Color:color = external {})<transacts>:void
「Duration」は時間の長さを表す型です。そのためPrint関数には、表示時間の調節を行う機能があることが分かります。
また「Color」は色ですね。そのためPrint関数には、表示されるテキストの色を変更する機能もあることが分かります。
では実際に、表示されるテキストの時間や、色の調節をやっていきましょう。
Print関数でテキストの表示時間と色の変更をする方法
- フルコード
-
using { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics } using { /Verse.org/Colors/NamedColors } Test_device := class(creative_device): OnBegin<override>()<suspends>:void= Print("Hello, world!", ?Duration:=5.0, ?Color:= Red) Print("2 + 2 = {2 + 2}")
using { /Verse.org/Colors/NamedColors }
上記のコードを新しく追加しました。理由はPrint関数で色の機能(Color)を使うためです。「Color機能を使うよ」という宣言をコードの序盤でしておく必要があるわけですね。
Print("Hello, world!", ?Duration := 10.0, ?Color := Red)
上記の部分を新しく追加しました。これによって「Hello, world!」というテキストが「10秒間」「赤色」で表示されるようになるわけですね。
コードの変更が完了したら、実際にテストプレイをして確認してみましょう。
「Verse変更内容をプッシュ」と「変更をプッシュ」の違い
これまでは「変更をプッシュ」ボタンでテストプレイを行ってきましたが、Verseを使い始めると「Verse変更内容をプッシュ」というボタンが新しく表示されます。どちらのボタンでもテストプレイが可能です。

「変更をプッシュ」との違いは?
ではなぜ「Verse変更内容をプッシュ」というボタンが別にあるのかというと「変更をプッシュ」よりも読み込みが短時間で済むからです。
レベル上での変更などが無く、Verseのみ書き換えた場合などはできるだけ「Verse変更内容をプッシュ」ボタンで確認すると効率的です。
【Verse】Device関数の使い方
Device関数の使い方を調べる方法
Device関数の使い方を調べるには「Fortnite.digest.verse」ファイルを使います。
「Fortnite.digest.verse」ファイル内で検索して見つける
例えば、「Fortnite.digest.verse」ファイルを開いて「item_spawner_device」と検索するとアイテムスポナーデバイスに関する機能について書かれている項目があります。
- item_spawner_deviceに関する項目
-
# Used to configuration and spawn items that players can pick up and use. item_spawner_device<public> := class<concrete><final>(base_item_spawner_device): # Cycles device to next configured item. CycleToNextItem<public>():void = external {} # Spawns the current item. SpawnItem<public>():void = external {} # Sets device *Respawn Item on Timer* option (see `SetTimeBetweenSpawns`) SetEnableRespawnTimer<public>(Respawn:logic):void = external {} # Returns device *Respawn Item on Timer* option (see `SetTimeBetweenSpawns`) GetEnableRespawnTimer<public><transacts>:logic = external {} # Sets the *Time Between Spawns* (in seconds) after an item is collected before the next is spawned, if this device has *Respawn Item on Timer* enabled. SetTimeBetweenSpawns<public>(Time:float):void = external {} # Returns the *Time Between Spawns* (in seconds) after an item is collected before the next is spawned, if this device has *Respawn Item on Timer* enabled. GetTimeBetweenSpawns<public><transacts>:float = external {}
全て英語で書かれていて難しいですが、この内容を見ることで、どんな機能があるのか把握することができるわけです。
UEFN経由で対象デバイスの記述を開く
そうするとコンテンツブラウザのどこにアセットが格納されているのかを辿ることができます。
今度は、コンテンツブラウザ内で対象のデバイスを選択し右クリック →「Visual Studio Codeで定義を開く」を選択しましょう。
例えば「Creature Spawner」のデバイスを右クリックし「Visual Studio Codeで定義を開く」をクリックしてみます。
そうするとVScode側で「Fortnite.digest.verse」ファイルが自動で開き「creature_spawner_device」の項目に飛ぶことができます。
- creature_spawner_deviceに関する項目
-
# Used to spawn one or more waves of creatures of customizable types at selected time intervals. creature_spawner_device<public> := class<concrete><final>(creative_device_base): # Signaled when a creature is spawned. # Sends the `agent` creature who was spawned. SpawnedEvent<public>: listenable(agent) = external {} # Signaled when a creature is eliminated. # `Source` is the `agent` that has eliminated the creature. If the creature was eliminated by a non-agent then `Source` is 'false'. # `Target` is the creature that was eliminated. EliminatedEvent<public>: listenable(device_ai_interaction_result) = external {} # Enables this device. Enable<public>(): void = external {} # Disables this device. Disable<public>(): void = external {} # Destroys this device. DestroySpawner<public>(): void = external {} # Eliminates all creatures spawned by this device. EliminateCreatures<public>(): void = external {} # Returns the spawn limit of the device. GetSpawnLimit<public>()<transacts>: int = external {}
Device関数を使う時のコードの書き方
ここから先は、実際にDeviceをVerse上で動かす際のコードの書き方について説明していきます。
@editable でUEFN上のデバイスと連携
- フルコード
-
using { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics } using { /Verse.org/Colors/NamedColors } Test_device := class(creative_device): @editable Test_creature_spawner : creature_spawner_device = creature_spawner_device{} OnBegin<override>()<suspends>:void= Print("Hello, world!", ?Duration:=5.0, ?Color:= Red) Print("2 + 2 = {2 + 2}")
@editable
Test_creature_spawner : creature_spawner_device = creature_spawner_device{}
上記のコードを追加しました。
Verse上でDeviseを使用するには、まず何のDeviceを使うのか宣言する必要があります。それが「@editable」の役割です。
Test_creature_spawner の部分は、自分が好きに付けていい名前の部分です。
また、Verse上で各種デバイスを使用する際には、以下のような書き方でデバイスのクローンを作るような工程が必要です。
creature_spawner_device = creature_spawner_device{}
「Verse」タブ →「Verseコードをビルド」を押します。
コードを反映させたら、自作した「Test_device」を選択して詳細タブを確認しましょう。
すると「Test_creature_spawner」という項目が新しく表示されていることが確認できます。ここでVerseとの連携作業ができます。
スポイトマークを押して、レベル上にある「Creature Spawner」を1つ選択しましょう。
これでVerseとの連携作業が完了しました。連携が完了したCreature SpawnerはVerseで自由に動かすことができます。
2種類目のDeviceを使用したい場合は、どうすればいいでしょうか?
まずは定義を調べるところから行っていきます。次はコンテンツブラウザで「Creature Placer」のデバイスを右クリックし「Visual Studio Codeで定義を開く」をクリックしてみます。
そうするとVScode側で「Fortnite.digest.verse」ファイルが自動で開き「creature_placer_device」の項目に飛ぶことができます。
- creature_placer_deviceの定義
-
# Used to spawn a creature at a specified location. creature_placer_device<public> := class<concrete><final>(creative_device_base): # Signaled when a creature is spawned. # Sends the `agent` creature who was spawned. SpawnedEvent<public>: listenable(agent) = external {} # Signaled when the creature is eliminated. # * Sends the `agent` that eliminated the creature. # * Sends `false` if the creature was eliminated by something other than an `agent` (e.g. a vehicle). EliminatedEvent<public>: listenable(?agent) = external {} # Spawns the creature. Spawn<public>(): void = external {} # Despawns the creature. Despawn<public>(): void = external {}
- フルコード
-
using { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics } using { /Verse.org/Colors/NamedColors } Test_device := class(creative_device): @editable Test_creature_spawner : creature_spawner_device = creature_spawner_device{} @editable Test_creature_placer : creature_placer_device = creature_placer_device{} OnBegin<override>()<suspends>:void= Print("Hello, world!", ?Duration:=5.0, ?Color:= Red) Print("2 + 2 = {2 + 2}")
@editable
Test_creature_placer : creature_placer_device = creature_placer_device{}
上記のコードを追加しました。
2つ目のデバイスを追加するときも、このように同じ手順を繰り返せばよいのですね。
「Verse」タブ →「Verseコードをビルド」を押します。
コードを反映させたら、自作した「Test_device」を選択して詳細タブを確認しましょう。
すると「Test_creature_placer」という項目が新しく表示されていることが確認できます。
スポイトマークを押して、レベル上にある「Creature Placer」を1つ選択しましょう。
これで2種類目のデバイスも、Verseとの連携作業が完了しました。
参考資料
こちらの動画が参考になりました。