데저티드: 도미네이션(Deserted: Domination) 은 플레이어가 두 팀으로 나뉘어 목표를 점령하기 위해 전투하는 절대 지배 스타일의 게임입니다. 이 게임플레이는 회수 영역 등의 장치를 사용하며, Verse 로 만든 커스텀 장치도 사용합니다.

이 튜토리얼을 따라하면 포트나이트 언리얼 에디터(Unreal Editor for Fortnite, UEFN)에서 고급 수준의 게임플레이를 구현하는 방법을 학습할 수 있습니다. 또한 레벨 시퀀싱 및 포스트 프로세싱 등의 언리얼 엔진 5(UE5) 기능도 알아볼 수 있습니다.
Verse와 UE5 기능뿐만 아니라 다른 콘텐츠도 활용하도록 도와주는 외부 링크 및 리소스도 포함되어 있습니다.
데저티드 는 프로젝트 브라우저(Project Browser) 의 샘플 프로젝트(Sample Projects) 섹션에서 찾을 수 있습니다.
다음 내용은 이 섬을 재현하는 데 필요한 단계의 개요입니다.
-
새 프로젝트를 생성하고 섬 설정 수정을 통해 게임을 구성합니다.
-
플레이어 부활을 위한 Verse 스크립트를 생성합니다.
-
핵심 게임플레이 장치를 추가하고 커스터마이징합니다.
-
커스텀 생성 시스템을 추가합니다.
-
플레이어의 편성을 추가합니다.
-
사운드 이펙트를 추가합니다.
-
비주얼 이펙트를 추가합니다.
새 프로젝트 생성하기
새 프로젝트 생성에 대한 자세한 내용은 프로젝트 정리 페이지를 참조하세요.
섬 설정을 구성하려면 콘텐츠 드로어(Content Drawer)에서 섬 설정(Island Settings) 장치를 배치해야 합니다.
아래와 같이 세팅을 커스터마이징합니다.
옵션 | 값 | 설명 |
---|---|---|
음성 채팅(Voice Chat) | 전체(All) | 음성 채팅을 팀원들에게만 허용할지, 모든 플레이어에게 허용할지, 아예 사용하지 않을지 여부를 결정합니다. |
음성 채팅 거리(Voice Chat Distance) | 10.0 | 음성을 들을 수 있는 범위를 타일 거리 단위로 제어합니다. |
최대 플레이어(Max Players) | 12 | 게임에 참가할 수 있는 최대 플레이어 수를 결정합니다. |
팀(Teams) | 팀 인덱스(Team Index) - 2 | 플레이어를 몇 팀으로 나눌지 결정합니다. |
팀 크기(Team Size) | 균일 분배(Split Evenly) | 팀 간의 플레이어 분배 방식을 결정합니다. |
기본 클래스 식별(Default Class Identifier) | 클래스 슬롯(Class Slot) - 1 | 게임 시작 시 또는 클래스 설정 시 플레이어의 기본 클래스를 정의합니다. |
총 라운드(Total Rounds) | 5 | 게임 종료까지 플레이할 라운드 수를 결정합니다. |
팀 로테이션(Team Rotation) | True | 팀 로테이션 빈도를 결정합니다. |
팀 비주얼 확정 시점(Team Visuals Determined At) | 게임 시작(Game Start) | 라운드마다 팀 이름과 색상을 변경할지, 게임 시작 시 상태를 그대로 유지할지 여부를 결정합니다. |
시간 제한(Time Limit) | 15.0 | 각 라운드의 지속 시간을 지정하거나, 한 라운드만 있는 경우 게임 지속 시간을 지정합니다. |
득점하여 종료(Score to End) | 500 | 플레이어 또는 팀이 지정된 점수를 달성하면 라운드가 종료됩니다. |
부활 패드 발견했을 때만 부활 허용(Only Allow Respawn If Spawn Pads found) | True | 유효한 부활 패드가 있는 경우에만 플레이어의 부활을 허용합니다. |
자동 시작(Auto Start) | 30.0 | 선택한 시간이 지나면 게임이 자동으로 시작되는지 여부를 지정합니다. |
다른 팀 관전 허용(Allow Spectating Other Teams) | True | 관전 플레이어가 다른 팀을 볼 수 있는지 여부를 결정합니다. |
처치 점수(Elimination Score) | 3.0 | 다른 플레이어를 처치할 때 얻는 점수를 결정합니다. |
도움 점수(Assist Score) | 1.0 | 다른 플레이어를 처치하는 데 도움을 주었을 때 얻는 점수를 결정합니다. |
플레이어 콜리전 비활성화(Disable Player Collision) | True | 플레이어가 서로 충돌하거나 통과할지 여부를 결정합니다. |
플레이어 부활을 위한 Verse 스크립트 생성하기
Verse를 사용하여 플레이어 부활 장치를 제어함으로써 플레이어가 항상 자신의 영토(보유한 회수 영역 근처 또는 아군 근처 영역)에서 부활하도록 할 수 있습니다. 이렇게 하려면 표준 포크리 장치와 Verse를 조합하여 사용해야 합니다.
이 페이지에 설명된 대로 새로운 Verse 스크립트를 추가합니다. 그런 다음, 다음을 붙여 넣습니다.
# Copyright Epic Games, Inc. All Rights Reserved.
using { /Fortnite.com/Devices }
using { /Fortnite.com/Teams }
using { /Verse.org/Simulation }
using { /Verse.org/Simulation/Tags }
## 이 장치는 플레이어 부활 장치를 관리합니다
## 부활 장치 초기 세트가 활성화되기 시작합니다
## 얼마 되지 않아 초기 부활 장치가 비활성화됩니다
## 여기에서부터 각 회수 지점과 연관된 팀 생성이 가중치 적용 점수를 기반으로 활성화/비활성화됩니다
## 지점을 보유하면 가중치 적용 점수에 1점이 추가됩니다(팀 2인 경우 -1)
## 영역의 각 아군은 가중치 적용 점수에 1점을 추가합니다(팀 2인 경우 -1)
## 가중치 적용 점수가 0보다 크면 팀 1이 지점 근처에서 부활될 수 있습니다
## 가중치 적용 점수가 0보다 작으면 팀 2가 지점 근처에서 부활될 수 있습니다
##################################################################
## 이벤트 핸들러 클래스 - 회수 지점당 이 중 하나를 부활시키고 이벤트를 바인딩합니다
##################################################################
capture_point_event_handler := class:
CapturePointIndex:int
DominationSpawnManagerRef:domination_spawn_manager
TeamCollectionRef:fort_team_collection
var CaptureWeightOfThisPoint:int = 0
var PlayerWeightOfThisPoint:float = 0.0
WeightForEachPlayer:float = 0.5
# 팀 1인 경우 1을 반환합니다. 팀 2인 경우 -1을 반환합니다.
GetTeamDirectionOfAgent<private>(MyAgent:agent)<transacts>:int=
if (FirstTeam := TeamCollectionRef.GetTeams()[0]):
if (TeamCollectionRef.IsOnTeam[MyAgent, FirstTeam]):
return 1
return -1
# 회수 지점 상태 설정
OnCaptured(MyAgent:agent):void=
set CaptureWeightOfThisPoint = GetTeamDirectionOfAgent(MyAgent)
DominationSpawnManagerRef.CalculateWeightForPoint(CapturePointIndex)
# 지점의 플레이어 가중치 적용을 플레이어가 입장하거나 나감에 따라 변경합니다
PlayerEnteredLargeZone(MyAgent:agent):void=
set PlayerWeightOfThisPoint = PlayerWeightOfThisPoint + (GetTeamDirectionOfAgent(MyAgent) * WeightForEachPlayer)
DominationSpawnManagerRef.CalculateWeightForPoint(CapturePointIndex)
PlayerLeftLargeZone(MyAgent:agent):void=
set PlayerWeightOfThisPoint = PlayerWeightOfThisPoint - (GetTeamDirectionOfAgent(MyAgent) * WeightForEachPlayer)
DominationSpawnManagerRef.CalculateWeightForPoint(CapturePointIndex)
##################################################################
## 절대 지배 부활 관리 장치 클래스
##################################################################
domination_spawn_manager := class(creative_device):
# 플레이어 부활 장치 그룹 - Verse 태그 검색으로 채워짐
var SpawnPointGroupInitial:[]player_spawner_device = array{}
var SpawnPointGroupsCapPoint:[][]player_spawner_device = array{array{}, array{}, array{}}
# 회수 영역
@편집가능
CapturePoints:[]capture_area_device = array{}
@편집가능
LargeZones:[]player_counter_device = array{}
# 이 다음에야 초기 부활 장치가 비활성화됩니다
InitialGroupDisableTime:float = 5.0
# 회수 지점 이벤트 핸들러 클래스 레퍼런스
var CapturePointListeners:[]capture_point_event_handler = array{}
# 게임이 시작되면 OnBegin이 실행됩니다
OnBegin<override>()<suspends>:void=
BeginPlayEventSubscriptions()
FindAndCacheSpawnDevices()
DisableInitialSpawnGroup()
# 속성 트리거에서 이벤트를 등록합니다
BeginPlayEventSubscriptions<private>():void=
for (I -> EachCapPoint:CapturePoints):
MyHandler := capture_point_event_handler:
CapturePointIndex := I
DominationSpawnManagerRef := Self
TeamCollectionRef := Self.GetPlayspace().GetTeamCollection()
set CapturePointListeners = CapturePointListeners + array{MyHandler}
EachCapPoint.ControlChangeEvent.Subscribe(MyHandler.OnCaptured)
if (EachLargeZone := LargeZones[I]):
EachLargeZone.CountedEvent.Subscribe(MyHandler.PlayerEnteredLargeZone)
EachLargeZone.RemovedEvent.Subscribe(MyHandler.PlayerLeftLargeZone)
# 다양한 플레이어 부활 장치를 모두 가져와 적절한 배열에 저장합니다
FindAndCacheSpawnDevices<private>():void=
InitialSpawnPoints:[]creative_object_interface = GetCreativeObjectsWithTag(DominationSpawnTags.Tag_SpawnGroup_Initial{})
for (FoundDevice : InitialSpawnPoints, DeviceAsSpawner:= player_spawner_device[FoundDevice]):
set SpawnPointGroupInitial = SpawnPointGroupInitial + array{DeviceAsSpawner}
GroupTags:[]tag = array:
DominationSpawnTags.Tag_SpawnGroup_GroupA{}
DominationSpawnTags.Tag_SpawnGroup_GroupB{}
DominationSpawnTags.Tag_SpawnGroup_GroupC{}
for (I -> GroupTag:GroupTags):
FoundSpawnGroup:[]creative_object_interface := GetCreativeObjectsWithTag(GroupTag)
for (FoundDevice : FoundSpawnGroup, DeviceAsSpawner:= player_spawner_device[FoundDevice]):
if:
set SpawnPointGroupsCapPoint[I] = SpawnPointGroupsCapPoint[I] + array{DeviceAsSpawner}
# 초기 부활 지점을 끕니다
DisableInitialSpawnGroup<private>()<suspends>:void=
Sleep(InitialGroupDisableTime)
for (SpawnPoint : SpawnPointGroupInitial):
SpawnPoint.Disable()
# 지점의 CapPointCaptureWeight 또는 CapPointPlayerWeight가 변경될 때마다, 다음이 실행되어 연관된 부활 그룹에서 누가 부활되도록 허용되었는지 확인합니다
CalculateWeightForPoint(PointIndex:int):void=
var WeightOfPoint:int = 0
if:
CapPointData := CapturePointListeners[PointIndex]
CapPlayerWeightToInt := Floor[CapPointData.PlayerWeightOfThisPoint]
then:
set WeightOfPoint = CapPointData.CaptureWeightOfThisPoint + CapPlayerWeightToInt
for (SpawnDevice:SpawnPointGroupsCapPoint[PointIndex]):
var DeviceIsTeam1:logic = false
DeviceTags := SpawnDevice.GetTags()
if (DeviceTags.Has[DominationSpawnTags.Tag_TeamOwnership_Team1{}]):
set DeviceIsTeam1 = true
if (DeviceIsTeam1?):
if (WeightOfPoint > 0):
SpawnDevice.Enable()
else:
SpawnDevice.Disable()
else:
if (WeightOfPoint < 0):
SpawnDevice.Enable()
else:
SpawnDevice.Disable()
Verse에 대한 자세한 내용은 이 가이드를 참조하세요.
이 튜토리얼에서는 다른 포크리 장치에 대한 레퍼런스를 얻기 위해 Verse 태그를 사용합니다.
다음으로는 Verse 스크립트를 컴파일합니다.
콘텐츠 브라우저에서 생성한 DominationSpawnManager 장치를 찾은 후 월드로 드래그하여 세팅을 커스터마이징합니다.
이러한 세팅과 새로운 Verse 장치는 컴파일을 마친 후에만 표시됩니다.
핵심 장치 추가 및 커스터마이징하기
플레이어 생성 패드 장치

