オプション型とは
オプション型は公式ドキュメントでこのように説明されています。
https://dev.epicgames.com/documentation/ja-jp/uefn/option-in-verse
オプション型には 1 つの値を含めることも、空にすることもできます。
ポイントは空にすることができるという部分です。通常、定数・変数は値を入れなければいけませんが、オプションを使うことで値を入れなくても定数・変数を定義できます。
オプション型の構文
変数・定数定義時
値を入れたい場合↓
値を空にしたい場合↓
オプション型へのアクセス
オプション型へのアクセスは失敗する可能性のある式であるため、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関数を宣言しています。
コードブロックの意味は以下のようになります。
- ラプターを倒したプレイヤーのagent情報を取得
- agent情報からfort_character情報を取得
- 倒したプレイヤーの体力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型になっているのかと言うと、
ラプターがプレイヤー以外に倒される場合があるからです。
例えばガードに倒される場合などがあります。
その場合は倒したプレイヤーはいないことになるため、値を空にする必要があり、オプション型が使われます。
まとめ
- オプション型は定数・変数の値を空にできる。
- オプション型へのアクセスは、失敗コンテキスト内で行う。
コメント