背景
もともとチームの振り分け方をVerceでどのようにやるのか知りたかったので調べました。結構簡単にできそうだったのでちょっとひねりを加えてランダムに振り分けるトリガーを作ってみました。
実装
動画
利用するDevice
全体コード
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 }
処理の流れ
- トリガーを検知
- チーム数分のランダムな数を生成
randmNum := GetRandomInt(0, 2)
- このゲームのチームを全部取得
# チーム関連の情報オブジェクト取得
TeamCollection := GetPlayspace().GetTeamCollection()
# チームを取得
TeamArray := TeamCollection.GetTeams()
- foreach文で生成した数字と同じ順番にあるチームを取得
# インデックスとチーム型を扱えるようなforeach文を利用
for (TeamNumber->Team : TeamArray):
# インデックスと生成した数字が同じかどうか
if (TeamNumber = randmNum):
-
AddToTeam
でそのチームに指定する
# チームに設定する
if (TeamCollection.AddToTeam[Agent, Team]):
Print("Team {TeamNumber} になったよ!")
まとめ
はじめはplayer型などがチームに関する属性持っているのかと思っていましたが全く別のチームオブジェクトがプレイヤーを持っている感じで面白かったです。
大人数で遊ぶワールドで生かせそうなデバイスになるかもですね!
余談
この度UEFN/Verseに関するオープンコミュニティサーバーを建ち上げました。ちょっとでも興味があれば奮ってご参加くださいませ。