Verse コードを開いたままにしていますか? いいですね!
この演習では、「レッスン 3:練習の時間です!」で約束したとおり、フォートナイト キャラクターに実際にダメージを与える関数を呼び出します。
コーディングを始める前に、UEFN 島に 仕掛け を追加する必要があります。 これは プレイヤー スポナー と呼ばれるものであり、プレイヤー キャラクターをフォートナイトのデフォルト スポーン位置である空中ではなく、仕掛けの位置でスポーンします。 この演習でのコードが動作するには、プレイヤー スポナーが必要です。
プレイヤー スポナーの仕掛けを配置する方法については、「クリエイティブ ユーザー向けの UEFN コントロール」の「オブジェクト配置」を参照してください。 自分の島の好きな場所に配置できます。
この練習で使用するコードの一部は目新しいものですが、その各行で何をしているかを確認していきます。 今は理解できなくても構いません。 この練習は、ほぼ関数を呼び出すだけです。
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に対してGetPlayers()というメソッドを呼び出します。 このメソッドはplayer型の 配列 を返します。 配列 は、Verse で同じ型の複数の変数を保持できるコンテナです。 この例のAllPlayers配列は、レベルにあるすべてのプレイヤーを保持しています。コードで
if式を使って「はい」か「いいえ」の質問をすることはすでに学んでいます。 この例では、ifを使って、AllPlayers配列の先頭位置に変数があるかどうかをチェックしています。 式AllPlayers[0]は、先頭位置に変数があればその値を返し、その戻り値で定数FirstPlayerが初期化されます。1 つ目の
ifにネストしている 2 つ目の `if` では、メソッドGetFortCharacter[]を呼び出して、定数FirstPlayerにフォートナイトのキャラクターがあるかどうかをチェックしています。 角括弧を使って呼び出しが行われていることに注意してください。 これらは失敗する可能性がある関数を呼び出しているため、 この関数の呼び出しにifが使われています。GetFortCharacter[]がfort_character型の値を正常に返すと、その値で定数 `FortniteCharacter` が初期化されています。これで、
fort_character型の定数を取得したので、そのメソッドDamage()を呼び出すことができます。 このメソッドはfloat型のパラメータを 1 つ受け取ります。 そのパラメータは、キャラクターに与えられるダメージの量です。 パラメータについては次のレッスンで説明します。VersePlayspace: fort_playspace = GetPlayspace() AllPlayers: []player = Playspace.GetPlayers() if (FirstPlayer : player = AllPlayers[0]): if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]): FortniteCharacter.Damage(50.0)
このコードを実行すると、ゲームを開始したときにフォートナイトのキャラクターが 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=