ゲームメーカーズ編集部の神谷です。本記事では、Epic Gamesが開発するプログラミング言語「Verse」について紹介します。
Verseは個人開発で使っており、モダンだし自分の好みと合うしと魅力を感じています。使用環境が限定されているため人口は少ないのですが、将来性も感じる言語です。もっとたくさんの方に触ってもらえるよう、筆を執りました。
Verseが持つ2つの大きな特徴のほか、私が感じているUnreal Engine 5(以下、UE5)におけるブループリントとの相違点を説明します。
ゲームメーカーズ編集部の神谷です。本記事では、Epic Gamesが開発するプログラミング言語「Verse」について紹介します。
Verseは個人開発で使っており、モダンだし自分の好みと合うしと魅力を感じています。使用環境が限定されているため人口は少ないのですが、将来性も感じる言語です。もっとたくさんの方に触ってもらえるよう、筆を執りました。
Verseが持つ2つの大きな特徴のほか、私が感じているUnreal Engine 5(以下、UE5)におけるブループリントとの相違点を説明します。
TEXT / 神谷 優斗
EDIT / 藤縄 優佑
※ 本記事は、2024年6月12日時点での情報に基づいて執筆しています
Verseとは、命令型、オブジェクト指向、関数型の思想を取り入れた静的型付け言語です。『フォートナイト』上で動作するゲーム制作ツール「Unreal Editor for Fortnite(以下、UEFN)」で利用できます。
Verseには、オープンワールドかつマルチプレイヤーのゲームを実行できる高いパフォーマンスなどが設計思想として掲げられています。
記事執筆時点ではUEFN上でのみ使用できますが、2024年後半には、UEFNに依存せずスタンドアローンで動作するVerse(開発内部では「MaxVerse」と呼ばれている)のリリースが予定されています。
まずは、Verseの構文についての基本を解説します。
Verseにおいては、クラスや変数、関数の宣言・定義は以下のように記述します。
sample_class<public>:= class(sample_abstract_class, sample_interface):
ImmutableVariableA<public>: string
var MutableVariableB<private>: int = 1
SampleFunc<public>(HogeArg: int, FugaArg: float): void=
Print("This is sample text")
一行目に書かれているのはクラスの宣言です。Verseでは基本的に「クラス名:= class(親クラス):
」の形でクラスを宣言します。
変数宣言と定義は、「変数名: 変数の型 = 初期値
」で記述します。初期値を指定せず、宣言のみの記述も可能です。
関数は、「関数名(引数): 戻り値=
」で記述します。
Verseでは、関数に「エフェクト」が付与されます。エフェクトとは、関数の特性のようなイメージです。
例えば、<transacts>
エフェクトのついた関数は、関数で実行される処理がすべてロールバック可能であることを示します(本記事の「特徴1. ロールバック」を参照)。また、<computes>
は引数が同じであれば常に同じ結果を返す(参照透過性を持つ)関数であることを示します。
Verseの大きな特徴の1つは、処理のロールバック(巻き戻し)を言語仕様として組み込んでいることです。
ロールバックを導入する理由には、プログラムの処理は失敗する可能性があることが挙げられます。配列が空であれば要素を取り出すことはできませんし、ネットワークに依存する処理は失敗するかもしれません。
このような処理の失敗・例外に対して、ほかの言語ではtry-catchやResult型などを使って対処していますが、Verseではロールバックを用いています。
ロールバックが起こると、例外の起きた処理をなかったことにできます。失敗する可能性のある処理に関連した、変数の代入などの一連の処理(トランザクション)も行われなかったことになるため、不正な状態が生まれない利点があります。
Verseでは、ロールバックできる関数には<transacts>
エフェクトを付与します。また、失敗する可能性のある関数には<decides>
を付ける必要があります。
<decides>
の付いた関数(以下、<decides>関数と呼称)は、同じ<decides>関数内か、if文の中でのみ処理できます。if文内で<decides>関数を扱った際は、成功した場合(then節)と失敗した場合(else節)に何を行うかを選択します。
UE5のブループリントで例外を処理するには、関数の戻り値を使う必要があります。しかし、この方法では関数の呼び出し元が戻り値を適切に処理せず、不正な値を使って処理を続行する可能性を排除できません。
しかし、Verseの<decides>関数はif文の中でしか使えず、戻り値もthen節でしか使えないように制限されるため、より安全に処理を設計することが可能です。
もうひとつの特徴は、簡潔に非同期処理が記述できる点です。
C#のasync/awaitにおけるasync
の付いた関数のように、<suspends>
エフェクトを付与した関数(以下、<suspends>関数と呼称)は非同期で実行されます。
<suspends>関数は<suspends>関数内か、spawn式でtaskとして生成することによってのみ実行できます。spawnした<suspends>関数のtaskインスタンスは、.Await()
することで関数の終了を待ち受けます。
例えば、カウントダウンするタイマーは以下の画像のように記述できます。
従来のコールバックを使う手法では処理が散らかりがちで可読性が悪くなっていましたが、Verseでは一連の非同期処理を1つの関数として記述できるため処理の流れを直感的に理解できます。
また、非同期処理の並行処理も簡潔に記述できます。複数の非同期処理を並行して実行し、どれかひとつが完了したらほかの処理をキャンセルする「race」式や、実行した非同期処理の完了を待たずに次の関数に進む「branch」式など、並行処理フローを記述するための式がいくつか用意されています。
ブループリントでも、Latent Actionによって非同期処理を簡潔に記述できます。しかし、並行処理や処理のキャンセルなど、Verseの方がより柔軟に処理を組み立てることが可能です。
「タイム フローと並列処理」UEFN公式ドキュメント以上に加え、そのほかのVerseの特徴についても説明します。
C++やブループリントでは、変数はデフォルトで可変(Mutable。書き換え可能)になっています。一方で、Verseの変数はデフォルトで不変(Immutable。書き換え不可)です。
可変変数はいつ状態が変わるか分からず、関数の呼び出しタイミングによって結果が変わる危険性を持っています。変数を不変にするここで、その危険性を排除しています。
可変変数を定義する際は、変数名の前にvar
を付けます。
Verseにおいて、すべての文は値を返す式として扱われます。それはforやifも例外ではありません。
if式(if文)では、then節(else節)の最後に書かれた式が返す値がif式の戻り値となります。三項演算子のような感覚が近いでしょう。
for式(for文)では、ループ処理の最後に書かれた式が返す値を集めた配列がfor式の戻り値となります。
for式に、失敗する可能性のある式をフィルターとして追加することも可能です。その場合、フィルターとなる式が成功した要素のみが配列に入ります。
そのほか、パラメーター多相を実現する「パラメトリック型」(C++のテンプレートのようなもの)や、関数が第一級オブジェクトであることに起因する機能「型マクロ」(C++ではstd::functionが近い)ことなども特徴です。
ここで、私個人が考えるブループリントとVerseのメリット・デメリットを挙げます。
以上の内容でVerseに興味を持った方は、UEFNを使って実際にコーディングしてみてはいかがでしょうか。
初めてVerseのコーディングを行う際は、以下の公式ドキュメントに沿って行うのがおすすめです。
「初めての Verse プログラムを変更して実行する」UEFN公式ドキュメント「Verse でのコードの書き方の基本を学ぶ」UEFN公式ドキュメントまた、Verseの詳細な情報は以下の公式ドキュメントにまとめられています。
「Verse 言語のリファレンス」UEFN公式ドキュメントUEFNの更新に伴い、Verseもアップデートされています。UEFNのリリースノートなどをチェックすれば、Verseのアップデート情報も自然と追えるようになります。
「Unreal Editor for Fortnite の最新情報」UEFN公式ドキュメント今後MaxVerseがリリースされる予定もありますし、ぜひVerseを試して、その思想に触れていただけるとうれしいです!
コーヒーがゲームデザインと同じくらい好きです
西川善司が語る“ゲームの仕組み”の記事をまとめました。
Blenderを初めて使う人に向けたチュートリアル記事。モデル制作からUE5へのインポートまで幅広く解説。
アークライトの野澤 邦仁(のざわ くにひと)氏が、ボードゲームの企画から制作・出展方法まで解説。
ゲーム制作の定番ツールやイベント情報をまとめました。
東京ゲームショウ2024で展示された作品のプレイレポートやインタビューをまとめました。
CEDEC2024で行われた講演レポートをまとめました。
BitSummitで展示された作品のプレイレポートをまとめました。
ゲームメーカーズ スクランブル2024で行われた講演のアーカイブ動画・スライドをまとめました。
CEDEC2023で行われた講演レポートをまとめました。
東京ゲームショウ2023で展示された作品のプレイレポートやインタビューをまとめました。
UNREAL FEST 2023で行われた講演レポートをまとめました。
BitSummitで展示された作品のプレイレポートをまとめました。
ゲームメーカーズ スクランブルで行われた講演のアーカイブ動画・スライドをまとめました。
UNREAL FEST 2022で行われた講演レポートやインタビューをまとめました。
CEDEC2022で行われた講演レポートをまとめました。