플레이어 생성 패드 장치는 유효한 부활 위치를 결정하는 Verse 스크립트에 의해 제어됩니다.
각기 다른 세팅과 기능을 가진 다양한 종류의 장치를 사용하게 됩니다. 이 중 일부는 비활성화하거나 활성화함으로써 Verse를 통해 유효한 부활 위치를 결정하도록 소통할 수 있는 장치도 있습니다.
초기 부활 장치는 팀 1에 8개, 팀 2에 8개로 총 16개가 필요합니다. 이 장치들은 라운드마다 첫 번째 부활 세트에만 사용되니 잘 보이도록 배치하세요.
장치를 커스터마이징하는 방법은 다음과 같습니다.
콘텐츠 드로어에서 플레이어 생성 패드 장치를 선택하고 배치합니다.
-
아래와 같이 세팅을 커스터마이징합니다.
옵션 값 설명 플레이어 팀(Player Team) 팀 인덱스(Team Index) / 팀 1(Team 1) 또는 팀 2(Team 2) 이 특정 부활 장치에서 팀 1 또는 팀 2가 부활되는지 여부를 설정합니다. 섬 시작으로 사용(Use as Island Start) False 이 장치가 섬 시작 순간이동기로 사용되지 않습니다. 게임 내 표시(Visible in Game) False 이 장치가 게임플레이 도중에 표시되지 않습니다. 우선순위 그룹(Priority Group) 10 우선순위 그룹의 박스를 체크합니다. 이는 부활에 사용되는 우선순위로, 작은 숫자일수록 우선순위가 높습니다. 적 범위 표시(Display Enemy Range) 꺼짐(Off) 에디터에서 적 범위 체크를 보여주는 시각화 장치입니다. 적 범위 체크를 사용하지 않았더라도 기본적으로 모두 꺼짐으로 설정되어 있습니다. -
Verse 태그를 추가합니다.
게임플레이 태그를 사용하면 게임이 실행되는 동안 특정 태그로 표시된 장치를 찾을 수 있습니다.
게임플레이 태그(Gameplay Tags) 드롭다운을 찾은 후 편집(Edit) 을 클릭하여 true/false 체크 박스 목록을 가져옵니다.
초기 부활 플레이어 생성 패드 장치의 경우, 초기(Initial) 를 클릭하고 각각 팀 1 또는 팀 2의 팀 소유권을 가지게 해야 합니다.
그런 다음, 다음 단계를 따릅니다.

