LoginSignup
0
0

【UEFN】Verseを利用してランダムチーム分けトリガー作ってみた

Last updated at Posted at 2023-12-08

背景

もともとチームの振り分け方をVerceでどのようにやるのか知りたかったので調べました。結構簡単にできそうだったのでちょっとひねりを加えてランダムに振り分けるトリガーを作ってみました。

実装

動画

利用するDevice

image.png

全体コード

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


team_random_trigger_device := class(creative_device):

    @editable
    random_trigger:trigger_device=trigger_device{}

    OnBegin<override>()<suspends>:void=
        random_trigger.TriggeredEvent.Subscribe(GetRandomTeam)

    GetRandomTeam(QAgent:?agent):void=
        randmNum := GetRandomInt(0, 2)
        if (Agent:=QAgent?):
            TeamCollection := GetPlayspace().GetTeamCollection()
            TeamArray := TeamCollection.GetTeams()
            for (TeamNumber->Team : TeamArray):
                if (TeamNumber = randmNum):
                    if (TeamCollection.AddToTeam[Agent, Team]):
                        Print("Team {TeamNumber} になったよ!")

GetRandomIntを使うときは以下のusingを忘れずに書いて!
using { /Verse.org/Random }

処理の流れ

  1. トリガーを検知
  2. チーム数分のランダムな数を生成
        randmNum := GetRandomInt(0, 2)
  1. このゲームのチームを全部取得
        # チーム関連の情報オブジェクト取得
        TeamCollection := GetPlayspace().GetTeamCollection()
        # チームを取得
        TeamArray := TeamCollection.GetTeams()
  1. foreach文で生成した数字と同じ順番にあるチームを取得
        # インデックスとチーム型を扱えるようなforeach文を利用
        for (TeamNumber->Team : TeamArray):
                # インデックスと生成した数字が同じかどうか
                if (TeamNumber = randmNum):
  1. AddToTeamでそのチームに指定する
        # チームに設定する
        if (TeamCollection.AddToTeam[Agent, Team]):
                 Print("Team {TeamNumber} になったよ!")

まとめ

はじめはplayer型などがチームに関する属性持っているのかと思っていましたが全く別のチームオブジェクトがプレイヤーを持っている感じで面白かったです。
大人数で遊ぶワールドで生かせそうなデバイスになるかもですね!

余談

この度UEFN/Verseに関するオープンコミュニティサーバーを建ち上げました。ちょっとでも興味があれば奮ってご参加くださいませ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0