Constants (定数)
定数は値が格納される場所であり、プログラムのランタイム中はその値を変更できません。
定数を作成するには、定数の宣言 (識別子と型の指定) と、定数の初期化 (定数の値の指定) を行う必要があります。
定数は宣言時に初期化し、宣言してから使用する必要があります。
定数作成の構文は次のとおりです。
Identifier : type = expressionIdentifier := expression型が省略された場合、その定数の型は定数の初期化で使用された式から推測されます。 型は定数の使用方法を示すものであるため、型を省略できるのはローカル定数のみです。 モジュールの定数は、それを含むモジュールのインターフェースの一部を構成します。 型がない場合、そのインターフェースは明白ではありません。
次の例では、ループの各イテレーションで乱数が生成され、定数 RandomNumber を初期化するために使用されます。 この乱数は、20 未満にならないとループを抜け出しません。
loop:
Limit := 20
# For local constants, the type can be omitted.
RandomNumber : int = GetRandomNumber()
# Providing the type explicitly can make the code easier to read.
if (RandomNumber < Limit):
break各ループのイテレーションでは、RandomNumber という新しい定数が導入され、その値として GetRandomNumber() の結果が割り当てられることに注意してください。
変数
上記の定数に加えて、Verse には変数もあります。
変数は定数に似ていますが、キーワード var を使用して定義されるため、どの時点でも値を変更できます。
たとえば、
var MaxHealthUpgrade : int = 10これは 整数の変数であり、その値は必ずしも 10 になるとは限りません。
変数作成の構文は次のとおりです。
var Identifier : type = expression変数の型は明示的に指定する必要があることに注意してください。
変数を作成したら、次の構文で別の値を割り当てることができます。
set Identifier = expression= に加え、その他の各種演算子を使用して変数を変更できます。 たとえば、
var X:int = 0
set X += 1
set X *= 2グローバル変数
モジュールで定義された変数は、スコープ内で実行中のどのゲーム インスタンスに対してもグローバルです。
Verse のモジュールスコープ変数を宣言する 1 つの方法は、weak_map(session, t) 型を使用することです。そのキーの型は現在のフォートナイトの島インスタンス、つまりセッションで、値の型は任意の型 t です。 weak_map の詳細については、「マップ」を参照してください。
次の例では、ExampleFunction() が呼び出されるたびにインクリメントされる GlobalInt という整数のグローバル変数を作成する方法を示します。
using { /Verse.org/Simulation } # For session
var GlobalInt:weak_map(session, int) = map{}
ExampleFunction():void=
X := if (Y := GlobalInt[GetSession()]) then Y + 1 else 0
if:
set GlobalInt[GetSession()] = X
Print("{X}")キーとしてセッション型を使用するモジュール スコープ変数には、次の制限があります。
ユーザーが現在いるセッションに対する値にのみアクセスできます。他のセッションの値にはアクセスできません。
モジュールスコープ変数
weak_mapに対しては完全に読み込みや書き込みをすることができないので、すべてのセッションの値を読み取ったり上書きしたりすることはできません。weak_mapには長さがないため、weak_mapの値を使用してイテレートしたり、現在アクティブなセッション数を確認したりすることはできません。
持続データ
セッションに関連付けられたモジュール-スコープ変数を除き、モジュール-スコープ変数には持続性、つまり現在のゲームを超えてデータを格納することが求められます。
Verse では、型 weak_map(player, t) を使用して持続データを宣言できます。 t によって表現されるあらゆる型は、持続的である特定のプレイヤー用に格納されてアクセスすることができ、データは後続のゲーム セッションで見ることができます。 プレイヤーがゲームに参加するたびに、そのプレイヤーの以前の保存データが、weak_map(player, t) 型のすべてのモジュール スコープ変数に読み込まれます。
以下の例では、グローバルの「weak_map」変数 MySavedPlayerData で key (キー) としてプレイヤーの型が使用され、値として整数が使用されています。 持続データを定義したら、各プレイヤーのデータを初期化する必要があります。 そのためには、そのプレイヤーのデータがまだ保存されていないかどうかをチェックし、そのプレイヤーと初期値を weak_map に追加します。
using { /Fortnite.com/Devices }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Verse.org/Simulation }
var MySavedPlayerData:weak_map(player, int) = map{}
# A Verse-authored creative device that can be placed in a level
persistence_example := class(creative_device):
# Runs when the device is started in a running game
キーとしてプレイヤー型を使用するモジュール スコープ変数には、次の制限があります。
プレイヤーから持続データへのアクセスは、現在のゲームに参加しているときにのみ許可されます。
プレイヤーがゲームから離れたり、現在のセッションにいなくなったりすると、そのゲーム セッションにプレイヤーのデータを格納したり、アクセスしたりできなくなります。 プレイヤーが戻ってきたり、同じゲームを再開したりすると、そのプレイヤーのデータへのアクセスや更新が可能になります。
モジュールスコープの
weak_mapに対しては完全に読み込みや書き込みをすることができないため、すべてのプレイヤーの値を読み取ったり上書きしたりすることはできません。weak_mapには長さがないため、weak_mapの値を使用してイテレートしたり、weak_mapにレコードを持つプレイヤー数を確認したりすることはできません。1 つの島は最大 2 個の持続変数、つまり 2 個の
weak_map変数をプレイヤーにつきキー型として持つことができます。持続変数の最大数の制限が満たされる場合、1 つ以上の持続変数の
weak_map値は クラスである必要があります。1 つの
weak_mapレコードの最大データサイズは、プレイヤー 1 人当たり 128 キロバイト (KB) です。
Verse での持続性の詳細については、「Verse で持続可能データを使用する」を参照してください。