-
디테일(Details) 패널에서 VerseTagMarkup 을 선택합니다.
-
게임플레이 태그(Gameplay Tags) 에서 편집(Edit) 을 클릭하여 true/false 체크 박스 목록을 가져옵니다.
- 초기 부활 장치의 경우 초기(Initial) 를 클릭합니다. 각 부활 장치가 팀 1 또는 팀 2의 TeamOwnership 을 가지게 해야 합니다.
-
이 장치를 15번 복사하고 붙여 넣습니다(장치가 총 16개여야 합니다).
맵 한쪽에 회수 영역 장치와 함께 장치 절반을 배치하고, 반대쪽 절반에 또 다른 회수 영역 장치와 함께 나머지 절반을 배치합니다. 맵 중앙에 3번째 회수 영역 장치를 추가합니다. 세 회수 영역 장치를 Capture Area_A, Capture Area_B, Capture Area_C로 명명합니다.
이러한 플레이어 부활 장치들은 Verse에 의해 비활성화되기 전 게임플레이 최초 시작 시에만 사용됩니다.
Verse 태그는 어디서든 정의할 수 있습니다. 이 튜토리얼의 태그는 ProjectName.verse
에서 정의되며, 이는 여러분이 명명한 프로젝트 이름입니다.
파일을 열고 다음 태그를 붙여 넣어 태그를 구성합니다.
# Copyright Epic Games, Inc. All Rights Reserved.
using { /Verse.org/Simulation/Tags }
DominationSpawnTags<public> := module:
Tag_SpawnGroup<public>:= class(tag){}
Tag_SpawnGroup_Initial<public>:= class(Tag_SpawnGroup){}
Tag_SpawnGroup_GroupA<public>:= class(Tag_SpawnGroup){}
Tag_SpawnGroup_GroupB<public>:= class(Tag_SpawnGroup){}
Tag_SpawnGroup_GroupC<public>:= class(Tag_SpawnGroup){}
Tag_TeamOwnership<public>:= class(tag){}
Tag_TeamOwnership_Team1<public>:= class(Tag_TeamOwnership){}
Tag_TeamOwnership_Team2<public>:= class(Tag_TeamOwnership){}

부활 장치 클러스터는 위의 사진과 같이 전투에서 벗어난 안전한 영역에 배치하세요. Verse가 스크립트의 유효성 검사 결과에 따라 이 부활 장치들을 끄거나 켤 것입니다.
빨간색 플레이어 생성 패드는 Verse에 의해 제어되는 3개의 부활 장치 그룹 중 하나를 위한 것입니다. 그룹에는 2개의 겹치는 부활 장치가 있습니다. 하나는 팀 1을, 다른 하나는 팀 2를 위한 것으로 맵의 다른 곳에서 반복됩니다.
부활 패드 클러스터의 흰색 부활 장치는 예비 부활 장치입니다. 예비 부활 장치는 Verse가 검사할 때 플레이어가 부활될 다른 유효한 위치가 없는 경우 사용됩니다.
맵 곳곳에서 팀 1과 팀 2로 구성된 부활 장치 그룹들을 추가할 수 있습니다. 부활 그룹을 그룹 A, B 또는 C 중 하나로 태그하여 부활 그룹이 반응해야 하는 회수 영역을 할당합니다.
연결한 회수 영역 장치 근처에 그룹을 구성합니다.
부활 장치 그룹을 구성하는 방법은 다음과 같습니다.
-
안전한 영역에 2개의 부활 패드를 서로의 상단에 배치합니다. 하나는 팀 1에, 나머지 하나는 팀 2에 할당해야 합니다.
-
아래와 같이 세팅을 커스터마이징합니다.
옵션 값 설명 플레이어 팀(Player Team) 팀 인덱스(Team Index) / 1 또는 2 플레이어를 생성할 팀 인덱스를 팀 1 또는 팀 2로 설정합니다. 섬 시작으로 사용(Use as Island Start) False 섬 시작 순간이동기로 사용하지 않습니다. 게임 내 표시(Visible in Game) False 부활 장치가 게임플레이 도중에 표시되지 않습니다. 단계 간 활성화(Enabled During Phase) 없음(None) Verse에 의해서만 사용되며, 기본적으로 비활성화 상태로 설정됩니다. 우선순위 그룹(Priority Group) 10 우선순위 그룹의 박스를 체크합니다. 부활에 사용되며, 작은 숫자일수록 우선순위가 높습니다. 적 범위 체크(Enemy Range Check) 60 적을 확인하여 유효한 부활 지점인지 결정하는 데 사용되는 거리입니다. 맵 크기에 따라 범위 크기는 조정될 수 있습니다. 맵이 크다면 더 큰 영역을 사용하고, 맵이 별로 크지 않다면 더 작은 영역을 사용합니다. 적 범위 표시(Display Enemy Range) 꺼짐(Off) 에디터에서 적 범위 체크를 보여주는 시각화 장치입니다. 적 범위 체크를 사용하지 않았더라도 기본적으로 모두 꺼짐으로 설정되어 있습니다. -
마지막 섹션에서 했던 것처럼 Verse 태그를 추가하고 체크 박스를 다음과 같이 체크하세요.
-
회수 지점 A 주변 부활 패드의 경우 GroupA 를 체크합니다.
-
회수 지점 B 주변 부활 패드의 경우 GroupB 를 체크합니다.
-
회수 지점 C 주변 부활 패드의 경우 GroupC 를 체크합니다.
-
-
방금 배치한 2개를 제외한 다른 플레이어 생성 패드를 배치합니다. 이것이 예비 부활 장치가 됩니다.
-
아래와 같이 세팅을 커스터마이징합니다.
옵션 값 설명 플레이어 팀(Player Team) 아무거나(Any) 플레이어를 생성할 팀 인덱스를 팀 1 또는 팀 2로 설정합니다. 섬 시작으로 사용(Use as Island Start) False 섬 시작 순간이동기로 사용하지 않습니다. 게임 내 표시(Visible in Game) False 부활 장치가 게임플레이 도중에 표시되지 않습니다. 단계 간 활성화(Enabled During Phase) 항상(Always) 플레이어가 부활할 때 항상 유효한 부활 장치입니다. 우선순위 그룹(Priority Group) 20 우선순위 그룹의 박스를 체크합니다. 부활에 사용되며, 작은 숫자일수록 우선순위가 높습니다. 적 범위 체크(Enemy Range Check) 60 적을 확인하여 유효한 부활 지점인지 결정하는 데 사용되는 거리입니다. 맵 크기에 따라 범위 크기는 조정될 수 있습니다. 맵이 크다면 더 큰 영역을 사용하고, 맵이 별로 크지 않다면 더 작은 영역을 사용합니다. 적 범위 표시(Display Enemy Range) 꺼짐(Off) 에디터에서 적 범위 체크를 보여주는 시각화 장치입니다. 적 범위 체크를 사용하지 않았더라도 기본적으로 모두 꺼짐으로 설정되어 있습니다. -
이 장치를 맵 전체에 고르게 복사하고 붙여 넣습니다. 부활 장치가 회수 지점에 연결된 동일한 곳에 배치해도 됩니다.
총 16개를 배치해야 하며, 이 16개의 장치는 팀에 의해 제한되지 않습니다. 이는 3개의 지점을 모두 회수하면 맵의 예측 가능한 영역이 아니라 맵 전체에서 패배한 적이 무작위로 나타난다는 것을 의미합니다.

