UEFN Verse言語 メタバース

【UEFNのVerse】ゲーム開始時にプレイヤーにアイテムを付与する方法

【UEFNのVerse】ゲーム開始時にプレイヤーにアイテムを付与する方法
みなみ

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

りゅう

初心者向けにわかりやすく解説してほしいですね!

こんなお悩みを解決します。

 本記事の内容
 本記事の信頼性

この記事を書いている僕は、金融系専門卒の投資家兼ブロガーです。実際にUEFNを使っており、現在進行形で学んでいます。

今回は、ゲーム開始時にプレイヤーにアイテムを付与する方法について解説していきます。

さっそく、やっていきましょう。

あすか

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

UEFN Verse ショットガンの追加方法 1
※クリックすると拡大表示されます。

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

UEFN Verse ショットガンの追加方法 2

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

UEFN Verse ショットガンの追加方法 3

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

UEFN Verse ショットガンの追加方法 4

開いたら、下記のコードを入力します。

 完全なスクリプト

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 Verse ショットガンの追加方法 20

▼ UEFNに戻り、『コンテンツドロワー』をクリックします。

UEFN Verse ショットガンの追加方法 5

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

UEFN Verse ショットガンの追加方法 6

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

UEFN Verse ショットガンの追加方法 7

▼ 設置したら、画面右のサイドバーにいき、「アイテムリスト」の『+』記号をクリックします。

UEFN Verse ショットガンの追加方法 8

▼ アイテム定義の「なし」をクリックし、青枠部分に「shotgun」と入力、「オートショットガンL1」を選択します。

※今回はショットガンを例に解説していきますね。

UEFN Verse ショットガンの追加方法 9

▼ アイテムを定義したら、少し下にいったところに「付与されたアイテムの装備」という項目があるので『✅』を入れましょう。

UEFN Verse ショットガンの追加方法 10

▼ そしたらもう一度「コンテンツドロワー」をクリックし、『main game manager』と入力。

先ほどみたいにクリックして追加しましょう。

UEFN Verse ショットガンの追加方法 11

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

UEFN Verse ショットガンの追加方法 12

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

UEFN Verse ショットガンの追加方法 13

▼ 『+』ボタンを選択し、『なし』をクリックします。

UEFN Verse ショットガンの追加方法 14

▼ 青枠部分に『itemgranter』と入力し、「アイテムグランター」を選択しましょう。

UEFN Verse ショットガンの追加方法 15

▼ 最後に、画面上記の「Verse」をクリックし、「Verseコードをビルド」を選択します。

UEFN Verse ショットガンの追加方法 16

▼ 画面右上の『変更をプッシュ』をクリックします。

※まだセッションを開始していない方は、『セッションを開始』ボタンをクリックしましょう。

UEFN Verse ショットガンの追加方法 17

▼ 「選択内容を保存」をクリック。

UEFN Verse ショットガンの追加方法 18

▼ 以下のように、開始時にショットガンを持っていれば成功です。

UEFN Verse ショットガンの追加方法 19

ひとまず完了です。

お疲れさまでした🍵

あすか

以下では、コードの細かな部分を解説しています。

よかったら覗いてみてください。

コードの細かな部分を徹底解説

コードの細かな部分を徹底解説

▼ このコードは、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つのパラメータを受け取ります。

Playerplayer型であり、WeaponValueint型です。この関数はvoidを返すため、値を返しません。

    GrantWeapon(Player: player, WeaponValue : int) : void=

▼ この行では、WeaponGranters配列内の指定されたインデックスに要素が存在するかどうかをチェックしています。

:=の記号は代入のために使用され、指定されたインデックスにある値をItemGranterに代入します。

要素が配列内に存在する場合、条件式は真と評価され、ifブロック内のコードが実行されます。

        if(ItemGranter := WeaponGranters[WeaponValue]):
            ItemGranter.GrantItem(Player)

この部分は条件文の一部で、以下の処理を行っています。

  • WeaponGranters[WeaponValue]を評価します。
    • WeaponGrantersmain_game_managerクラスのメンバ変数であり、item_granter_deviceクラスのインスタンスの配列です。
    • WeaponValueは整数の引数です。
  • WeaponGranters[WeaponValue]が存在する場合(非nullである場合)、ItemGranterという一時変数にその値を代入します。
    • この一時変数のスコープは条件文内だけです。
  • ItemGranter.GrantItem(Player)を実行します。
    • ItemGranteritem_granter_deviceクラスのインスタンスであり、GrantItem()はそのインスタンスのメソッドです。
    • このメソッドは、与えられたPlayerにアイテムを授与する機能を持っています。

つまり、このコードはWeaponGrantersの指定されたインデックス(WeaponValue)に対応するitem_granter_deviceインスタンスが存在する場合、そのインスタンスのGrantItem()メソッドを呼び出してPlayerにアイテムを授与します。

なお、この部分のコードは、Pythonのウォルラス演算子(:=)を使用しています。

ウォルラス演算子は、変数の代入と条件の評価を同時に行うことができる演算子です。

上記のコードでは、WeaponGranters[WeaponValue]の評価とその結果の代入を一度のステップで行っています。

まとめ

UEFN 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)

以上、お疲れさまでした🍵

  • この記事を書いた人
  • 最新記事

あすか(Asuka)

自己紹介:UEFNクリエイター兼ブロガー
Verse言語独学中 | UE・プログラミング・3Dモデリング完全初心者 | 備忘録として学習記録をブログに残しています。
■好きな言葉
徳は弧ならず必ず隣あり.
■ひとこと
まだまだ未熟者ですが、
よろしくお願いします。

-UEFN, Verse言語, メタバース
-, ,