前提条件:learn-code-basics-5-writing-reusable-code-in-verse
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()
という関数を呼び出します。この関数はfort_playspace
型の値を返し、それを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 つ受け取ります。そのパラメータは、キャラクターに与えられるダメージの量です。パラメータについては次のレッスンで説明します。Playspace: 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):
# 実行中のゲームで仕掛けが開始されたときに実行します
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)