마지막으로, 플레이어들이 게임을 하기 위해 기다리는 곳인 게임 시작 전 대기실에 수많은 부활이 사용됩니다. 이러한 부활은 총 16개로, 양쪽 팀의 플레이어들이 모두 기다릴 수 있도록 생성된 영역 내에 배치됩니다.
다음과 같이 장치를 설정합니다.
-
게임 전 대기실을 생성합니다.
-
대기실에 플레이어 생성 패드 장치를 배치합니다.
-
아래와 같이 세팅을 커스터마이징합니다.
옵션 값 설명 플레이어 팀(Player Team) 없음(None) 섬 시작에만 사용됩니다. 섬 시작으로 사용(Use as Island Start) True 게임 전 섬 시작에 사용됩니다. 게임 내 표시(Visible in Game) False 부활 장치가 게임플레이 도중에 표시되지 않습니다. 단계 간 활성화(Enabled During Phase) 게임 시작 전(Pre-Game Only) 장치가 활성화되는 게임 단계를 결정합니다. 우선순위 그룹(Priority Group) 80 우선순위 그룹의 박스를 체크합니다. 이 패드는 항상 게임 시작 전 단계에 사용됩니다. 적 범위 표시(Display Enemy Range) 꺼짐(Off) 에디터에서 적 범위 체크를 보여주는 시각화 장치입니다. 적 범위 체크를 사용하지 않았더라도 기본적으로 모두 꺼짐으로 설정되어 있습니다. -
이 장치를 15번 복사하고 붙여 넣습니다.
회수 영역 장치
그런 다음에는 다음 단계를 통해 회수 영역 장치를 커스터마이징합니다.
-
배치된 회수 영역 장치를 편집합니다.
-
아래와 같이 세팅을 커스터마이징합니다.
옵션 값 설명 회수 반경(Capture Radius) 0.45 타일로 표시된 장치 주변 회수 필드의 반경입니다. 게임 중에 표시(Visible During Game) False 이 장치의 베이스가 게임플레이 도중에 표시되지 않습니다. 주기적인 득점(Periodic Scoring) 소유 팀(Owning Team) 매초 이 지점을 점유 중인 팀에게 점수가 주어집니다. 통제 시 득점(Score On Taking Control) 3 지점 점유 시 부여되는 점수의 양입니다. 액센트 컬러 유형(Accent Color Type) 팀 관계 색상 현재 지점을 보유 중인 팀의 색상을 표시합니다. 회수 높이(Capture Height) 0.0625 타일로 표시한 회수 장치의 높이입니다. 적 대결 점수(Enemies Contest Scoring) True 적이 회수 영역 안에 있을 때 주기적인 득점이 비활성화됩니다. 회수 가능한 팀(Can Be Captured By Team) 전체(All) 어느 팀이든 지점을 회수할 수 있습니다. 통제 시간(Control Time) 10 회수 영역을 통제하기 위해 회수 영역 안에 있어야 하는 시간입니다(초 단위). 중립 시간 오버라이드(Neutralize Time Override) 중립화 없음(No Neutralize) 지점이 팀에 의해 회수 완료된 경우 다른 팀이 먼저 이 지점을 중립화할 필요가 없습니다. 플레이어마다 통제 속도 더 빠름(Take Control Faster Per Player) 2.0 각 팀원이 추가로 도울 때마다 회수 및 중립화 속도에 적용되는 배수입니다. 진행 상황 감소 유형(Progress Decay Type) 시간별(Over Time) 부분적인 회수 진행 상황이 처리되는 방법을 결정합니다. 부분 진행 상황 속도 감소(Partial Progress Decay Speed) 0.5 회수 영역 내에 팀원이 없을 때 부분 진행 상황이 저하되는 속도입니다. HUD 구성요소(HUD Elements) 배지(Badge) 회수 영역이 UI에 배지로 표시됩니다. 시선 확보 필요(Requires Line Of Sight) False 시야에 관계없이 회수 영역 배지가 항상 표시됩니다. 적군 아이콘 텍스트(Hostile Icon Text) 회수(Capture) 적이 회수 지점을 통제할 때 표시되는 UI 텍스트입니다. HUD 아이콘 숨김 범위(Hide HUD Icon At) 300 HUD 배지가 더 이상 보이지 않는 거리입니다(미터 단위). 화면에 고정(Clamp To Screen) True 배지 렌더링 시 화면에 고정합니다. 아군 아이콘 텍스트(Friendly Icon Text) 방어(Defend) 아군 팀이 회수 영역을 통제할 때의 UI 텍스트입니다. 중립 아이콘 텍스트(Neutral Icon Text) 회수(Capture) 회수 영역이 통제하에 있지 않을 때의 UI 텍스트입니다. HUD 텍스트 크기(HUD Text Size) 1.5 배지와 함께 표시되는 텍스트의 크기입니다. HUD 메시지 A 회수(Captured A) ~ C 회수(Captured C) HUD에 점수와 함께 표시할 메시지입니다. 각 장치에 'A 회수'부터 'C 회수'까지 고유 메시지를 설정합니다. 맵 마커 표시(Show Map Marker) True 미니맵에 목표 아이콘을 표시할지 여부를 결정합니다. 표시 순서(Show Order) 1 ~ 3 UI의 목표 표시 순서를 결정합니다. 각 장치에 1부터 3까지 고유 순서를 설정합니다. -
모든 회수 영역에서 이 단계를 반복합니다.
앞에서 설명한 것처럼 맵의 반대편에 회수 영역 장치 2개를, 중앙에 회수 영역 장치 1개를 배치합니다. 맵 전체에 장치를 분포시키되 각 팀이 1개의 회수 영역 장치에 근접하도록 하고, 3번째 장치는 팀이 서로 차지하기 위해 경쟁하도록 중앙에 배치합니다.
회수 지점을 적절하게 배치하려면 범위, 주변 지형, 고도, 다른 회수 지점과의 거리를 모두 고려해야 합니다.
또한 회수 영역을 어떻게 시각적으로 표현할지에 대해서도 생각해야 합니다. 회수 영역 장치에 몇 가지 좋은 디폴트 옵션이 있지만, 월드 아트, 라이팅, 데칼 등을 어떻게 사용하면 좋을지도 고민해 보세요.
데저티드에서는 시각적인 구분이 가능하도록 베이스를 회전하는 라이트 픽스처로 대체했습니다.
플레이어 카운터

