今回のコードは以下の動画を参考しています。
コードの全体
using {/Fortnite.com/Devices}
using {/Verse.org/Simulation}
using {/UnrealEngine.com/Temporary/Diagnostics }
GameManager :=class(creative_device):
@editable Team1ScoreBoard: billboard_device=billboard_device{}
@editable Team2ScoreBoard:billboard_device= billboard_device{}
@editable ScoreManagerDevice: score_manager_device= score_manager_device{}
var Teams: []team = array{}
OnBegin<override>()<suspends>:void=
set Teams = GetPlayspace().GetTeamCollection().GetTeams()
spawn:
CheckTeamScores()
StringToMessage<localizes> (value:string) <computes> :message = "{value}"
CheckTeamScores()<suspends>:void=
loop:
Players:= GetPlayspace().GetPlayers()
var Team1Score:int = 0
var Team2Score:int = 0
for (Player :Players):
if(PlayerTeam:=GetPlayspace().GetTeamCollection().GetTeam[Player]):
if (Agent:=agent[Player]):
if(PlayerTeam=Teams[0]):
set Team1Score += ScoreManagerDevice.GetCurrentScore(Agent)
else if(PlayerTeam=Teams[1]):
set Team2Score += ScoreManagerDevice.GetCurrentScore(Agent)
Team1ScoreBoard.SetText(StringToMessage("チーム1:(Team1Score) キル "))
Team2ScoreBoard.SetText(StringToMessage("チーム2:(Team2Score) キル "))
Sleep(5.0)
コードの解説
冒頭
この仕組みでは仕掛けのビルボードとスコアマネージャーを使うため8~10行目で定義します。
11行目で、ゲーム内のteam情報が入るTeams変数を定義します。
関数宣言
22行目でStringToMessage関数を宣言しています。
これは、string型からビルボードに表示できるmessage型へ変換するための関数です。
26行目でCheckTeamScores関数を宣言しています。
コードブロックの意味は以下のようになります。
この式はloopを使っており、asyncな(処理に時間がかかる)関数であるためsuspends指定子をつけます。
28行目でGetPlayspace関数とGetPlayers関数により、ゲーム内にいる全てのプレイヤーのplayer情報を取得しています。
33行目でforを使うことで、Players配列の要素全て(全てのプレイヤー)に対してコードブロック内の式を実行できます。
34行目ではまずGetTeamCollectionによりゲーム内に存在する全てのチームの情報を取得し、それに対してGetTeamを呼び出すことで、プレイヤーの属しているチームを取得します。
この式は失敗する可能性のある式であるため失敗コンテキストであるif文の括弧内に入れます。
35行目でGetCurrentScore関数を呼び出す際に引数にagent情報が必要なため、player情報からagent情報を取得しています。これも失敗する可能性のある式です。
36行目と38行目のif..else式でプレイヤーのチームを判別しています。
16行目でセットしていたTeams配列の要素とプレイヤーのteam情報が等しいか否かによってチームを判別し、プレイヤーのスコアをチームのスコアに加算しています。
37行目と39行目のGetCurrentScore関数によりはプレイヤーが得たスコアを取得できます。
これをTeam1Score変数とTeam2Score変数にチームに応じて加算することで、チームスコアを計算しています。
そして41,42行目でそれぞれのチームのビルボードにSetText関数によってチームスコアを表示します。
これを5秒毎に行うことで、この仕組みを実現させています。
OnBegin~
15行目以降がゲーム開始時から実行されるコードです。
コードブロックの意味は以下のようになります
CheckTeamScores関数はasyncな関数であるため、spawnを使います。
コメント