ゲームプレイタグを使用してVerseから仕掛けなどのアクタを検索する[Verse]

以下の内容はフォートナイトv31.20に基づいてます。

目次

ゲームプレイタグ(Gameplay Tags)について

  • ゲームプレイタグをプロップや仕掛けなどのアクタに割り当てるとVerseのメソッドを使用して検索することができる。
  • ゲームプレイタグはVerseで作成することができる。
  • 検索したアクタのメソッドを実行することができる。

ゲームプレイタグを作成する

tagクラスを継承するクラスを作成する

クラス名がタグの名前になる。

以下の例では「maytag」が作成されるゲームプレイタグの名前になり、Verseコードをビルドすると設定できるようになる。

using { /Verse.org/Simulation/Tags }

mytag := class(tag){}

アクタにゲームプレイタグを割り当てる

レベル上に配置したアクタ(今回はボタンの仕掛け)を選択し、「詳細(Details)」から「+追加(Add)」を押す。

表示されたメニューリストから「Verse Tag Markup」を選択する。

アクタに「VerseTagMarkup」コンポーネントが追加される。

「詳細(Details)」に表示されていればOKで、選択すると「GameplayTags」の設定項目が表示される。

「Edit…」を押すと使用できるゲームプレイタグのリストが表示されるので、今回作成した「mytag」を選択する。

設定した「mytag」が表示されていることを確認する。

これでアクタにゲームプレイタグが割り当てることができた。

ゲームプレイタグが割り当てられたアクタを検索する

GetCreativeObjectsWithTag()を使用する

GetCreativeObjectsWithTag()を使用することで引数に設定したタグが割り当てられたアクタの配列が取得できる。

以下の例では「maytag」が割り当てられたアクタの配列を取得して「TaggedActors」に代入し、その長さを表示している。

    OnBegin<override>()<suspends>:void=
        TaggedActors := GetCreativeObjectsWithTag(mytag{})
        Print("TaggedActors : {TaggedActors.Length}")

ゲームプレイタグが割り当てられたアクタをキャストする

GetCreativeObjectsWithTag()で取得した配列のアクタをキャストする

以下の例では取得できた配列を一つずつボタンにキャストし、キャストできればそのアクタはボタンとして認識できるので、ボタンのメソッド(今回はEnable)を実行している。

    OnBegin<override>()<suspends>:void=
        TaggedActors := GetCreativeObjectsWithTag(mytag{})
        Print("TaggedActors : {TaggedActors.Length}")

        for(TaggedActor:TaggedActors):
            if(ButtonDevice := button_device[TaggedActor]):
                ButtonDevice.Enable()

GetCreativeObjectsWithTag()で取得した配列に異なる種類の仕掛けが含まれている場合

異なる種類の仕掛けにも同じタグを割り当てることができるため、ボタン・トリガー・カスタマイズ可能なライトに「mytag」を割り当てた場合、GetCreativeObjectsWithTag()を使用して取得できたアクタの配列にはボタン・トリガー・カスタマイズ可能なライトの仕掛けが含まれていることになる。

複数の仕掛けが含まれているアクタの配列に対してそれぞれでキャストし、キャストできた仕掛けのメソッドを実行させている。

    OnBegin<override>()<suspends>:void=
        TaggedActors := GetCreativeObjectsWithTag(mytag{})
        Print("TaggedActors : {TaggedActors.Length}")

        for(TaggedActor:TaggedActors):
            if(ButtonDevice := button_device[TaggedActor]):
                ButtonDevice.Enable()
            else if(TriggerDevice := trigger_device[TaggedActor]):
                TriggerDevice.Trigger()
            else if(LightDevice := customizable_light_device[TaggedActor]):
                LightDevice.TurnOff()

コメント

コメントする

目次