3개의 플레이어 카운터 장치를 배치하되, 각 회수 영역 장치에 1개씩 인접하도록 합니다.

다음으로는 플레이어 카운터 장치를 구성하여 위의 장치와 연결된 볼륨을 생성합니다. 장치는 LargeZone_A, LargeZone_B, LargeZone_C로 명명할 수 있습니다.
위의 사진에서는 회수 지점 C 주변의 빨간색 볼륨을 볼 수 있습니다. 볼륨의 크기는 커버하는 영역의 크기에 따라 다릅니다.
다음 설정 값을 갖도록 플레이어 카운터 장치를 커스터마이징합니다.
옵션 | 값 | 설명 |
---|---|---|
플레이어 카운트 비교(Compare Player Count) | 비교하지 않음(Do Not Compare) | 상대적 플레이어 카운트가 이 구역에서 평가되지 않습니다. |
정보 패널 표시(Info Panel Visible) | False | 정보 패널이 게임플레이 도중에 표시되지 않습니다. |
구역 사용(Use Zone) | True | 이 박스를 체크하면 계산에 전체 맵 대신 구역을 사용합니다. |
구역 너비(Zone Width) | 변수(Variable) | 이 구역이 회수 지점 중 1개 주변의 전체 영역을 커버하도록 설정합니다. |
구역 깊이(Zone Depth) | 변수(Variable) | 이 구역이 회수 지점 중 1개 주변의 전체 영역을 커버하도록 설정합니다. |
구역 높이(Zone Height) | 변수(Variable) | 이 구역이 회수 지점 중 1개 주변의 전체 영역을 커버하도록 설정합니다. |
LargeZone_B와 LargeZone_C 장치에 대해 3단계와 4단계를 반복합니다.
Verse 장치

Verse 스크립트가 참조할 수 있도록 이 장치를 사용하여 다이렉트 이벤트 바인딩에 필요한 장치를 연결합니다.
Verse 장치를 커스터마이징하는 방법은 다음과 같습니다.
- 아웃라이너(Outliner) 탭에서 DominationSpawnManager 를 찾아 선택합니다.

-
디테일(Details) 패널에서 DominationSpawnManager (Instance) 를 선택합니다.
-
아래와 같이 세팅을 커스터마이징합니다.
옵션 값 설명 게임 내 표시(Visible In Game) False 이 장치가 게임에 표시되지 않습니다. 게임 시작 시 활성화(Enabled At Game Start) True 게임 시작 시 이 장치가 활성화됩니다. -
DominationSpawnManager 에서 다음과 같이 세팅합니다.
옵션 값 설명 0 Capture Area_A 어느 팀이 지점을 회수했는지 Verse 스크립트에 알립니다. 1 Capture Area_B 어느 팀이 지점을 회수했는지 Verse 스크립트에 알립니다. 2 Capture Area_C 어느 팀이 지점을 회수했는지 Verse 스크립트에 알립니다. 0 LargeZone_A TriggersLargeZoneEntered 와 함께 작동하며, 플레이어가 영역을 떠나면 Verse 스크립트에 알려 사용 가능한 부활 장치를 추론합니다. 1 LargeZone_B TriggersLargeZoneEntered 와 함께 작동하며, 플레이어가 영역을 떠나면 Verse 스크립트에 알려 사용 가능한 부활 장치를 추론합니다. 2 LargeZone_C TriggersLargeZoneEntered 와 함께 작동하며, 플레이어가 영역을 떠나면 Verse 스크립트에 알려 사용 가능한 부활 장치를 추론합니다.
잠금 장치

잠금 장치는 다수의 플레이어 부활 구역과 페어링됩니다. 각 잠금 장치에는 고유한 이름이 주어져야 합니다.
자물쇠와 문이 달린 생성 옷장을 만들어 플레이어가 다시 들어올 수 없도록 할 수 있습니다.
각 위치를 추적할 수 있도록 연동된 컴포넌트에는 번호를 매기는 것을 권장합니다. 이 튜토리얼에서 닫힌 안전한 부활 구역의 개수는 총 4개입니다.
다음 단계를 따라 1번부터 4번까지의 잠금 장치를 커스터마이징하세요.
-
닫힌 문 외부에 잠금 장치를 배치합니다.
-
문을 커버하도록 2개의 트리거 장치를 방 안에 배치합니다.
a. 트리거 장치는 참조하기 쉬운 방식으로 명명하는 것이 좋습니다. 이 튜토리얼에서 트리거는 TriggerDoorOpen1 ~ 4 및 TriggerDoorClose1 ~ 4로 명명했습니다.
-
아래에 표시된 대로 잠금 장치의 세팅을 커스터마이징합니다.
옵션 값 설명 게임 중에 표시(Visible During Game) False 이 장치가 게임플레이 도중에 표시되지 않습니다. 잠겼을 때 상호작용 숨김(Hide Interaction When Locked) True 게임플레이 도중에 잠겼을 때 플레이어가 상호작용을 볼 수 없습니다. -
잠금 장치와 트리거 장치가 페어링되도록 다이렉트 이벤트 바인딩을 구성합니다.
장치 A | 기능 | 장치 B | 이벤트 | 설명 |
---|---|---|---|---|
잠금(Lock) | 열기 | DoorOpenTrigger1 - DoorOpenTrigger4 | 트리거 시 | TriggerDoorOpen1 장치가 활성화되면 이 문을 엽니다. |
잠금(Lock) | 닫기 | DoorCloseTrigger1 - DoorOpenTrigger4 | 트리거 시 | TriggerDoorClose1 장치가 활성화되면 이 문을 닫습니다. |
각 안전 구역에 이러한 단계를 3번 반복하여 다이렉트 이벤트 바인딩이 그 옆의 트리거와 일치하도록 변경합니다.

