게임 속 세 가지 팀 중에서도 침투자는 가장 독특한 역할을 맡습니다. 침투자는 투명 상태로 게임을 시작하여 은밀하게 플레이를 진행합니다. 높은 피해를 입히는 볼트 액션 소총을 갖추고 생성된 후 다른 팀에게 보이지 않는 상태로 처치하면서 방어자의 기지로 전진하게 됩니다. 하지만 침투자도 항상 투명하지는 않아서 공격을 받으면 일시적으로 투명 상태를 잃고 깜빡이는 모습을 보이다가 다시 시야에서 사라집니다.
이 튜토리얼에서는 팀 멤버 중 한 명이 피해를 입었을 때 침투자 전체가 깜빡이게 만들거나, 개별 팀 멤버만 깜빡이도록 만드는 방법을 살펴봅니다. 팀 전체가 깜빡인다면 침투자는 좀 더 어려운 게임을 하게 되므로 보다 신중하게 플레이해야 합니다.
침투자가 생성 시점에서 투명해지도록 만드는 방법을 살펴보려면 다음 단계를 따릅니다.
투명 관리 장치 생성하기
Verse 익스플로러로 invisibility_manager라는 새 Verse 장치를 만들어 레벨로 드래그합니다.
invisibility_manager파일의 최상단에using { /Fortnite.com/Characters }를 추가하여 플레이어에 연결된fort_character를 가져옵니다.using { /Fortnite.com/Devices } using { /Fortnite.com/Characters } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics }invisibility_manager클래스 정의에서 다음 필드를 추가합니다.플레이어 생성 장치
PlayerSpawners의 편집 가능한 배열을 추가합니다. 이것은 침투자의 플레이어 생성 장치를 트래킹하여 플레이어 생성 시 보이지 않게 만드는 데 사용됩니다.invisibility_manager := class(creative_device): Logger:log = log{Channel := triad_invisibility_log_channel} # 침투 팀의 플레이어 생성 장치의 배열입니다. @editable PlayersSpawners:[]player_spawner_device = array{}편집 가능한 로직
IsVisibilityShared를 추가합니다. 이것은 침투자가 피해를 입었을 때 모든 침투자가 깜빡일지, 피해를 입은 플레이어만 깜빡일지 결정합니다.# 침투 팀의 플레이어 생성 장치의 배열입니다. @editable PlayersSpawners:[]player_spawner_device = array{} # 침투자 멤버의 비저빌리티가 다른 팀 멤버와 공유될지 여부입니다. @editable IsVisibilityShared:logic = true편집 가능한 float
VulnerableSeconds와 편집 가능한 floatFlickerRateSeconds를 추가합니다. 전자는 침투자가 피해를 입은 후 깜빡이는 시간을 제어하고, 후자는 깜빡임 애니메이션 재생이 얼마나 빠른지 제어합니다.# 침투자의 비저빌리티를 다른 팀원과 공유할지 여부입니다. @editable IsVisibilityShared:logic = true # 침투자가 피해를 입은 후 눈에 보이는 시간입니다. @editable VulnerableSeconds:float = 3.0 # 침투자가 피해를 입은 후 깜빡이는 속도입니다. @editable FlickerRateSeconds:float = 0.4Teams로 명명된 변수 팀 배열을 추가합니다. 이것은 플레이어가 침투자인지 확인하는 데 사용됩니다.# 침투자가 피해를 입은 후 깜빡이는 속도입니다. @editable FlickerRateSeconds:float = 0.4 # 게임의 모든 팀의 배열입니다. var Teams:[]team = array{}agent에서float로 매핑하는PlayerVisibilitySeconds로 명명한 변수 맵을 추가합니다. 각 에이전트를 피해를 입은 후 남은 깜빡임 시간(초)으로 매핑합니다.var Teams:[]team = array{} # 게임의 모든 팀의 배열입니다. var Teams:[]team = array{} # 플레이어가 앞으로 몇 초나 더 깜빡여야 하는지 표시되는 지도입니다. var PlayerVisibilitySeconds:[agent]float = map{}
OnBegin()에 단순 로그 명령문을 추가하여 장치의 시작 여부를 확인합니다.triad_infiltration_game스크립트를 통해 팀이 밸런싱된 후에invisibility_manager를 실행해야 다른 팀 플레이어가 투명 상태가 되지 않도록 할 수 있습니다. 이렇게 하려면invisibility_manager를OnBegin()에서 실행하는 것이 아니라triad_infiltration_game에서 시작해야 합니다.OnBegin<override>()<suspends>:void= # 팀이 밸런싱되기까지 기다렸다가 플레이어를 투명하게 만드는 이벤트를 등록합니다. Logger.Print("Waiting for teams to be balanced...")새로운 메서드
OnPlayerSpawn()을invisibility_manager클래스 정의에 추가합니다. 침투자가 생성될 때마다 보이지 않게 하려면 이 함수를 먼저 처리해야 합니다.Verse# Handles a player spawning from an infiltrator spawn pad OnPlayerSpawn(SpawnedAgent:agent):void= Logger.Print("A player just spawned from an infiltrator spawn pad!")OnPlayerSpawn()에서GetFortCharacter[]를 사용하여 생성된 에이전트에 연결된fort_character를 가져온 후FortCharacter변수에 저장합니다. 또한GetTeam[]을 사용하여 생성된 에이전트의 팀을 가져온 후CurrentTeam변수에 저장합니다.Verse# Handles a player spawning from an infiltrator spawn pad OnPlayerSpawn(SpawnedAgent:agent):void= Logger.Print("A player just spawned from an infiltrator spawn pad!") if: FortCharacter:fort_character = SpawnedAgent.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[SpawnedAgent]CurrentTeam이Teams배열의 첫 번째 팀, 즉 침투자와 일치하는지 확인합니다. 일치하면 이 에이전트는 침투자가 되므로 에이전트의FortCharacter에서Hide()를 호출할 수 있습니다. 이렇게 하면 에이전트가 생성될 때 투명하게 됩니다. 완성된OnPlayerSpawn()함수는 다음과 같습니다.Verse# Handles a player spawning from an infiltrator spawn pad OnPlayerSpawn(SpawnedAgent:agent):void= Logger.Print("A player just spawned from an infiltrator spawn pad!") if: FortCharacter:fort_character = SpawnedAgent.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[SpawnedAgent] Teams[0] = CurrentTeam Logger.Print("Player spawned as an infiltrator, making them invisible") then: FortCharacter.Hide()
새로운 메서드
StartInvisibilityManager()를invisibility_manager클래스 정의에 추가합니다. 이 함수는 팀 유형AllTeams의 배열, 플레이어 유형AllPlayers의 배열 및team유형의 침투자 팀에 대한 레퍼런스를 호출합니다.triad_infiltration_game에서 이를 호출하여invisibility_manager로직을 시작하게 되므로, 이 함수는<public>지정자가 있어야triad_infiltration_game이 찾을 수 있습니다.# 투명 관리 장치 로직을 시작합니다. 팀 밸런싱이 끝난 뒤에 triad_infiltration으로부터 호출됩니다. StartInvisibilityManager<public>(AllTeams:[]team, AllPlayers:[]player, Infiltrators:team):void= Logger.Print("Invisibility script started!")StartInvisibilityManager():Teams배열을AllTeams배열로 설정합니다.# 투명 관리 장치 로직을 시작합니다. 팀 밸런싱이 끝난 뒤에 triad_infiltration으로부터 호출됩니다. StartInvisibilityManager<public>(AllTeams:[]team, Players:[]player, Infiltrators:team):void= Logger.Print("Invisibility script started!") set Teams = AllTeamsfor루프에서PlayerSpawners의 각 플레이어 생성 장치를OnPlayerSpawn()함수에 등록합니다.for(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn)스크립트가 시작되면 각 침투자를 찾아 투명하게 만들어야 합니다.
PlayerVisibilitySeconds맵에 각 침투자의 항목도 생성하는 것이 좋습니다. 이것은 나중에 피해를 입은 침투자가 깜빡이는 시간을 트래킹하는 데 사용할 수 있습니다.OnPlayerSpawn()에서와 같이, 각 플레이어의fort_character및team을 가져옵니다.Versefor(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn) # For each player, if they spawned on the infiltrator team, spawn an OnInfiltratorDamaged function for that # player. Then make their character invisible. for(TeamPlayer:AllPlayers): if: FortCharacter:fort_character = TeamPlayer.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[TeamPlayer]CurrentTeam이 이 함수로 전달한Infiltrators팀과 일치하는지 확인합니다. 일치하면PlayerVisibilitySeconds의 플레이어 키를0.0으로 설정합니다.Versefor(TeamPlayer:AllPlayers): if: FortCharacter:fort_character = TeamPlayer.GetFortCharacter[] CurrentTeam := GetPlayspace().GetTeamCollection().GetTeam[TeamPlayer] Logger.Print("Got this player's current team") Infiltrators = CurrentTeam set PlayerVisibilitySeconds[TeamPlayer] = 0.0 Logger.Print("Added player to PlayerVisibilitySeconds")마지막으로, 플레이어의
FortCharacter에서Hide()를 호출하여 플레이어를 투명하게 만듭니다. 완성된StartInvisibilityManager는 다음과 같습니다.Verse# Starts the invisibility manager logic. Called from triad_infiltration class after team balancing finishes StartInvisibilityManager<public>(AllTeams:[]team, Players:[]player, Infiltrators:team):void= Logger.Print("Invisibility script started!") set Teams = AllTeams for(PlayerSpawner:PlayersSpawners): PlayerSpawner.SpawnedEvent.Subscribe(OnPlayerSpawn) # For each player, if they spawned on the infiltrator team, spawn an OnInfiltratorDamaged function for that # player. Then make their character invisible. for(TeamPlayer:AllPlayers):
삼중 침투 게임에서 투명 관리 장치 호출하기
triad_infiltration_game에서 클래스 정의에 편집 가능한invisibility_manager를 추가합니다. 레벨에서triad_infiltration_game장치가 이 관리 장치를 호출하게 됩니다.# 침투자 투명 상태를 제어하는 invisibility_manager 스크립트에 대한 레퍼런스입니다. @editable InvisibilityManager:invisibility_manager = invisibility_manager{}OnBegin()함수에서BalanceTeams()호출 후StartInvisibilityManager()를 호출하고,Teams,AllPlayers및Infiltrators를 전달합니다. 완성된OnBegin()함수는 다음과 같습니다.VerseOnBegin<override>()<suspends>:void = # Get all the Teams set Teams = GetPlayspace().GetTeamCollection().GetTeams() # Save the teams to later reference them set MaybeInfiltrators = option{Teams[0]} set MaybeAttackers = option{Teams[1]} set MaybeDefenders = option{Teams[2]} if: Infiltrators := MaybeInfiltrators?파일을 저장하고 컴파일합니다. 아웃라이너(Outliner)에서 장치를 선택한 후 침투자를 위한 생성 패드 중 아무거나 PlayerSpawners 배열에 할당합니다.
아웃라이너에서 triad_infiltration_game 장치를 선택한 후 invisibility_manager 장치를 InvisibilityManager 프로퍼티에 할당합니다.
UEFN 툴바에서 세션 시작(Launch Session)을 클릭하여 레벨을 플레이테스트합니다.
레벨을 플레이테스트할 때 각 플레이어는 가장 큰 차이를 보이는 팀에 소속되어 팀에 적합한 무기를 갖추고 생성되어야 합니다. 각 침투자는 게임 시작 및 부활 시 투명 상태여야 합니다.
다음 단계
이 튜토리얼의 다음 단계에서는 침투자의 캐릭터가 피해를 입었을 때 깜빡이게 만드는 방법을 살펴봅니다.