

UEFNのVerse言語で関数を呼び出す方法について教えてください!

初心者向けにわかりやすく解説してほしいですね!
こんなお悩みを解決します。
本記事の内容この記事を書いている僕は、クリエイター兼ブロガーです。実際にUEFNを使っており、現在進行形で学んでいます。
今回は、UEFNのVerseで関数を呼び出す方法について解説していきます。
さっそく、やっていきましょう。

関数で式を使用する

関数(またはルーチン)は、再利用可能なコードであり、アクションの実行や入力に基づいた出力の生成などの命令を出します。
関数は、式の組み合わせによって構成される感じですね。
また、関数を定義するには、以下の要素が必要です。
- ユニークな名前(識別子)
- name
- 出力される情報の型
- type
- 関数が呼び出された際の動作
- codeblock
基本構文は以下のとおり。
name() : type =
codeblock
関数は、その動作を毎回記述することなく、コード内で繰り返し使用できるメリットがあります。

関数と関数呼び出し

関数は、名前がつけられた一連の式のことです。
プログラムでは、目的の関数をその名前で呼び出すことで関数を使用することができます。
関数呼び出しによって、関数が実行されます(有効になります)。
これが関数呼び出しです。
これは、関数に含まれるすべての式を繰り返し実行するのではなく、それらを名前付きの関数にまとめてグループ化し、プログラム内でその関数が呼び出されるたびにコンピュータがその関数を参照して、関数内の式を実行します。
たとえば、「100」という値を常にCoinsPerMousetrapに設定するのではなく、実行ごとにランダムな値を選択するコードを記述することができます。
以下の例では、GetRandomInt(1, 10)という式を使用して、1から10の範囲でランダムな数値を生成するように式が設定されています。
詳細は以下のとおりです。
GetRandomInt() | ランダムな整数を生成 |
1, 10 | 生成される数値の範囲 (1, 10なら1~10) |
この命令は、1から10の範囲でランダムな整数値を取得する関数を呼び出すためのコードです。
関数の呼び出しによって、コンピュータに対して関数を実行するよう命令します。
関数を使うためには、関数の名前を使って呼び出す必要があります。
GetRandomInt()という関数を呼び出すたびに、新しいランダムな数値が生成される感じですね。
これを利用することで、ネズミ捕り器の値段をランダムに変更することができます。
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Verse.org/Random }
OnBegin<override>()<suspends> : void =
# コインを 500 に初期化します。変数なので後で変更することができます。
var Coins : int = 500
# CoinsPerMousetrap を 1 から 100 の間のランダムな整数で初期化する
CoinsPerMousetrap : int = GetRandomInt(1, 100)
# 現在のコインの値 (500) をログに出力します。
Print("Coins starts at {Coins}.")
# コインを CoinsPerMousetrap ずつ減らし、新しい値をログに出力します。
set Coins = Coins - CoinsPerMousetrap
Print("After buying one mousetrap, Coins is {Coins}.")
メソッド
基本操作では、変数や定数の型によってどのような処理が実行できるかを学びました。
しかし、型にはその他にも関数が存在します。
これらの関数は特別な方法で呼び出され、それをメソッドと呼びます。
メソッドは、オブジェクトに対して特定の操作を行うための手順を定義したものです。

メソッドを呼び出す場合、関数名を直接指定して呼び出すのではなく、変数(または定数)の名前で始め、その後にドット(.)を付けてメソッドの名前を記述する必要があります。
例えば、Catという変数に対してPounce()というメソッドを呼び出す場合は、以下のようになります。
Cat.Pounce()
クラス
クラスは、似たような動作や特性を持つ要素を作成するためのテンプレートです。
つまり、他の型のデータを組み合わせた複合的な構造を持ちます。
クラスを定義する場合、そのクラスのデータは別のクラスに継承することができます。
継承することにより、クラスのデータを再利用しながら、新しいクラスを作成することができますね。

そして、メソッドはクラスに関連付けられた関数です。
そのため、すべての型で同じメソッドが機能するわけではありません。
メソッドは、対応する型またはその型が継承しているクラスの定義で宣言されている必要があります。
練習問題