문에 트리거 장치를 사용하는 경우, 플레이어가 문과 접촉하면 잠금 장치에 문을 열라는 신호가 전송됩니다. 이는 문에 사용되는 왼쪽 트리거 장치에 표시됩니다.
오른쪽에는 보조 트리거 장치가 2초간 대기한 후 뒤에서 문을 닫으라는 신호를 전송합니다. 이렇게 하면 안에 있는 플레이어가 나갈 수는 있지만, 외부의 잠재적 캠퍼들은 들어올 수 없습니다.
장치를 커스터마이징하는 방법은 다음과 같습니다.
-
다음 표를 따라 TriggerDoorOpen1부터 TriggerDoorClosed4까지 커스터마이징하세요.
옵션 값 설명 게임 내 표시(Visible in Game) False 트리거가 게임플레이 도중에 표시되지 않습니다. VFX 트리거(Trigger VFX) False 이 장치가 비주얼 이펙트를 가지지 않습니다. SFX 트리거(Trigger SFX) False 이 장치가 사운드 이펙트를 가지지 않습니다. -
다음 표를 따라 TriggerDoorClosed1부터 TriggerDoorClosed4까지 커스터마이징하세요.
옵션 값 설명 게임 내 표시(Visible In Game) False 이 장치가 게임플레이 도중에 표시되지 않습니다. 플레이어로 트리거(Triggered by Player) False 플레이어와의 접촉으로 이 트리거가 활성화되지 않습니다. 트리거 지연(Trigger Delay) 2 2초 후 이 장치가 신호를 전송합니다. VFX 트리거(Trigger VFX) False 이 장치가 비주얼 이펙트를 가지지 않습니다. SFX 트리거(Trigger SFX) False 이 장치가 사운드 이펙트를 가지지 않습니다. -
다음으로, 다이렉트 이벤트 바인딩을 구성합니다.
장치 A 기능 장치 B 이벤트 설명 트리거(Trigger) 트리거 TriggerDoorOpen1 - TriggerDoorOpen4 트리거 시 문 트리거가 활성화되면 신호를 전송하여 이 장치가 2초 후 활성화되고 잠금이 열리도록 합니다.
자동으로 열려야 하는 닫힌 문이 있는 각 제한된 방에서 숫자가 증가하도록 명명하면서 이 구성을 반복합니다.

게임플레이 시작 시 문이 계속 열려 있거나, 닫혀 있거나, 잠겨 있게 하고 싶을 수도 있습니다. 이것도 잠금 장치로 구현 가능합니다. 이 예시에서는 이동의 흐름을 개선하기 위해 이 문이 열려 있도록 할 것입니다.
이 메커니즘을 구성하는 방법은 다음과 같습니다.
-
LockDevice5라는 이름의 잠금 장치를 하나 더 배치합니다.
-
아래와 같이 세팅을 커스터마이징합니다.
옵션 값 설명 게임 중에 표시(Visible During Game) False 이 장치가 게임플레이 도중에 표시되지 않습니다. 잠겼을 때 상호작용 숨김(Hide Interaction When Locked) True 게임플레이 도중에 잠겼을 때 플레이어가 상호작용을 볼 수 없습니다. 초기 문 상태(Initial Door Position) 열림(Open) 문이 열린 채 게임플레이를 시작합니다.
HUD 컨트롤러

HUD 컨트롤러 장치 를 사용하여 섬의 다양한 설정을 조정할 수 있습니다. 장치를 구성하는 방법은 다음과 같습니다.
-
섬에 HUD 컨트롤러 장치를 배치합니다.
-
아래와 같이 세팅을 커스터마이징합니다.
옵션 값 설명 HUD 표시(Show HUD) 켜기 UI에 HUD를 표시합니다. 미니맵 표시(Show Minimap) 끄기 UI에서 미니맵을 숨깁니다. HUD 정보 상자 표시(Show HUD Info Box) 켜기 UI에 HUD 정보 상자를 표시합니다. 건설 메뉴 표시(Show Build Menu) 끄기 UI에 빌드 메뉴를 숨깁니다 플레이어 인벤토리 표시(Show Player Inventory) 켜기 플레이어의 인벤토리를 표시합니다. 목재 자원 수 표시(Show Wood Resource) 끄기 UI에서 이 구성요소를 숨깁니다. 석재 자원 수 표시(Show Stone Resource) 끄기 UI에서 이 구성요소를 숨깁니다. 금속 자원 수 표시(Show Metal Resource) 끄기 UI에서 이 구성요소를 숨깁니다. 골드 자원 수 표시(Show Gold Resource) 끄기 UI에서 이 구성요소를 숨깁니다. 맵 점수판 창 표시(Show Map Scoreboard Prompt) 켜기 맵 점수판 창을 표시합니다. 폭풍 타이머 표시(Show Storm Timer) 끄기 UI에 폭풍 타이머를 표시합니다. 플레이어 카운트 표시(Show Player Count) 끄기 UI에 플레이어 수를 숨깁니다. 처치 카운터 표시(Show Elimination Counter) 끄기 UI에 처치 카운터를 숨깁니다. 라운드 타이머 표시(Show Round Timer) 끄기 UI에서 라운드 타이머를 숨깁니다.
장벽 장치

주요 전투 아레나 주변에는 보이지 않는 수많은 장벽 장치가 있어 플레이어가 아레나를 떠날 수 없도록 방지합니다. 생성한 맵에 맞추어 이 장벽 장치들의 수와 크기를 조정할 수 있지만, 다음 기본 세팅을 따라야 합니다.
장벽 장치를 커스터마이징하는 방법은 다음과 같습니다.
-
플레이어가 아레나를 떠날 수 없도록 차단할 위치에 장벽 장치를 배치합니다.
-
아래와 같이 세팅을 커스터마이징합니다.
옵션 값 설명 장벽 재료(Barrier Material) 없음(None) 게임 도중에 보이지 않도록 텍스처를 사용하지 않습니다. 장벽 깊이(Barrier Depth) 변수(Variable) 영역 전체를 포함하도록 필요에 따라 조정합니다. 너비(Width) 변수(Variable) 영역 전체를 포함하도록 필요에 따라 조정합니다. 장벽 높이(Barrier Height) 3 보이지 않는 장벽의 높이를 타일 개수 단위로 결정합니다. -
이 장치를 복사하고 붙여 넣어 아레나 주변에 자연스러운 장벽을 만드세요.
돌연변이 유발 구역 장치

