📌

【UEFN】Verseでイベント発生時に追加でパラメータを渡す

2023/10/25に公開

やりたいこと

Verseでプログラムを書いているとデバイスのイベント発生時と同時にパラメータを渡したい場合があると思います。しかし、イベント発生時に渡される情報はagentやplayerといった既に決まっていることが多く追加でパラメータを渡すことができません。今回はその問題を解決する方法を紹介します。

解決方法

新規でクラスを作成しハンドラー関数を呼び出すことによって、追加のパラメータを渡します。

コードの全体

  1. ハンドラー関数の準備
using { /Verse.org/Simulation }

event_handler := class() :
    MainDevice : sample_01 # handlerを呼び出すクラス
    AddParameter : int # 追加で渡したいパラメータ

    # ボタンが押された際にイベントで呼び出す関数
    ButtonInteractedHandler(PlayerAgent: agent): void = 
        MainDevice.ButtonInteracted(AddParameter, PlayerAgent)
  1. メインクラスからハンドラー関数の呼び出し
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }

sample_01 := class(creative_device):

    @editable
    Buttons : []button_device = array{button_device{}}
    
    OnBegin<override>()<suspends>:void=
        for(Index -> Button : Buttons):
	    # ハンドラー関数の呼び出し
            Button.InteractedWithEvent.Subscribe(event_handler{
                MainDevice := Self,
                AddParameter := Index
                }.ButtonInteractedHandler)

    ButtonInteracted(Index: int, PlayerAgent: agent): void =
	# UEFNで何番目に登録されたボタンかを認識できる
        Print("Index: {Index}")

その他設定

UEFNに3つのボタンを登録します。

結果

UEFNに登録した3つのボタンのIndex情報をイベント発生時に表示させていることに成功しました!


最後に

今回はIndex情報のみを追加で渡しましたが、ハンドラー関数を利用すればいろんな情報を渡せるので利用してみてください。
Twitter(X)でも情報発信していくのでフォローしてね~
https://twitter.com/osoma_uefn

参考リンク

https://forums.unrealengine.com/t/guide-to-event-subscribing-with-additional-parameters-handler-functions/793925

Discussion