Verse スクリプティング入門:はじめてのUEFNデバイスを作ろう
Verseとは?
VerseはEpic Gamesが UEFN専用に設計したプログラミング言語です。Pythonを使ったことがある方なら、Verseは馴染みやすいでしょう。インデンテーションベースのシンタックスを使用し、ほぼ英語のように読めます。ただし、Haskellのような関数型プログラミング言語のアイデアも取り入れており、ゲームロジックに対して強力な表現力を持っています。
UEFNで基本的なCreativeデバイスを超えるカスタム動作はすべてVerseが必要です。スコアリングシステム、カスタムUI、ロードアウトマネージャー、ラウンド管理、ランクドプログレッション — すべてVerseで実装します。
最初のVerseデバイスをセットアップする
UEFNで新しいVerseデバイスを作成します:
- UEFNでプロジェクトを開きます
- Verseメニュー → Create New Verse Fileを選択します
- テンプレートとしてCreative Deviceを選択します
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はイベントドリブンパターンを使用します。イベント(PlayerAddedEvent、EliminatedEvent)にサブスクライブし、コールバック関数を提供します。これにより、ポーリングせずにゲームプレイに反応できます。
マップと配列 — [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の実際の活用例をご覧ください。ポートフォリオはこちら。
Kaio
Kaio Corporation UEFN マップデベロッパー
プロフェッショナルFortnite UEFNマップデベロッパー。10マップで累計48億分以上のプレイ実績。 詳しく見る →
カスタムマップが必要ですか?
お問い合わせ →