레벨 아래에는 돌연변이 유발 구역 장치가 있습니다. 장치의 너비, 깊이, 높이는 전체 아레나를 포함할 수 있을 만큼 충분해야 합니다.
일부 규칙을 실행하기 위해서는 나의 섬 세팅을 대신하는 일부 세팅이 필요합니다. 장치를 커스터마이징하는 방법은 다음과 같습니다.
-
레벨 아래에 돌연변이 유발 구역 장치를 배치합니다.
-
아래와 같이 세팅을 커스터마이징합니다.
옵션 값 설명 구역 너비(Zone Width) 변수(Variable) 영역 전체를 포함하도록 필요에 따라 조정합니다. 구역 깊이(Zone Depth) 변수(Variable) 영역 전체를 포함하도록 필요에 따라 조정합니다. 구역 높이(Zone Height) 변수(Variable) 영역 전체를 포함하도록 필요에 따라 조정합니다. 크리처에 영향(Affects Creatures) False 크리처가 구역에 영향을 받지 않습니다. 경비에 영향(Affects Guards) False 경비가 구역에 영향을 받지 않습니다. 편집 허용(Allow Editing) False 이 구역에서는 플레이어 구조물 편집이 허용되지 않습니다. VFX 활성화(Enable VFX) False 이 장치가 비주얼 이펙트를 가지지 않습니다. 무기 발사 허용(Allow Weapon Fire) True 플레이어가 구역 내에서 무기를 발사할 수 있습니다. 건설 허용(Allow Building) False 플레이어가 구역 내에서 건설할 수 없습니다. 단계에서 활성화(Enabled On Phase) 항상(Always) 돌연변이 유발 구역이 모든 게임플레이 도중에 항상 켜지고 활성화 상태를 유지합니다. 수집 아이템 수명(Pickup Life Span) True: 25 True로 설정하면 드롭한 모든 아이템이 파괴되기 전 정수 초 단위로 유지됩니다. 이 경우 25초간 유지됩니다. 이를 통해 플레이어가 처치된 플레이어의 무기를 수집할 수 있습니다.
플레이어 편성 추가하기

플레이어가 회수 지점 전투에서 사용할 편성을 만들 수 있습니다. 클래스 선택 UI 장치 와 클래스 설계 장치를 페어링하여 플레이어가 매치 시작 시 선택할 수 있는 클래스를 만들고 표시할 수 있습니다.
각각의 클래스마다 자체 클래스 설계 장치가 필요합니다. 클래스 선택 장치 UI 장치를 1개만 배치할 수도 있습니다.
편성을 구성하는 방법은 다음과 같습니다.
-
클래스 선택 장치 UI 장치를 배치하고 기본 세팅을 사용합니다.
-
플레이어가 사용하도록 할 각 클래스 및 편성에 1개의 클래스 설계 장치를 배치합니다.
a. 클래스 설계 장치에 주 무기를 먼저 등록하고 무기와 탄약을 등록합니다.
-
아래와 같이 세팅을 커스터마이징합니다.
옵션 값 설명 클래스 이름(Class Name) 클래스 선택 장치에서 클래스를 지칭하고 싶은 이름을 입력합니다. 클래스 설명(Class Description) 클래스 선택 장치에서 사용될 클래스 및 편성의 설명을 입력합니다. 클래스 식별(Class Identifier) 각 클래스에는 1부터 X까지 별도의 식별자가 필요합니다. X는 만든 클래스의 개수를 가리킵니다. 지급된 아이템 장착(Equip Granted Item) 1번째 아이템(First Item) 생성 시 등록된 편성의 첫 번째 아이템을 장착합니다.
사운드 이펙트 추가하기

오디오 임포트에 대한 자세한 정보는 여기를 클릭하여 알아보세요.
사운드 이펙트를 가져온 후 콘텐츠 브라우저에서 사운드가 시작되어야 하는 영역으로 드래그하세요.
원하는 영역에 여러 글로벌 사운드 이펙트를 추가할 수도 있습니다.

이렇게 하려면 콘텐츠 브라우저에서 사운드 웨이브를 아레나로 드래그 앤 드롭합니다. 위치는 상관없으니 편리한 방식으로 모아 구성하면 됩니다.

사운드 웨이브 에셋을 열고 디테일 패널에서 루핑(Looping) 을 True 로 설정합니다. 앞에서 생성한 큐와는 달리, 이 사운드는 맵 전체에서 재생되므로 그 외의 다른 작업은 수행하지 않아도 됩니다.
큐는 오디오를 더 고급 수준에서 제어하고 싶을 때 유용합니다.
사운드 웨이브 에셋 커스텀 .wav에서 큐 생성(Create Cue) 을 우클릭하고 선택하여 출력이 연결된 루핑 웨이브 플레이어를 만듭니다. 위의 연결된 블루프린트는 큐가 만들어질 때 자동으로 생성되어야 합니다.
방법은 다음과 같습니다.
웨이브 플레이어(Wave Player) 를 클릭하고 루핑(Looping) 을 True로 설정합니다.
그런 다음 루핑 웨이브 플레이어를 클릭하고 어테뉴에이션 오버라이드(Override Attenuation) 를 True로 변경하여 내부 반경과 감쇠 거리를 설정합니다.
비주얼 이펙트 추가하기

컬러 그레이딩을 사용하거나 카메라 효과를 적용하는 등 포스트 프로세스 이펙트를 사용하여 프로젝트의 룩 앤 필을 변경할 수 있습니다. 포스트 프로세스 볼륨이 레벨 전체에 영향을 미치게 하려면 다음 단계를 따릅니다.
-
레벨에 포스트 프로세스 볼륨(Post Process Volume) 을 추가합니다. 배치하는 단계별 방법은 포스트 프로세스 볼륨 사용하기를 참조하세요.
-
포스트 프로세스 볼륨의 디테일(Details) 패널에서 포스트 프로세스 볼륨 세팅(Post Process Volume Settings) 아래에 있는 무한 규모(언바운드)(Infinite Extent (Unbound)) 를 활성화합니다. 이는 포스트 프로세스 볼륨이 레벨 전체에 영향을 미치게 된다는 의미입니다.
이 프로젝트에는 다음 포스트 프로세스 이펙트가 사용됩니다.
-
블룸: 씬의 밝은 영역에서 연무(Haze)/글로우(Glow)를 제어합니다.
-
색수차: 화면 가장자리에 색상 채널 분리/디스토션을 약간 추가합니다.
-
렌즈 플레어: 밝은 빛이 카메라에 렌즈 플레어를 드리우는 방식을 제어합니다.
-
비녜트: 화면 가장자리에 어두운 그레이디언트를 추가합니다.
-
필름 그레인: 필름 그레인 효과를 추가합니다.
-
컬러 그레이딩: 채도 / 대비 / 감마 중 채도만 조정합니다(씬의 채도가 감소하면 색이 약해지고 회색조에 가까워집니다).
이 프로젝트는 다음 포스트 프로세스 머티리얼도 사용합니다.

-
씬에 아지랑이 효과 적용
-
머티리얼 기반 컬러 그레이딩
-
카메라가 보는 방향 기준 씬 색상 구성

