

ゲーム開始時にプレイヤーにアイテムを付与する方法について教えてください!

初心者向けにわかりやすく解説してほしいですね!
こんなお悩みを解決します。
本記事の内容この記事を書いている僕は、金融系専門卒の投資家兼ブロガーです。実際にUEFNを使っており、現在進行形で学んでいます。
今回は、ゲーム開始時にプレイヤーにアイテムを付与する方法について解説していきます。
さっそく、やっていきましょう。

もくじ
ゲーム開始時にプレイヤーにアイテムを付与する方法

▼ 『Verse Explorer』を開きたら、青枠部分を右クリックし、「Add new Verse file to project」を選択します。

▼ Device Nameに『main_game_manager』と入力し、「作成」をクリック。

▼ Visual Studio Codeが開いたら、「main_game_manager.verse」を選択します。

開いたら、下記のコードを入力します。
完全なスクリプト
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Fortnite.com/Characters }
# A Verse-authored creative device that can be placed in a level
main_game_manager := class(creative_device):
@editable
var WeaponGranters : []item_granter_device = array{}
# Runs when the device is started in a running game
OnBegin<override>()<suspends>:void=
# TODO: Replace this with your code
InitializePlayers()
InitializePlayers() : void=
AllPlayers := GetPlayspace().GetPlayers()
for (Player : AllPlayers, FortCharacter := Player.GetFortCharacter[]):
GrantWeapon(Player, 0)
GrantWeapon(Player: player, WeaponValue : int) : void=
if(ItemGranter := WeaponGranters[WeaponValue]):
ItemGranter.GrantItem(Player)
▼ こんな感じになればOK↓
▼ UEFNに戻り、『コンテンツドロワー』をクリックします。

▼ 『All』→『item granter』と入力し、「アイテムグランター」を選択します。

▼ 下記のように設置しましょう。

▼ 設置したら、画面右のサイドバーにいき、「アイテムリスト」の『+』記号をクリックします。
▼ アイテム定義の「なし」をクリックし、青枠部分に「shotgun」と入力、「オートショットガンL1」を選択します。
※今回はショットガンを例に解説していきますね。
▼ アイテムを定義したら、少し下にいったところに「付与されたアイテムの装備」という項目があるので『✅』を入れましょう。
▼ そしたらもう一度「コンテンツドロワー」をクリックし、『main game manager』と入力。
先ほどみたいにクリックして追加しましょう。

▼ こんな感じで設置しましょう。

▼ 設置したら、画面右のサイドバーに移動し、青枠の「Main Game Manager」を選択。

▼ 『+』ボタンを選択し、『なし』をクリックします。
▼ 青枠部分に『itemgranter』と入力し、「アイテムグランター」を選択しましょう。
▼ 最後に、画面上記の「Verse」をクリックし、「Verseコードをビルド」を選択します。

▼ 画面右上の『変更をプッシュ』をクリックします。
※まだセッションを開始していない方は、『セッションを開始』ボタンをクリックしましょう。

▼ 「選択内容を保存」をクリック。
▼ 以下のように、開始時にショットガンを持っていれば成功です。

ひとまず完了です。
お疲れさまでした🍵

以下では、コードの細かな部分を解説しています。
よかったら覗いてみてください。
コードの細かな部分を徹底解説

▼ このコードは、Fortniteのゲーム内で使用されるオブジェクトや機能を定義しています。
上3つのコードは初期から記載されているため、下の/Fortnite~のみ解説しますね。
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Fortnite.com/Characters }
using { /Fortnite.com/Characters }
◎:Characters
×:Characteres
「e」に気を付けましょう。

▼ @editable
は、変数 WeaponGranters
が編集可能であることを示します。
※配列は、複数の変数がくっついたもの。例:みかん→値、みかんを入れる箱→変数、みかんを入れた箱を横に並べる→配列
WeaponGrantersは、武器の付与者。武器を装備できるキャラクターやオブジェクトに武器を付与する"武器変数"です。
@editable
var WeaponGranters : []item_granter_device = array{}
WeaponGranters
は変数です。[]item_granter_device
はitem_granter_device
型の要素を持つ配列です。array{}
は空の配列を初期値として設定しています。
▼ 下記の部分は、プレイヤーの初期化を行うためのメソッド InitializePlayers()
です。
InitializePlayers()
InitializePlayers() : void=
AllPlayers := GetPlayspace().GetPlayers()
for (Player : AllPlayers, FortCharacter := Player.GetFortCharacter[]):
GrantWeapon(Player, 0)
このコードは、UEFNのVerse言語で書かれた初期化プロセスを実行するための関数 InitializePlayers()
が定義されています。
以下では、コードの各行について説明します。
まず、GetPlayspace().GetPlayers()
を使って、プレイスペース内の全プレイヤーを取得します。
取得したプレイヤーのリストは「AllPlayers」という変数に格納されます。
AllPlayers := GetPlayspace().GetPlayers()
メソッドの呼び出しに、 () が使われます。

