【UEFN】Verse言語のオプション型について解説【初心者向け】

目次

オプション型とは 

オプション型は公式ドキュメントでこのように説明されています。 


オプション型には 1 つの値を含めることも、空にすることもできます。 

https://dev.epicgames.com/documentation/ja-jp/uefn/option-in-verse

ポイントは空にすることができるという部分です。通常、定数・変数は値を入れなければいけませんが、オプションを使うことで値を入れなくても定数・変数を定義できます。 

オプション型の構文 

変数・定数定義時 

値を入れたい場合↓

変数・定数名:?型=option{値} 

値を空にしたい場合↓

変数・定数名:?型=false 

オプション型へのアクセス 

If(値を入れる定数・変数名 :=オプション型の定数・変数名): 

オプション型へのアクセスは失敗する可能性のある式であるため、if文の括弧内などの失敗コンテキスト内に書く必要があります。 

具体例

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


hello_world_device := class(creative_device):  

    @editable
    Raptor: wildlife_spawner_device= wildlife_spawner_device{}  


    HealEliminatingChar(Result:device_ai_interaction_result):void=  
    
        if :
            KillerAgent := Result.Source?
            KillerChar := KillerAgent.GetFortCharacter[]

        then :
            KillerChar.Heal(50.0)


    OnBegin<override>()<suspends>:void= 
        Raptor.EliminatedEvent.Subscribe(HealEliminatingChar)

 ラプターを倒したら、プレイヤーの体力が50回復するコードです。

コードの解説  

ラプターを出現させるために、野生動物スポナーを使うため、11行目で定義しています。 

14行目からHealEliminatingChar関数を宣言しています。 
コードブロックの意味は以下のようになります。 

  1. ラプターを倒したプレイヤーのagent情報を取得 
  2. agent情報からfort_character情報を取得 
  3. 倒したプレイヤーの体力50回復 

device_ai_interaction_result型を必要とする EliminatedEventをきっかけにこの関数が呼び出されるため、パラメータはdevice_ai_interaction_result型となります。 

16行目からif文が始まりますが、これは条件分岐のためというよりは、失敗する可能性のある式を失敗コンテキストであるifの述語部(もし~ならばのところ)に入れるために使われています。 

device_ai_interaction_resultは構造体であり17行目で、倒したプレイヤーのagent情報を保管しているSourceにアクセスしてagent情報を取得しています。
Sourceの後ろの?がオプション型の?ですが、後ほど触れます。 
構造体についてはこちらから↓

18行目では、agent情報からfort_character情報を取得しています。
agent,player, fort_characterの関係性については、7napさんがとても分かりやすく図にまとめてくれていますので、ぜひそちらもご覧下さい。(スライドの9ページ目) 

7napさんのX
https://x.com/77nnaapp?s=21 

21行目でfort_character型を対象とするHealメソッドでプレイヤーの体力を回復しています。 

24行目からはゲーム開始時から実行されるコードですが、 
ラプターにEliminatedEventが起きたらHealEliminatingChar関数を呼び出すという意味になります。 

オプション型の解説

オプション型の定数Sourceは、公式が定義しています。
(Fortnite.digest.verseファイルの459行目)

オプション型へのアクセスは17行目で行われています。
構文通りif文内で行われていることが分かると思います。(表記法が違いますが意味は同じです。)

if :
    KillerAgent := Result.Source?

 
Sourceはdevice_ai_interaction_result構造体のメンバーで、前述したようにラプター倒したプレイヤーのagent情報が入っています。 

なぜ、option型になっているのかと言うと、
ラプターがプレイヤー以外に倒される場合があるからです。
例えばガードに倒される場合などがあります。 
その場合は倒したプレイヤーはいないことになるため、値を空にする必要があり、オプション型が使われます。 

まとめ

  • オプション型は定数・変数の値を空にできる。
  • オプション型へのアクセスは、失敗コンテキスト内で行う。
よかったらシェアしてね!

この記事を書いた人

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

コメント

コメントする

目次