데칼을 추가할 수도 있습니다. 데칼은 머티리얼 에디터에서 만들어 씬으로 드래그합니다.
콘텐츠 브라우저에서 데칼을 찾아 표시하고 싶은 영역에 드래그하세요.
스케일(Scale) 옵션 및 근접(Proximity) 을 사용하여 스태틱 메시에 데칼 액터를 표시할 수 있습니다. 이 방법으로 먼지를 덮어쓴 듯한 텍스처를 추가로 만들거나, 엎질러진 페인트와 같은 요소를 표현할 수 있는 커스텀 텍스처를 만들거나, 스태틱 메시에 신호와 전투 대미지를 생성하도록 브로드캐스트할 수 있습니다.
게임플레이에 Klaxon 라이트를 추가할 수도 있습니다.
Klaxon 라이트는 회전하는 머티리얼 컴포넌트가 있는 스태틱 메시로, 라이트 머티리얼 함수를 사용하여 포인트 라이트와 결합됩니다.
Klaxon은 처음에 FBX 파일로 생성한 후 UEFN에 임포트됩니다.

UEFN에는 3D 오브젝트, 오디오 파일, 텍스처를 비롯하여 다양한 포맷의 콘텐츠를 임포트할 수 있습니다. 임포트하고 싶은 폴더를 우클릭하면 임포트 옵션이 보입니다.

임포트한 오브젝트에는 씬 파일에서 추가된 머티리얼이 필요합니다. 이렇게 하려면 오브젝트를 더블클릭하여 임포트한 오브젝트의 머티리얼 슬롯에 머티리얼을 적용하기만 하면 됩니다.
UEFN에 3D 오브젝트를 임포트하여 사용하는 방법에 대한 자세한 내용은 이 문서에서 다루지 않으며, 다른 튜토리얼에서 확인할 수 있습니다.

나이아가라를 사용하여 동적 비주얼 이펙트를 연출할 수 있습니다.
콘텐츠 브라우저에서 완성된 에셋을 찾아 드래그 앤 드롭합니다. 에셋의 수치는 조정할 수 있습니다.
레벨 시퀀서를 사용하여 애트머스페릭 갈매기가 영역을 선회하도록 게임플레이를 디자인할 수도 있습니다.

이는 핵심 UEFN 콘텐츠 브라우저에서 모든 크리에이터가 사용할 수 있는 글로벌 에셋입니다. 애트머스페릭 갈매기를 추가하려면 콘텐츠 브라우저의 Fortnite 폴더에서 검색하여 Atmospheric Seagulls Orbit을 드래그 앤 드롭합니다.
게임플레이 위로 비행하는 제트기를 추가할 수도 있습니다.

제트기는 시네마틱 시퀀스 장치를 사용합니다. 제트기의 물리적 모델은 비행 레벨 아래에서 숨겨진 상태로 사용됩니다.

제트기에 필요한 레벨 시퀀스를 생성하려면 여기를 클릭하여 자세히 알아보고 직접 만들어 보세요. 여기에는 제트기 트랜스폼 키프레임, 오디오 SFX, 카메라 셰이크, VFX 이미터 등이 포함됩니다.
Verse를 사용하여 시퀀스가 재생되는 시점을 제어할 수 있습니다. 이렇게 하려면 아래의 스크립트를 사용하여 새로운 Verse 장치를 만들어야 합니다.
아래의 Verse 스크립트를 컴파일합니다. 새 장치는 콘텐츠 브라우저에 생성되며, 레벨 내에서 일반적으로 드래그하고 편집할 수 있습니다.
# Copyright Epic Games, Inc. All Rights Reserved.
using { /Fortnite.com/Devices }
using { /Verse.org/Random }
using { /Verse.org/Simulation }
################################################################################
## 이 장치는 시네마틱 시퀀스 장치 배열을 참조하며, 중간에 변수 쿨다운을 사용하여 무작위 재생합니다
################################################################################
sequencer_randomization_device := class<concrete>(creative_device):
# 중간에 랜덤화하기 위한 시네마틱 시퀀스 장치의 배열입니다
@편집가능
SequencerList : []cinematic_sequence_device = array{}
# 다른 시퀀스를 트리거하기 전 대기할 최소/최대 시간입니다
@편집가능
CooldownMin:float = 120.0
@편집가능
CooldownMax:float = 240.0
# 선택할 수 있는 시퀀스가 2개 이상인 경우 동일한 시퀀스가 연속으로 2번 재생되는 것을 방지해야 하는지 여부입니다
@편집가능
PreventBackToBackRepeats:logic = true
# 게임이 시작되면 OnBegin이 실행됩니다
OnBegin<override>()<suspends>:void=
if (SequencerList.Length > 0):
QueueSequence(GetRandomInt(0, SequencerList.Length-1))
# 무작위 대기 시간 동안 기다린 후 시퀀스를 재생합니다
QueueSequence<private>(Index:int)<suspends>:void=
CooldownTime:float = GetRandomFloat(CooldownMin, CooldownMax)
Sleep(CooldownTime)
if (MySequencer := SequencerList[Index]):
MySequencer.Play()
QueueSequence(GetNextIndexToPlay(Index))
# 다음 시퀀스 인덱스가 완전히 무작위인지, 마지막에 재생된 시퀀스를 제외할지 결정합니다
GetNextIndexToPlay<private>(LastIndex:int):int=
if (SequencerList.Length > 1 and PreventBackToBackRepeats?):
var IndexToReturn:int = LastIndex + GetRandomInt(1, SequencerList.Length-1)
if(set IndexToReturn = Mod[IndexToReturn, SequencerList.Length]):
return IndexToReturn
return GetRandomInt(0, SequencerList.Length-1)
비행 방향마다 시네마틱 시퀀스 장치를 추가한 후 다음과 같이 세팅을 변경합니다.
옵션 | 값 | 설명 |
---|---|---|
시퀀스(Sequence) | 생성된 시퀀스 | 이 필드에 시네마틱 레벨 시퀀스를 배치합니다. 이 튜토리얼은 Verse 스크립트가 비행 시간을 무작위로 결정하는 3개의 시네마틱 시퀀스에서 레벨 인스턴스 3개를 사용합니다. |
콘텐츠 브라우저에서 Verse 장치를 추가하고 다음과 같이 세팅을 변경합니다.

옵션 | 값 | 설명 |
---|---|---|
CooldownMin | 180 | 제트기 비행이 다시 발생하기 전의 최소 쿨다운 대기 시간입니다(초 단위). |
CooldownMax | 500 | 다음 제트기 비행 전 Verse 스크립트가 기다릴 최대 쿨다운 대기 시간입니다(초 단위). |
PreventBackToBackRepeats | True | 연결된 시퀀서가 2개 이상이면 제트기가 같은 방향으로 2번 비행하지 않습니다. |
시네마틱 시퀀스 장치가 트리거하려면 각 장치에 대한 레퍼런스도 필요합니다.
장치 A | 기능 | 장치 B | 이벤트 | 설명 |
---|---|---|---|---|
시퀀서 장치 목록(Sequencer List) | 제트 비행 | 시네마틱 시퀀스 장치(CinematicSequenceDevice) | 1-3 | 각 시네마틱 시퀀스 장치에 레퍼런스를 추가합니다. |

레벨 시퀀스와 시네마틱 시퀀스 장치를 사용하여 이동 파이프를 만들 수도 있습니다.