이 섹션에서는 기존에 구성해 둔 플레이어와 팀을 런타임에서 찾는 방법을 살펴봅니다.
클래스 멤버 정의하기
- Verse 익스플로러를 열고 triad_infiltration_game.verse 를 더블클릭하여 Visual Studio Code에서 스크립트를 실행합니다.
- 파일 상단에
using { /Verse.org/Random }을 추가하여Shuffle()함수에 액세스합니다. 이것은 밸런싱 전에 랜덤으로 플레이어 팀을 셔플하는 데 사용됩니다. 또한,using { /Fortnite.com/FortPlayerUtilities }를 추가하여 플레이어에 대한Respawn()함수에 액세스합니다. 이 함수는 게임 시작 시 생성 구역으로 플레이어를 순간이동시킬 때 사용할 것입니다.using { /Fortnite.com/Devices } using { /Fortnite.com/FortPlayerUtilities } using { /Verse.org/Simulation } using { /Verse.org/Random } using { /UnrealEngine.com/Temporary/Diagnostics } triad_infiltration_game클래스 정의에서 다음과 같은 필드를 추가합니다.- 편집 가능한 인티저
MaximumInfiltrators,MaximumAttackers및MaximumDefenders3개.MaximumInfiltrators를 2로,MaximumAttackers와MaximumDefenders를 4로 초기화합니다. 이것은 각 팀의 최대 플레이어 수를 트래킹하며, 이를 사용하여 팀을 동적으로 밸런싱합니다. 이 수치는 테스트를 위한 것이지만, 게임에서 흥미로운 베리에이션을 생성하기 위해 변경할 수도 있습니다.triad_infiltration := class(creative_device): # 플레이어가 팀에 참여할 수 없는 상황을 방지하려면 섬 설정에서 플레이어의 최대 수를 # 최대(팀) 변수의 총합으로 설정해야 합니다. # 침투 팀 플레이어의 최대 수입니다. @editable MaximumInfiltrators:int = 2 # 공격 팀 플레이어의 최대 수입니다. @editable MaximumAttackers:int = 4 # 방어 팀 플레이어의 최대 수입니다. @editable MaximumDefenders:int = 4 TeamsAndTotals로 명명된 변수map. 이를 통해 플레이어 팀이 해당 팀의 최대 플레이어 수에 매핑됩니다.# 침투 팀 플레이어의 최대 수입니다. @editable MaximumInfiltrators:int = 2 # 공격 팀 플레이어의 최대 수입니다. @editable MaximumAttackers:int = 4 # 방어 팀 플레이어의 최대 수입니다. @editable MaximumDefenders:int = 4 # 플레이어 수가 최대인 팀이 표시되는 지도입니다. var TeamsAndTotals:[team]int = map{}Teleporters로 명명된 편집 가능 순간이동 장치의 배열. 여기에는 팀 밸런싱 후 플레이어를 생성 구역으로 순간이동시키는 데 사용할 순간이동 장치 레퍼런스가 있습니다.# 플레이어 수가 최대인 팀이 표시되는 지도입니다. var TeamsAndTotals:[team]int = map{} # 게임이 시작하면 플레이어들을 소속된 팀의 생성 구역으로 순간이동시키는 순간이동 장치의 배열입니다. @editable Teleporters:[]teleporter_device = array{}WeaponGranters로 명명된 편집 가능item_granter_device배열. 여기에는 플레이어 생성 시 팀에 따라 무기를 지급하는 데 필요한 아이템 지급 장치가 저장됩니다.# 게임이 시작하면 플레이어들을 소속된 팀의 생성 구역으로 순간이동시키는 순간이동 장치의 배열입니다. @editable Teleporters:[]teleporter_device = array{} # 각 팀의 무기 지급 장치의 배열입니다. @editable var WeaponGranters:[]item_granter_device = array{}MaybeInfiltrators,MaybeAttackers및MaybeDefenders로 명명된 세 가지 선택적team변수. 여기에는 각 팀에 대한 레퍼런스가 저장되어 팀이 올바르게 구성되었는지 확인할 수 있습니다.# 각 팀의 무기 지급 장치의 배열입니다. @editable var WeaponGranters:[]item_granter_device = array{} # 침투 팀에 대한 레퍼런스입니다. var MaybeInfiltrators:?team = false # 공격 팀에 대한 레퍼런스입니다. var MaybeAttackers:?team = false # 방어 팀에 대한 레퍼런스입니다. var MaybeDefenders:?team = falseTeams로 명명된 팀 변수 배열. 여기에는 게임 내 모든 팀에 대한 레퍼런스가 저장되며, 이를 통해 위에서 설명한 선택적 팀 변수를 구성할 수 있고 밸런싱 시 플레이어를 할당할 팀을 찾을 수도 있습니다.# 침투 팀에 대한 레퍼런스입니다. var MaybeInfiltrators:?team = false # 공격 팀에 대한 레퍼런스입니다. var MaybeAttackers:?team = false # 방어 팀에 대한 레퍼런스입니다. var MaybeDefenders:?team = false # 게임의 모든 팀의 배열입니다. var Teams:[]team = array{}
- 편집 가능한 인티저
런타임에서 플레이어 및 팀 찾기
OnBegin()에서Teams배열을 앞에서 경험 설정(Experience Settings) 에서 구성했던 각 팀별로 업데이트합니다.fort_team_collectionAPI에서GetTeams()함수를 사용하여 플레이스페이스에 있는 모든 팀 배열을 구할 수 있습니다.OnBegin<override>()<suspends>:void = # 팀을 모두 구합니다. set Teams = GetPlayspace().GetTeamCollection().GetTeams()MaybeInfiltrators,MaybeAttackers및MaybeDefenders를Teams배열 내 해당하는 팀에 할당하여 각 팀에 대한 레퍼런스를 저장합니다.# 나중에 레퍼런스하기 위해 팀을 저장합니다. set MaybeInfiltrators = option{Teams[0]} set MaybeAttackers = option{Teams[1]} set MaybeDefenders = option{Teams[2]}- 이제 세 팀이 모두 올바르게 구성되었는지 확인합니다.
MaybeInfiltrators,MaybeAttackers및MaybeDefenders는 각각option이기 때문에 실제 값이 포함되어 있는지 확인하면 됩니다. 포함되어 있다면TeamsAndTotals내 각 팀의 값을 해당 팀의 최대 플레이어 수로 설정합니다.if: Infiltrators := MaybeInfiltrators? Attackers := MaybeAttackers? Defenders := MaybeDefenders? Logger.Print("Found all three teams") set TeamsAndTotals[Infiltrators] = MaximumInfiltrators set TeamsAndTotals[Attackers] = MaximumAttackers set TeamsAndTotals[Defenders] = MaximumDefenders Logger.Print("Set all three teams in TeamsAndTotals") else: Logger.Print("Couldn't find all teams, make sure to assign the correct teams in your island settings.") -
이제
triad_infiltration_game코드는 다음과 같게 됩니다.triad_infiltration_game := class(creative_device): Logger:log = log{Channel := triad_infiltration_log_channel} # 플레이어가 팀에 참여할 수 없는 상황을 방지하려면 섬 설정에서 플레이어의 최대 수를 # 최대(팀) 변수의 총합으로 설정해야 합니다. # 침투 팀 플레이어의 최대 수입니다. @editable MaximumInfiltrators:int = 2 # 공격 팀 플레이어의 최대 수입니다. @editable MaximumAttackers:int = 4 # 방어 팀 플레이어의 최대 수입니다. @editable MaximumDefenders:int = 4 # 게임이 시작하면 플레이어들을 소속된 팀의 생성 구역으로 순간이동시키는 순간이동 장치의 배열입니다. @editable Teleporters:[]teleporter_device = array{} # 각 팀의 무기 지급 장치의 배열입니다. @editable var WeaponGranters:[]item_granter_device = array{} # 각 팀의 플레이어 생성 장치의 배열입니다. @editable PlayersSpawners:[]player_spawner_device = array{} # 침투 팀에 대한 레퍼런스입니다. var MaybeInfiltrators:?team = false # 공격 팀에 대한 레퍼런스입니다. var MaybeAttackers:?team = false # 방어 팀에 대한 레퍼런스입니다. var MaybeDefenders:?team = false # 게임의 모든 팀의 배열입니다. var Teams:[]team = array{} # 플레이어 수가 최대인 팀이 표시되는 지도입니다. var TeamsAndTotals:[team]int = map{} OnBegin<override>()<suspends>:void = # 팀을 모두 구합니다. set Teams = GetPlayspace().GetTeamCollection().GetTeams() # 나중에 레퍼런스하기 위해 팀을 저장합니다. set MaybeInfiltrators = option{Teams[0]} set MaybeAttackers = option{Teams[1]} set MaybeDefenders = option{Teams[2]} if: Infiltrators := MaybeInfiltrators? Attackers := MaybeAttackers? Defenders := MaybeDefenders? Logger.Print("Found all three teams") set TeamsAndTotals[Infiltrators] = MaximumInfiltrators set TeamsAndTotals[Attackers] = MaximumAttackers set TeamsAndTotals[Defenders] = MaximumDefenders Logger.Print("Set all three teams in TeamsAndTotals") else: Logger.Print("Couldn't find all teams, make sure to assign the correct teams in your island settings.") -
Visual Studio Code에서 스크립트를 저장하고, 메인 메뉴의 'Verse'에서 Build Verse Scripts 를 클릭하여 레벨에 포함된 Verse로 제작된 장치를 업데이트합니다.
-
UEFN 툴바에서 세션 시작(Launch Session) 을 클릭하여 레벨을 플레이테스트합니다. 레벨을 플레이테스트 할 때는 세 팀이 모두
TeamsAndTotals에 구성되어 있어야 합니다. 로그를 통해 이 행동을 확인합니다.
다음 단계
이 튜토리얼의 다음 단계에서는 게임 시작 시점에서 플레이어 팀을 비대칭 방식으로 밸런싱하는 방법을 살펴봅니다.