Verse 폭발 템플릿(Verse Detonation Template)에서는 두 팀이 정해진 위치의 폭탄을 설치 또는 해체하는 게임을 제작하는 방법을 보여줍니다.
이 튜토리얼에서는 Verse 장치와 지도 표시 장치 같은 기본 장치를 사용하여 조건에 따라 표식을 표시하는 등의 게임플레이 메커니즘을 수행합니다.
이 템플릿은 다음과 같은 Verse 개념을 선보입니다.
열거형
동시실행
race
Await
개요
다음은 이 섬을 다시 생성하는 데 필요한 단계와 이상적인 순서에 대한 개요입니다.
새 프로젝트를 생성하고 섬 설정을 수정하여 게임을 구성합니다.
장치를 구성합니다.
Verse 스크립트를 추가합니다.
Verse 장치를 구성합니다.
새 프로젝트 생성 및 게임 구성하기
UEFN을 실행하여 신규 빈 프로젝트를 생성합니다.
아웃라이너(Outliner)에서 섬 설정(IslandSettings) 장치를 선택하여 사용자 옵션 - 게임 규칙(User Options - Game Rules)을 찾습니다.
사용자 옵션을 아래와 같이 수정합니다.
| 옵션 | 값 | 설명 |
|---|---|---|
팀(Teams) | 팀 인덱스(Team Index) 2 | 플레이어를 2개 팀으로 나눕니다. |
총 라운드(Total Rounds) | 5 | 5라운드를 진행한 후 게임이 종료됩니다. |
다른 팀 관전 허용(Allow Spectating Other Teams) | 허용 안 함 | 플레이어는 다른 팀을 관전할 수 없습니다. |
무한 건설 자원(Infinite Building Resources) | False | 플레이어는 게임 중에 건축 재료를 무제한 보유할 수 없습니다. |
건설 시 환경 파괴(Building Can Destroy Environment) | False | 플레이어 구조물을 배치해도 구조물과 겹치는 부분의 환경이 파괴되지 않습니다. |
환경 피해(Environment Damage) | Off | 플레이어는 게임 중에 환경에 피해를 줄 수 없습니다. |
곡괭이 파괴력(Pickaxe Destruction) | None | 곡괭이로 환경 또는 건물에 피해를 줄 수 없습니다. |
수동 부활 허용(Allow Manual Respawning) | False | 플레이어가 게임 중 부활(Respawn) 메뉴 옵션을 사용할 수 없습니다. |
팀 점수 사용(Use Team Score) | True | 게임의 각 팀 점수는 플레이어의 점수를 합산하여 얻습니다. |
장치 구성하기
이 튜토리얼에서는 다음 장치를 사용합니다.
폭발 장치(8)
시간 설정 목표 장치(2)
지도 표시 장치(4)
게임 종료 장치(1)
플레이어 생성 패드(N)
Verse 장치(1)
폭발 장치
Verse와 폭발(Explosive) 장치를 사용하여 격발 타이머를 통한 폭발을 일으킵니다. 맵의 각 모서리에 폭발 장치를 4개 복사 및 배치합니다.
이 장치를 구성하려면 사용자 옵션(User Options)을 다음과 같이 환경설정합니다.
| 옵션 | 값 | 설명 |
|---|---|---|
피해받기 가능(Can Be Damaged) | False | 이 장치는 플레이어에게 피해를 받지 않습니다. |
시간 설정 목표
시간 설정 목표(Time Objective) 장치는 각 지점의 격발기 역할을 합니다. 시간 설정 목표 장치를 두 그룹의 폭발 장치에 배치합니다.
이 장치를 구성하려면 사용자 옵션(User Options)을 다음과 같이 환경설정합니다.
| 옵션 | 값 | 설명 |
|---|---|---|
시간(Time) | 30 | 목표의 타이머 길이를 설정합니다. |
시작 점수(Start Score) | 2 | 시작하지 않은 타이머를 성공적으로 시작하면 받게 되는 점수를 설정합니다. |
중단 점수(Stop Score) | 5 | 활성 상태인 타이머를 성공적으로 중단하면 받게 되는 점수를 결정합니다. |
완료 점수(Completed Score) | 3 | 타이머가 완료될 때 받게 되는 점수를 설정합니다. |
타이머 라벨 텍스트 스타일(Timer Label Text Style) | 굵게(주황색)(Bold Orange) | 카운트다운 표시와 커스텀 텍스트의 스타일을 설정합니다. |
시작 팀 필터(Start Team Filter) | 팀 인덱스(Team Index) 1 | 시작되지 않은 타이머를 시작할 수 있는 팀을 결정합니다. |
시작 상호작용 텍스트(Start Interact Text) | 폭탄 설치 | 시작되지 않은 타이머를 시작할 수 있는 플레이어에게 메시지로 표시할 커스텀 텍스트를 설정합니다. |
시작 상호작용 시간(Start Interact Time) | 5 | 시작되지 않은 타이머를 시작하는 데 필요한 상호작용의 길이를 결정합니다. |
중단 팀 필터(Stop Team Filter) | 팀 인덱스(Team Index) 2 | 활성 타이머를 중단할 수 있는 팀을 결정합니다. |
중단 상호작용 텍스트(Stop Interact Text) | 폭탄 해체 | 활성 타이머를 중단할 수 있는 플레이어에게 메시지로 표시할 커스텀 텍스트를 설정합니다. |
중단 상호작용 시간(Stop Interact Time) | 5.0 | 활성 타이머를 중단하는 데 필요한 상호작용의 길이를 결정합니다. |
타이머 음향 거리(Timer Sound Distance) | 전체 지도 | 타이머를 맵의 특정 지역에서만 들을 수 있는지, 아니면 맵 어디에서나 들을 수 있는지 결정합니다. |
지도 표시 장치
지도 표시 장치(Map Indicator)를 사용하여 미니맵에 커스텀 마커를 생성합니다. 팀별로 폭발물이 배치된 각 위치 위에 하나씩, 지도 표시 장치 두 개를 배치합니다.
이 장치를 구성하려면 사용자 옵션(User Options)을 다음과 같이 환경설정합니다.
| 옵션 | 값 | 설명 |
|---|---|---|
아이콘 색상(Icon Color) | 색 선택 | 표시되는 아이콘의 색상을 설정합니다. 각 팀을 상징하는 색을 선택합니다. |
텍스트(Text) | 폭발물 A - 폭발물 B | 한 쌍의 지도 표시 장치 중에서 하나는 '폭탄 A', 다른 하나는 '폭탄 B'로 명명합니다. |
게임 종료 장치
Verse 스크립트를 통해 폭탄을 해체하는 데 성공하거나, 30초가 경과되어 폭탄이 폭발하는 경우 게임 종료(End Game) 장치를 사용하여 라운드를 종료합니다.
이 장치를 구성하려면 사용자 옵션(User Options)을 다음과 같이 환경설정합니다.
| 옵션 | 값 | 설명 |
|---|---|---|
승리 팀(Winning Team) | Activating Team | 장치를 활성화하는 팀이 게임에서 승리합니다. |
종료 대상(What to End) | End Round | 이 장치는 게임 라운드를 종료합니다. |
플레이어 생성 패드 장치
맵의 양 방향에 팀의 플레이어 생성 패드(Player Spawn Pad) 장치를 그룹화합니다. 각 팀은 부활 장치를 갖추며 팀 1은 폭탄 설치를, 팀 2는 폭탄 해체를 맡습니다. 팀 역할은 매 라운드마다 교대합니다.
이 장치를 구성하려면 사용자 옵션(User Options)을 다음과 같이 환경설정합니다.
| 옵션 | 값 | 설명 |
|---|---|---|
플레이어 팀(Player Team) | 팀 인덱스(Team Index) 1 - 2 | 생성 패드 한 세트 중에서 하나는 팀 인덱스 1로, 다른 하나는 팀 인덱스 2로 설정합니다. |
Verse 스크립트 추가하기
다음 Verse 스크립트를 추가하여 @editable 함수로 장치를 참조하는 것부터 시작합니다.
쓰인 순서대로 코드를 복사하면 됩니다. 코멘트는 스크립트를 명확하게 설명하기 위해 추가됩니다.
# enum to determine the state of the bombs
bomb_state<public>:= enum {AllUnarmed, BombAArmed, BombBArmed}위 코드는 폭탄의 상태를 추적할 열거형을 정의합니다.
search_and_destroy := class(creative_device):
Logger:log = log{Channel:=log_search_and_destroy}
@editable
TimedObjectiveA: timed_objective_device = timed_objective_device{}
@editable
@editable를 사용해 장치를 레퍼런스할 수 있습니다.
# Runs when the device is started in a running game
OnBegin<override>()<suspends>:void=
# The race expression is used to run a block of two or more async expressions concurrently (simultaneously). When the fastest expression completes, it "wins the race".
# https://www.fortnite.com/en-US/creative/docs/uefn/race-in-verse
race:
코드의 첫 섹션은 race를 사용하여 폭탄 A 또는 폭탄 B 중 먼저 설치된 폭탄을 결정하는 동시성을 표시합니다.
block:
# Wait for Bomb B to be armed
ArmingPlayer:= TimedObjectiveB.StartedEvent.Await()
Print("Bomb B Armed",?Duration:=5.0)
위 코드는 스크립트가 시간 제한 목표의 완료 또는 중지까지 기다리는 동시성을 보여줍니다.
# Disable the unarmed Beacons and enable the Beacon over the armed bomb
UpdateBeacons():void=
BombABeaconArm.Disable()
BombBBeaconArm.Disable()
위 코드는 어떤 폭탄이 설치되었는지에 따라 표식의 상태를 업데이트합니다.
BombDetonated(Agent:agent):void=
Print("Bomb Detonated", ?Duration:=5.0)
# Determine which set barrels should explode
if:
BombState = bomb_state.BombAArmed
위 메서드는 시간 설정 목표 장치가 완료되었을 때 호출됩니다. 어느 배럴을 폭발시키고 게임을 종료할지 정합니다.
ExplodeBarrels(Barrels:[]explosive_device, Agent:agent):void=
for (Barrel : Barrels):
Barrel.Explode(Agent)
위 for는 루프하여 올바른 폭탄 위치에 있는 각 통을 폭파합니다.
Verse 장치
Verse 스크립트를 컴파일한 다음 콘텐츠 드로어(Content Drawer)에서 장치를 찾습니다. Verse 장치를 맵의 미확인 영역으로 드래그하여 세팅을 커스터마이징합니다.
Verse 스크립트가 참조할 수 있도록 이 장치를 사용하여 다이렉트 이벤트 바인딩에 필요한 장치를 연결합니다.
장치의 디테일(Details) 패널에서 레퍼런스된 각 장치가 위 사진과 일치하도록 세팅을 환경설정합니다.
이 장치를 구성하려면 사용자 옵션(User Options)을 다음과 같이 환경설정합니다.
| 옵션 | 값 | 설명 |
|---|---|---|
TimeObjectiveA | Timed Objective BombSiteA | 시간 설정 목표 장치를 폭발 지점과 연결합니다. |
TimeObjectiveB | Timed Objective BombSiteB | 시간 설정 목표 장치를 폭발 지점과 연결합니다. |
ExplosiveBarrelsA | 0 - BarrelBombSiteA_1 | 폭발 장치를 연결합니다. |
ExplosiveBarrelsA | 1 - BarrelBombSiteA_2 | 폭발 장치를 연결합니다. |
ExplosiveBarrelsA | 2 - BarrelBombSiteA_3 | 폭발 장치를 연결합니다. |
ExplosiveBarrelsA | 3 - BarrelBombSiteA_4 | 폭발 장치를 연결합니다. |
ExplosiveBarrelsB | 0 - BarrelBombSiteB_1 | 폭발 장치를 연결합니다. |
ExplosiveBarrelsB | 1 - BarrelBombSiteB_2 | 폭발 장치를 연결합니다. |
ExplosiveBarrelsB | 2 - BarrelBombSiteB_3 | 폭발 장치를 연결합니다. |
ExplosiveBarrelsB | 3 - BarrelBombSiteB_4 | 폭발 장치를 연결합니다. |
EndGameDevice | End Game Device2 | 게임 종료 장치를 연결합니다. |
BombAMapIndicators | 0 - Map_Team1_BombsiteA | 지도 표시 장치와 폭탄 위치를 연결합니다. |
BombAMapIndicators | 1 - Map_Team2_BombsiteA | 지도 표시 장치와 폭탄 위치를 연결합니다. |
BombBMapIndicators | 0 - Map_Team1_BombsiteB | 지도 표시 장치와 폭탄 위치를 연결합니다. |
BombBMapIndicators | 1 - Map_Team2_BombsiteB | 지도 표시 장치와 폭탄 위치를 연결합니다. |
BombABeaconArm | BeaconArmBombSiteA | 위치 A에 폭탄을 설치합니다. |
BombABeaconDisarm | BeaconDisarmBombSiteA | 위치 A의 폭탄을 해체합니다. |
BombBBeaconArm | BeaconArmBombSiteB | 위치 B에 폭탄을 설치합니다. |
BombBBeaconDisarm | BeaconDisarmBombSiteB | 위치 B의 폭탄을 해체합니다. |
세션 시작(Launch Session)을 선택하여 완성된 레벨을 테스트합니다.