Skip to content
Verse Scripting

Verse スクリプティング入門:はじめてのUEFNデバイスを作ろう

2026-03-059分で読めます

Verseとは?

VerseはEpic Gamesが UEFN専用に設計したプログラミング言語です。Pythonを使ったことがある方なら、Verseは馴染みやすいでしょう。インデンテーションベースのシンタックスを使用し、ほぼ英語のように読めます。ただし、Haskellのような関数型プログラミング言語のアイデアも取り入れており、ゲームロジックに対して強力な表現力を持っています。

UEFNで基本的なCreativeデバイスを超えるカスタム動作はすべてVerseが必要です。スコアリングシステム、カスタムUI、ロードアウトマネージャー、ラウンド管理、ランクドプログレッション — すべてVerseで実装します。

最初のVerseデバイスをセットアップする

UEFNで新しいVerseデバイスを作成します:

  1. UEFNでプロジェクトを開きます
  2. Verseメニュー → Create New Verse Fileを選択します
  3. テンプレートとしてCreative Deviceを選択します
  4. my_first_deviceと名前を付けます

UEFNは以下のようなボイラープレートファイルを生成します:

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }

my_first_device := class(creative_device):

 OnBegin<override>()<suspends>:void=
 Print("Hello, Fortnite!")

これを詳しく見ていきましょう。

基本を理解する

`using`ステートメント — APIをインポートします。/Fortnite.com/DevicesはCreativeデバイスへのアクセスを提供します。/Verse.org/Simulationはコアシミュレーション機能を提供します。/UnrealEngine.com/Temporary/Diagnosticsはデバッグ用のPrint()を提供します。

クラス定義my_first_device := class(creative_device)creative_deviceを継承する新しいデバイスクラスを作成します。これがワールドに配置するカスタムデバイスです。

OnBegin — この関数はゲーム開始時に実行されます。<override>タグは親クラスのOnBeginをオーバーライドすることを意味します。<suspends>タグはこの関数が非同期操作(Sleep()など)を使用できることを意味します。

キルカウンターを構築する

実用的なものを作りましょう。キルを追跡して表示するデバイスです。まず、レベル内のUIデバイスを参照する必要があります:

using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Verse.org/Simulation }

kill_counter := class(creative_device):

 @editable
 EndGameDevice : end_game_device = end_game_device{}

 var KillCounts : [agent]int = map{}

 OnBegin<override>()<suspends>:void=
 # Subscribe to elimination events
 GetPlayspace().PlayerAddedEvent().Subscribe(OnPlayerAdded)

 OnPlayerAdded(Player : player):void=
 if (FortCharacter := Player.GetFortCharacter[]):
 FortCharacter.EliminatedEvent().Subscribe(OnEliminated)

 OnEliminated(Result : elimination_result):void=
 if (Eliminator := Result.EliminatingCharacter):
 if (Player := player[Eliminator.GetAgent[]]):
 if (set KillCounts[Player] += 1) {}

Verseの重要なコンセプト

フェイラブルエクスプレッション — Verseは失敗する可能性のある操作にifを使用します。Player.GetFortCharacter[]はプレイヤーにキャラクターがいない場合、何も返さないことがあります。[]ブラケットはフェイラブルコールを示し、ifで囲むことで失敗ケースをグレースフルに処理します。

ミュータビリティvarで宣言された変数は変更可能です。varなしの場合、値はデフォルトでイミュータブルです。これにより、意図しないステートの変更を防ぎます。

イベントとサブスクリプション — Verseはイベントドリブンパターンを使用します。イベント(PlayerAddedEventEliminatedEvent)にサブスクライブし、コールバック関数を提供します。これにより、ポーリングせずにゲームプレイに反応できます。

マップと配列[agent]intはエージェントを整数にマッピングするマップ型(辞書型)です。map{}は空のマップを作成します。

よく使われるパターン

ほぼすべてのVerseデバイスで使用するパターンをご紹介します:

タイマー/ディレイ:

Sleep(5.0) # 5秒待機

ループ:

loop:
 DoSomething()
 Sleep(1.0)

プレイヤーイテレーション:

Players := GetPlayspace().GetPlayers()
for (Player : Players):
 # 各プレイヤーに対して処理を実行

次のステップ

このガイドでは基礎の基礎をカバーしました。より深く学ぶには:

  • Epicの公式Verseドキュメントを読みましょう
  • GitHub上のオープンソースVerseプロジェクトを研究しましょう
  • 既存のCreativeデバイスをVerseで再構築して練習しましょう
  • UEFNのDiscordコミュニティに参加してヘルプを得ましょう

カスタムVerseデバイスの構築は、プロのUEFNデベロッパーとホビイストを分ける決定的なスキルです。マップに複雑なカスタムメカニクスが必要な場合、私たちのチームはVerseスクリプティングを専門としています。カスタムスコアリングシステムからフルゲームモードフレームワークまで対応可能です。

48億分以上のプレイ時間を記録した10の公開マップで、Verseの実際の活用例をご覧ください。ポートフォリオはこちら

K

Kaio

Kaio Corporation UEFN マップデベロッパー

プロフェッショナルFortnite UEFNマップデベロッパー。10マップで累計48億分以上のプレイ実績。 詳しく見る

カスタムマップが必要ですか?

お問い合わせ