その後、for
ループを使って、「AllPlayers」リスト内の各プレイヤーに対して処理を行います。
ループ内では、Player.GetFortCharacter[]
を使って各プレイヤーのFortキャラクターを取得し、「FortCharacter」という変数に格納しています。
for (Player : AllPlayers, FortCharacter := Player.GetFortCharacter[]):
GrantWeapon(Player, 0)
は、GrantWeapon
メソッドを呼び出してプレイヤーに武器を付与するための処理です。
引数として現在のプレイヤー(Player
)と武器の値(0
)を渡しています。
この値によって、どの武器を付与するかを決定します。
なお、「: void」はメソッドの戻り値の型を示しており、この場合は戻り値がないことを示しています。
GrantWeapon(Player, 0)
▼ この行は、GrantWeapon
という名前のメソッドを定義しています。
この関数は2つのパラメータを受け取ります。
Player
はplayer
型であり、WeaponValue
はint
型です。この関数はvoid
を返すため、値を返しません。
GrantWeapon(Player: player, WeaponValue : int) : void=
▼ この行では、WeaponGranters
配列内の指定されたインデックスに要素が存在するかどうかをチェックしています。
:=
の記号は代入のために使用され、指定されたインデックスにある値をItemGranter
に代入します。
要素が配列内に存在する場合、条件式は真と評価され、if
ブロック内のコードが実行されます。
if(ItemGranter := WeaponGranters[WeaponValue]):
ItemGranter.GrantItem(Player)
この部分は条件文の一部で、以下の処理を行っています。
WeaponGranters[WeaponValue]
を評価します。WeaponGranters
はmain_game_manager
クラスのメンバ変数であり、item_granter_device
クラスのインスタンスの配列です。WeaponValue
は整数の引数です。
WeaponGranters[WeaponValue]
が存在する場合(非nullである場合)、ItemGranter
という一時変数にその値を代入します。- この一時変数のスコープは条件文内だけです。
ItemGranter.GrantItem(Player)
を実行します。ItemGranter
はitem_granter_device
クラスのインスタンスであり、GrantItem()
はそのインスタンスのメソッドです。- このメソッドは、与えられた
Player
にアイテムを授与する機能を持っています。
つまり、このコードはWeaponGranters
の指定されたインデックス(WeaponValue
)に対応するitem_granter_device
インスタンスが存在する場合、そのインスタンスのGrantItem()
メソッドを呼び出してPlayer
にアイテムを授与します。
なお、この部分のコードは、Pythonのウォルラス演算子(:=)を使用しています。
ウォルラス演算子は、変数の代入と条件の評価を同時に行うことができる演算子です。
上記のコードでは、WeaponGranters[WeaponValue]
の評価とその結果の代入を一度のステップで行っています。
まとめ

今回は、ゲーム開始時にプレイヤーにアイテムを付与する方法を解説しました。
以下のコードを再掲しておきます。
完全なスクリプト
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Fortnite.com/Characters }
# A Verse-authored creative device that can be placed in a level
main_game_manager := class(creative_device):
@editable
var WeaponGranters : []item_granter_device = array{}
# Runs when the device is started in a running game
OnBegin<override>()<suspends>:void=
# TODO: Replace this with your code
InitializePlayers()
InitializePlayers() : void=
AllPlayers := GetPlayspace().GetPlayers()
for (Player : AllPlayers, FortCharacter := Player.GetFortCharacter[]):
GrantWeapon(Player, 0)
GrantWeapon(Player: player, WeaponValue : int) : void=
if(ItemGranter := WeaponGranters[WeaponValue]):
ItemGranter.GrantItem(Player)
以上、お疲れさまでした🍵