それでは、今回学んだ「関数を呼び出す方法」の練習問題をやっていきましょう。
▼ まず、Verseファイルの冒頭の以下のコードが記載されているか確認します。
これらの行は、Verseとフォートナイトの組み込みコードのどの部分をVerseで作成した仕掛けで使用しているかを、Verseコンパイラに伝えています。
using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Fortnite.com/Playspaces }
using { /Verse.org/Simulation }
using { /Verse.org/Verse }
次に、フォートナイトのキャラクターにダメージを与えるコードを記述します。
そのコードを 1 行ずつ見ていきましょう。
▼ GetPlayspace()
関数を使用して、Playspace
型の値を返し、それをfort_playspace
という定数に保存します。
これはプレイヤーを取得するために必要です。
Playspace: fort_playspace = GetPlayspace()
▼ Playspace
という定数に対して、GetPlayers()
というメソッドを呼び出します。
このメソッドは player
型の配列を返します。
※配列は、Verseで複数の型が同じ変数を保持するためのコンテナとして使用されます。
この例では、AllPlayers
という配列にはレベル内のすべてのプレイヤーが格納されています。
AllPlayers: []player = Playspace.GetPlayers()
▼ 次に、if
文を使用して「はい」または「いいえ」の質問を行います。
この例では、if
を使って、AllPlayers
配列の先頭に変数があるかどうかをチェックしています。
AllPlayers[0]
は、先頭の変数が存在すればその値を返し、その戻り値で定数 FirstPlayer
が初期化されます。
if (FirstPlayer : player = AllPlayers[0]):
▼ 2つ目のif文では、先頭のプレイヤーに対してGetFortCharacter[]
メソッドを呼び出しています。
GetFortCharacter[]メソッドは、FirstPlayerオブジェクトからフォートナイトのキャラクターを取得するための関数です。

角括弧[]
を使ってメソッドの呼び出しを表していますね。
このような角括弧を使用するメソッドの呼び出しは、失敗する可能性がある関数を扱う場合に使われます。
もしGetFortCharacter[]
が正常に実行され、fort_character
型の値が返された場合、その値でFortniteCharacter
という定数が初期化されます。
if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]):
▼ fort_character
型の定数が取得できたので、Damage()
メソッドを呼び出すことができます。
このメソッドは float
型のパラメータを1つ受け取り、キャラクターに与えるダメージの量を表します。
FortniteCharacter.Damage(50.0)
この行では、FortniteCharacter の Damage() メソッドを呼び出して、キャラクターにダメージを与えます。
メソッドの引数として 50.0 という値が渡されています。
この値は、与えるダメージの量を表しています。

以下は上述したコードをまとめたものです。
Playspace: fort_playspace = GetPlayspace()
AllPlayers: []player = Playspace.GetPlayers()
if (FirstPlayer : player = AllPlayers[0]):
if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]):
FortniteCharacter.Damage(50.0)
今回は以上です。
お疲れさまでした🍵


前回と比べて、今回は激ムズでしたね。
お疲れさまです🍻

お疲れでーす🌸
まとめ

今回は、関数を呼び出す方法について解説しました。
今回のまとめ- 関数は、名前がつけられた再利用可能な一連のコードです。
- 関数はしばしばルーチンとも呼ばれる
- 複数行の同じコードを繰り返し入力する必要なく、時間を節約し、エラーを減らすのに役立つ
- コード行で関数を再利用する際は、関数呼び出し を使う
- メソッドは、特定の型に属する関数であり、対応する型の変数や定数に対して呼び出せる
- クラスは、複合型であり、他の型のデータを組み合わせて動作やプロパティをサブクラスで共有できる
また、今回の演習で扱ったコードは以下のとおりです。
完全なスクリプトusing { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Fortnite.com/Playspaces }
using { /Verse.org/Simulation }
using { /Verse.org/Verse }
hello_world_device := class(creative_device):
# Runs when the device is started in a running game
OnBegin<override>()<suspends>:void=
Playspace: fort_playspace = GetPlayspace()
AllPlayers: []player = Playspace.GetPlayers()
if (FirstPlayer : player = AllPlayers[0]):
if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]):
FortniteCharacter.Damage(50.0)
次回は、関数の定義についてやっていきます。
よーし、がんばりましょう🔥
>> 【2023年】UEFNのVerseで関数を定義する方法・組み立て方
-
-
【2023年】UEFNのVerseで関数を定義する方法・組み立て方
続きを見る
※参考文献:Epic Games