【UEFN】Verse言語で「ランダムにアイテムを取得する仕組み」を実装する

このようなランダムにアイテムを取得する仕組みを作っていきます。

目次

コードの全体

using { /Fortnite.com/Devices } 
using { /Verse.org/Simulation } 
using { /UnrealEngine.com/Temporary/Diagnostics } 
using { /Verse.org/Random } 

 
Reward := class<concrete><public>: 
    @editable ItemGranter<public> : item_granter_device = item_granter_device{}
    @editable HUDMessage<public> : hud_message_device = hud_message_device{}  


SearchableObjectManager := class(creative_device): 
    @editable Rewards : []Reward = array{}  
    @editable Buttons : []button_device = array{}  

 

    OnBegin<override>()<suspends>:void=  
        for (Objects : Buttons): 
            Objects.InteractedWithEvent.Subscribe(GrantItem)  

             

    GrantItem(Agent : agent) : void =  
        RandomNumber := GetRandomInt(0, Rewards.Length-1)  
        if (TheReward:=Rewards[RandomNumber]): 
            TheReward.ItemGranter.GrantItem(Agent)  
            TheReward.HUDMessage.Show(Agent) 

コードの解説

冒頭

7行目からRewardクラスを定義し、メンバーにitem_granter_device、hud_message_deviceを定義しています。 

クラスで定義することで、デバイスの詳細が整頓されます。 

13,14行目で@editableを付けて、RewardsとButtonsを定義します。 

関数宣言

24行目からGrantItem関数を定義しています。 
コードブロックの意味は以下のようになります。 

1. 0からReward配列の要素-1の数の間でランダムな数字を取得 
2. Reward配列の取得した数字のインデックスにアクセス。 
3. アクセスした配列の要素のアイテムグランターからアイテム取得 
4. アクセスした配列の要素のHUDメッセージデバイスのテキストを見せる 

25行目のRewards.LengthでRewards配列の要素の数を取得できます。 

26行目で配列にアクセスしていますが、これは失敗する可能性のある式であるため、失敗コンテキストであるif文の括弧内で書いています。 

27行目でTheReward.ItemGranterにより、クラスのメンバーにアクセスし、それに対してGrantItemメソッドを呼び出すことで、アイテムをプレイヤーに付与します。 

28行目のHUDMessageも同様で、プレイヤーにメッセージを表示させます。 

OnBegin~

18行目からがゲーム開始時から実行される式ですが、コードブロックの意味は以下のようになります。 

全てのボタンでInteractedWithEventが起きたらGrantItem関数を呼び出す 

forは指定回数だけコードブロック内の式を実行するものですが、 
指定回復を書く括弧内に配列を書くこともでき、その場合全ての配列の要素に対してコードブロックの式を実行することになります。 

よかったらシェアしてね!

この記事を書いた人

メタバースに興味を持ち、UEFN、Verseを学びながらFortniteでゲーム制作しています。
初心者でも理解できるような記事を書くことを心がけております。
間違いがありましたら指摘よろしくお願いいたします。

コメント

コメントする

目次