카메라는 게임의 룩 앤 필에 중요한 역할을 합니다. 3인칭 시점 카메라는 플레이어가 공간을 더욱 잘 이해할 수 있게 해주는 반면, 1인칭 시점 카메라는 플레이어가 게임 세계를 한층 가까이서 볼 수 있도록 해줍니다. 게임플레이 중에 카메라를 전환하여 다양한 느낌을 유발할 수 있으며, 여러 카메라 간의 전환을 통해 경험을 상당히 다양하게 연출할 수 있습니다. 예를 들어, 고정된 카메라로 횡스크롤 섹션을 생성하여 재미있는 플랫폼 챌린지를 만들 수도 있습니다.
UEFN에서는 Verse를 사용하여 카메라 변경을 처리할 수 있습니다. 이벤트를 수신하는 장치를 사용하면, 플레이어에게 카메라를 추가해 이벤트가 트리거될 때 시점을 변경하도록 할 수 있습니다. 이 예시에서는 시네마틱 끝에서 선회 카메라 장치를 플레이어에게 추가해 봅니다. 선회 카메라의 세팅을 수정하여 1인칭 시점을 시뮬레이션하고, 시네마틱 끝에 카메라를 추가하여 3인칭에서 1인칭으로의 매끄러운 전환을 연출할 수 있습니다. 예시에 추가된 게임플레이에서는 플레이어가 무기를 집어 들고 문에 휘둘러 시네마틱을 트리거하도록 합니다. 플레이어가 렌치를 돌려 문제가 생긴 함선의 문을 고치거나 망치를 휘둘러 바위를 부순 후 비밀 영역을 드러내는 경우와 같이, 이 예시를 경험의 필요한 부분에 맞게 맞춤화할 수 있습니다. 또한 새로운 영역에 진입할 때 와이드 샷을 사용하거나, 플레이어가 퍼즐을 풀어야 할 때 톱다운 시점으로 전환하거나, 으스스한 공포 경험에서 1인칭 시점을 사용하는 등, 이러한 콘셉트를 더 폭넓게 적용하여 멋진 게임플레이 순간을 연출할 수도 있습니다.
이 튜토리얼을 따라 플레이어가 문을 열 때 시네마틱 시퀀스를 사용하여 플레이어를 3인칭에서 1인칭으로 전환하는 Verse 장치를 생성하는 방법을 알아보세요.
이 예시에서는 다음 Verse 언어 기능을 사용합니다.
클래스: 이 예시는 플레이어가 문을 열면 시네마틱을 활성화하는 Verse 클래스를 생성합니다.
옵션: 옵션 변수에 등록 가능한 이벤트를 저장할 수 있으며, 나중에 해당 이벤트에 대한 등록을 취소할 수 있습니다.
예시에서는 다음 API를 사용합니다.
Subscribable: 이벤트에 등록하여 플레이어가 문 옆 볼륨에 진입하는 시점을 파악하고, 버튼과 상호작용할 때 아이템을 지급합니다.
레벨 구성하기
이 예시에서는 다음과 같은 장치를 사용합니다.
버튼 장치(1): 플레이어가 버튼과 상호작용할 때 플레이어가 아이템 지급 장치에서 검을 받게 됩니다.
아이템 지급 장치(1): 아이템 지급 장치에서 플레이어가 문을 통과해서 계속 진행하는 데 필요한 검을 플레이어에게 지급합니다.
조건부 버튼 장치(1): 플레이어가 필수 검을 보유하지 않으면 문을 통과해서 진행할 수 없도록, 필수 무기가 조건부 버튼의 열쇠 아이템(Key Item)으로 설정됩니다.
입력 트리거 장치(1): 이 장치는 발사 입력 액션을 수신하여 플레이어가 공격할 때 문을 엽니다. 플레이어가 검을 보유하고 있으며 문이 아직 열리지 않은 상태로 플레이어가 볼륨 장치 내부에 있을 때만 문이 열립니다.
볼륨 장치(1): 검을 사용한 공격 트리거만으로 문이 열려서는 안 되므로, 볼륨 장치는 플레이어가 문 바로 옆에 있어야만 문이 열리도록 합니다.
시네마틱 시퀀스 장치(1): 3인칭에서 1인칭으로 매끄러운 전환을 연출하기 위해, 문이 열리는 것을 보여주는 시네마틱을 재생한 후 카메라가 1인칭으로 플레이어 시점에 맞춰지도록 위치를 조정합니다.
선회 카메라 장치(1): 플레이어의 1인칭 시점을 생성하기 위해, 캐릭터의 가슴 내부에 위치한 선회 카메라를 사용하여 1인칭 시점을 모방합니다. 이러한 시점 변경은 플레이어가 문을 열 때 시네마틱 재생 이후에만 발생해야 합니다.
잠금 장치(1): 잠금 장치는 플레이어가 필요한 무기를 획득하기 전에는 문을 열 수 없도록 문을 잠금 상태로 유지합니다.
지도 표시 장치(1): 지도 표시 장치는 플레이어가 무기를 주울 때 미니맵에 문 위치를 표시합니다.
레벨을 구성하려면 다음 단계를 따릅니다.
아이템 지급 장치 및 버튼
플레이어에게 문을 여는 데 필요한 무기를 지급하려면 아이템 지급 장치와 버튼 장치를 사용합니다. 플레이어가 버튼과 상호작용하면 아이템 지급 장치가 플레이어에게 무기를 지급합니다. 이러한 엘리먼트를 추가하려면 다음 단계를 따릅니다.
아이템 지급 장치(Item Granter) 하나를 레벨에 추가합니다.
아웃라이너(Outliner)에서 아이템 지급 장치를 선택합니다. 디테일(Details) 패널의 사용자 옵션(User Options)에서 값을 다음과 같이 설정합니다.
옵션 값 설명 아이템 정의(Item Definition)
검(Sword)
플레이어가 문을 여는 데 사용하는 무기입니다.
지급된 아이템 장착(Equip Granted Item)
True
이 예시에서는 플레이어가 무기를 주워 즉시 장착합니다.
버튼(Button) 장치 하나를 레벨에 추가합니다.
아웃라이너에서 버튼을 선택합니다. 디테일(Details) 패널의 사용자 옵션(User Options)에서 값을 다음과 같이 설정합니다.
옵션 값 설명 상호작용 텍스트(Interaction Text)
'줍기(Pick Up)'
플레이어가 버튼과 상호작용하도록 유도하는 텍스트입니다.
트리거 가능 횟수(Times Can Trigger)
1
이 예시에서 플레이어는 무기를 한 번만 주울 수 있습니다.
입력 트리거
플레이어가 무기를 휘두르는 시점을 파악하기 위해 특정 액션을 수신하는 입력 트리거를 사용할 수 있습니다. 플레이어가 무기를 휘두를 때 입력 트리거가 활성화됩니다. 입력 트리거를 추가하려면 다음 단계를 따릅니다.
입력 트리거(Input Trigger) 장치 하나를 레벨에 추가합니다.
아웃라이너에서 입력 트리거를 선택합니다. 디테일(Details) 패널의 사용자 옵션(User Options)에서 값을 다음과 같이 설정합니다.
옵션 값 설명 입력 유형(Input Type)
일반 액션(Standard Action)
플레이어가 무기를 휘두르는 시점을 파악하기 위해 입력 트리거가 수신해야 하는 일반 액션은 발사(Fire)입니다.
일반 입력(Standard Input)
Fire
플레이어가 무기를 휘두르는 시점을 파악하기 위해 입력 트리거가 수신해야 하는 액션은 발사입니다.
HUD에 표시(Show on HUD)
끄기
이 액션을 HUD에 표시할 필요가 없습니다.
볼륨
플레이어가 문을 열기 위해 문에 가까이 왔는지 확인하기 위해, 문 근처에서 볼륨 장치를 사용하여 플레이어가 장치 안으로 들어왔는지 확인할 수 있습니다. 볼륨 장치를 추가하려면 다음 단계를 따릅니다.
레벨의 적절한 위치에 문을 추가합니다. 이 문이 플레이어가 무기를 사용하여 여는 문입니다.
볼륨(Volume) 장치 하나를 레벨에 추가합니다. 이 볼륨 장치는 문 앞에 작은 영역 또는 플레이어가 공격하도록 할 영역과 겹쳐야 합니다.
transform gizmo(트랜스폼 기즈모)를 수정하여 공격 시 플레이어가 위치하도록 할 영역에 맞게 볼륨 장치의 크기를 변경합니다. 입력 트리거는 플레이어가 이 볼륨 내부에 있는 동안 발사 이벤트만 수신하므로, 경험에서 필요한 정도에 맞게 크기를 조절해야 합니다.
잠금 장치
플레이어가 무기를 획득하기 전에는 문을 열 수 없도록 잠금 장치를 사용하여 문을 잠글 수 있습니다. 잠금 장치를 추가하려면 다음 단계를 따릅니다.
잠금(Lock) 장치를 추가하여 문에 어태치합니다.
아웃라이너에서 잠금 장치를 선택합니다. 디테일 패널의 사용자 옵션에서 게임 내 표시(Visible in Game)를 false로 설정합니다.
지도 표시 장치
플레이어가 도달해야 하는 장소가 무기를 획득하는 장소에서 떨어져 있는 경우, 지도 표시 장치를 사용하여 플레이어에게 어디로 갈지 보여주면 플레이에 도움이 됩니다. 지도 표시 장치는 맵과 미니맵에 이미지를 표시하며, 플레이어에게 문을 직접 가리키는 오브젝트 펄스를 활성화할 수 있습니다. 지도 표시 장치를 추가하려면 다음 단계를 따릅니다.
지도 표시 장치(Map Indicator)를 문 아래에 숨긴 상태로 레벨에 추가합니다.
아웃라이너에서 지도 표시 장치를 선택합니다. 디테일 패널의 사용자 옵션을 다음과 같이 설정합니다.
옵션 값 설명 게임 시작 시 사용
False
지도 표시 장치는 플레이어가 무기를 주운 후에만 사용해야 합니다.
작은 아이콘(Small Icon)
아이콘 선택
미니맵에 표시할 아이콘을 선택합니다.
큰 아이콘(Large Icon)
아이콘 선택
맵에 표시할 아이콘을 선택합니다.
조건부 아이템 버튼
플레이어가 문을 여는 데 필요한 올바른 무기를 휘두르고 있는지 파악하기 위해, 조건부 아이템 버튼을 사용하여 플레이어가 무기를 휘두를 때 가지고 있는 무기를 확인합니다. 조건부 아이템 버튼을 추가하려면 다음 단계를 따릅니다.
조건부 아이템 버튼(Conditional Item Button) 장치 하나를 레벨에 추가합니다.
아웃라이너에서 조건부 아이템 버튼을 선택합니다. 디테일(Details) 패널의 사용자 옵션(User Options)에서 값을 다음과 같이 설정합니다.
옵션 값 설명 열쇠 아이템 소모(Consume Key Items)
끄기
문을 열 때 플레이어가 무기를 사용하지 않도록 하려는 경우에 설정합니다.
열쇠 아이템 1(Key Item 1) 아이템 정의(Item Definition)
무기
플레이어가 문을 여는 데 필요한 무기입니다.
선회 카메라
1인칭 시점을 시뮬레이션하기 위해 선회 카메라를 사용하여 플레이어의 시점을 변경합니다. 선회 카메라를 추가하려면 다음 단계를 따릅니다.
선회 카메라(Orbit Camera) 장치 하나를 레벨에 추가합니다.
아웃라이너에서 선회 카메라 버튼을 선택합니다. 디테일 패널의 카메라(Camera)에서 값을 다음과 같이 설정합니다.
옵션 값 설명 거리(Distance)
0.0cm
1인칭 시점에 필요한 파라미터입니다.
오프셋 X(Offset X)
27.0cm
1인칭 시점에 필요한 파라미터입니다.
오프셋 Y(Offset Y)
0.0cm
1인칭 시점에 필요한 파라미터입니다.
오프셋 Z(Offset Z)
76.0cm
1인칭 시점에 필요한 파라미터입니다.
수평 속도(Horizontal Speed)
0.0cm/s
1인칭 시점에 필요한 파라미터입니다.
디테일 패널의 전환(Transition)에서 값을 다음과 같이 설정합니다.
옵션 값 설명 전환 들어가기 시간(Transition In Time)
0.0s
1인칭 시점에 필요한 파라미터입니다.
전환 나오기 시간(Transition Out Time)
0.1s
1인칭 시점에 필요한 파라미터입니다.
전환 나오기 유형(Transition Out Type)
이즈 아웃(Ease-Out)
1인칭 시점에 필요한 파라미터입니다.
시네마틱 시퀀스
문을 열 때 시네마틱을 트리거하려면 시네마틱 시퀀스 장치가 시네마틱을 재생하도록 해야 합니다. 시네마틱 시퀀스를 추가하려면 다음 단계를 따릅니다.
시네마틱 시퀀스(Cinematic Sequence) 장치를 레벨에 추가합니다.
콘텐츠 브라우저(Content Browser)에서 레벨에 사용할 시네마틱 시퀀스를 생성합니다. 시네마틱 시퀀스는 카메라를 초기 각도에서 일인칭 시점으로 전환하는 동안 이전에 구성한 선회 카메라를 사용하여 열리는 문을 보여주어야 합니다. 자신만의 시네마틱 시퀀스를 만드는 방법에 대한 자세한 내용은 시네마틱 및 컷씬 제작하기를 확인하세요.
아웃라이너에서 시네마틱 시퀀스를 선택합니다. 그런 다음 디테일 패널의 사용자 옵션에서 시네마틱 시퀀스에 시퀀스(Sequence)를 할당합니다.
이미지를 클릭하면 확대됩니다.
Verse를 사용한 문 열기 시네마틱
시네마틱을 재생하고 문을 열기 위한 로직을 처리하기 위해서는 Verse 장치를 사용합니다. 이 장치는 볼륨 장치 내부에서 무기를 휘두르는 플레이어를 수신한 다음, 시네마틱 시퀀스를 재생하고 문을 열고, 플레이어를 1인칭 시점으로 전환합니다.
필드 구성하기
Verse 장치를 생성하려면 다음 작업을 수행합니다.
Verse 익스플로러를 사용하여 새 Verse 장치를 생성하고
door_open_cinematic_manager로 명명합니다.door_open_cinematic_manager클래스 정의 위에 이 장치 전용 메시지를 출력하기 위한 로그 채널을 추가합니다. 이후 로그 채널에 사용할 클래스 정의에 로거를 추가합니다.Versedoor_open_channel := class(log_channel){} # A Verse-authored creative device that can be placed in a level door_open_cinematic_manager := class(creative_device): Logger:log = log{Channel := door_open_channel}door_open_cinematic_manager클래스 정의에 다음 필드를 추가합니다.DoorVolume으로 명명한 편집 가능 볼륨 장치입니다. 문을 열기 위해 플레이어가 그 내부에 있어야 하는 볼륨입니다.Verse# The volume the player needs to be inside of to open the door. @editable DoorVolume:volume_device = volume_device{}FireTrigger로 명명한 편집 가능 입력 트리거 장치입니다.DoorVolume내부에 있는 동안 무기를 휘두르는 플레이어를 수신합니다.Verse# The input trigger that listens for the player swinging their weapon # when inside the DoorVolume. @editable FireTrigger:input_trigger_device = input_trigger_device{}ConditionalButton으로 명명한 편집 가능 조건부 버튼 장치입니다. 플레이어가 볼륨 장치 내부에 있을 때 올바른 무기를 장착하고 있는지 확인합니다.Verse# The Conditional Item Button that checks that the player has the correct weapon. @editable ConditionalButton:conditional_button_device = conditional_button_device{}DoorLock으로 명명한 편집 가능 잠금 장치입니다. 플레이어가 올바른 무기를 가지고 있지 않은 경우 문을 잠금 상태로 유지합니다.Verse# The lock device that prevents the door from being opened. @editable Door:lock_device = lock_device{}CinematicSequence로 명명한 편집 가능 시네마틱 시퀀스 장치입니다. 문을 열 때 카메라 전환으로 이어지는 시네마틱을 재생합니다.Verse# The cinematic sequence device that plays the cinematic when opening the door. @editable CinematicSequence:cinematic_sequence_device = cinematic_sequence_device{}ObjectiveMarker로 명명한 편집 가능 지도 표시 장치입니다. 무기를 주우면 미니맵에 문 위치를 표시합니다.Verse# The map indicator device that shows the location of the door. @editable ObjectiveMarker:map_indicator_device = map_indicator_device{}ItemGranter로 명명한 편집 가능 아이템 지급 장치입니다. 계속 진행하기 위해 필요한 무기를 플레이어에게 지급합니다.Verse# The item granter device that grants the player the weapon they need. @editable ItemGranter:item_granter_device = item_granter_device{}ItemGrantButton으로 명명한 편집 가능 버튼 장치입니다.ItemGranter를 활성화하여 플레이어에게 필요한 무기를 지급합니다.Verse# The button that activates the ItemGranter granter. @editable ItemGrantButton:button_device = button_device{}FPSCamera로 명명한 편집 가능 선회 카메라 장치입니다. 1인칭 시점을 시뮬레이션하며, 시네마틱이 종료된 후 플레이어에게 추가됩니다.Verse# The orbit camera that simulates a first-person view. @editable FPSCamera:gameplay_camera_orbit_device = gameplay_camera_orbit_device{}IsDoorOpen으로 명명한logic변수입니다. 이 필드는 문이 이미 열려 있는 경우 시퀀스를 재생하지 않도록 문이 이미 열려 있는지를 추적합니다.Verse# A variable that tracks whether the door is already open. var IsDoorOpen:logic = falseFireSubscription으로 명명한optioncancelable변수입니다.FireTriggerPressedEvent에 대한 등록을 저장합니다. 시네마틱 시퀀스는 플레이어가 문 바로 옆에 있을 때만 트리거됩니다. 취소 가능한 이러한 등록은 플레이어가 문에서 너무 멀어지면 플레이어를FireTrigger에서Unregister합니다.Verse# A cancelable subscription to the FireTrigger device. var FireSubscription:?cancelable = false
시네마틱 재생하기
문이 열릴 때, 문이 열리는 것을 보여주는 시네마틱이 시작되고 플레이어의 시점을 3인칭에서 1인칭으로 전환합니다. 플레이어가 문을 열 때 시네마틱을 활성화하려면 다음 단계를 따릅니다.
새로운 메서드
PlayCinematic()을door_open_cinematic_manager클래스 정의에 추가합니다. 새로운 메서드PlayCinematic()을door_open_cinematic_manager클래스 정의에 추가합니다. 이 함수는 문을 여는 플레이어를 가져온 다음 시네마틱을 재생하고 잠금 장치를 사용하여 문을 엽니다.Verse# Plays a cinematic and unlocks the door. PlayCinematic(Agent:agent):void=PlayCinematic()은 먼저CinematicSequence로 시네마틱 시퀀스를 재생한 다음,Unlock()및Open()을 각각 사용하여 문을 잠금 해제하고 엽니다.Verse# Plays a cinematic and unlocks the door. PlayCinematic(Agent:agent)<suspends>:void= Logger.Print("Player is holding item, playing cinematic...") CinematicSequence.Play() # Unlock the door, then open it. Door.Unlock(Agent) Door.Open(Agent)마지막으로
AddTo()를 통해 플레이어에게 선회 카메라를 추가하여 플레이어의 시점을 3인칭에서 1인칭으로 변경한 다음 목표 마커를 비활성화합니다. 완성된PlayCinematic()함수는 다음과 같습니다.Verse# Plays a cinematic and unlocks the door. PlayCinematic(Agent:agent)<suspends>:void= Logger.Print("Player is holding item, playing cinematic...") CinematicSequence.Play() # Unlock the door, then open it. Door.Unlock(Agent) Door.Open(Agent) set IsDoorOpen = true시네마틱은 플레이어가 필요한 아이템을 잡고 있을 때만 재생되어야 하며, 문이 이미 열린 후에는 다시 재생되면 안 됩니다. 이 로직을 처리하려면 새로운 메서드
CheckCinematic()을door_open_cinematic_manager클래스 정의에 추가합니다. 이 함수는DoorVolume내부에 있는 플레이어를 가져와 해당 플레이어가 필요한 아이템을 가지고 있는지 확인합니다.Verse# Check if the player has the required item and the door isn't already open. CheckCinematic(Agent:agent):void=CheckCinematic()은IsHoldingItem[]을 사용하여 플레이어가ConditionalButton에 등록된 아이템을 가지고 있는지 확인하며, 문이 아직 잠금 해제되지 않았는지 확인하기 위해IsDoorOpen이 false인지 확인합니다. 두 조건을 만족하면PlayCinematic()함수를spawn{}하여 문을 여는 플레이어를 통과시켜 줍니다. 완성된CheckCinematic()함수는 다음과 같습니다.Verse# Check if the player has the required item and the door isn't already open. CheckCinematic(Agent:agent):void= if: ConditionalButton.IsHoldingItem[Agent] and not IsDoorOpen? then: spawn{PlayCinematic(Agent)}
플레이어 추적 및 아이템 지급하기
플레이어가 문을 열기 위해서는 DoorVolume 내부에 있는 동안 무기를 휘둘러야 하므로, 입력 트리거 장치가 해당 이벤트를 수신해야 합니다. 입력 트리거에서 플레이어가 무기를 휘두를 때를 수신하도록 하려면 다음 단계를 따릅니다.
새로운 메서드
OnPlayerEntersVolume()을door_open_cinematic_manager클래스 정의에 추가합니다. 이 함수는 에이전트를 가져와 에이전트가DoorVolume에 진입할 때FireTrigger에 등록합니다.Verse# Registers the Agent with the FireTrigger when they enter the DoorVolume. OnPlayerEntersVolume(Agent:agent):void= Logger.Print("Agent entered DoorVolume")OnPlayerEntersVolume()에서Register()를 호출하여 에이전트를FireTrigger에 등록합니다. 그런 다음FireTrigger.PressedEvent에 등록한 결과가PlayCinematic()으로 이어지도록FireSubscription을 설정합니다. 완성된OnPlayerEntersVolume()함수는 다음과 같습니다.Verse# Registers the Agent with the FireTrigger when they enter the DoorVolume. OnPlayerEntersVolume(Agent:agent):void= Logger.Print("Agent entered DoorVolume") FireTrigger.Register(Agent) # Subscribe the PressedEvent to PlayCinematic, and store that subscription in FireSubscrition. set FireSubscription = option{(FireTrigger.PressedEvent.Subscribe(PlayCinematic))}플레이어가 볼륨 내부에 있지 않은 경우에만 시네마틱을 활성화할 수 있어야 하므로, 플레이어가
DoorVolume에서 나가면FireTrigger.PressedEvent등록을 추적하는 것을 중지해야 합니다. 이를 처리하려면 새로운 메서드OnPlayerExitsVolume()을door_open_cinematic_manager클래스 정의에 추가합니다.Verse# Unregister the Agent with the FireTrigger when they leave the DoorVolume. OnPlayerExitsVolume(Agent:agent):void=OnPlayerExitsVolume()에서 먼저FireTrigger에 대해 에이전트를Unregister()합니다. 그런 다음FireSubscription내부의 등록을 가져온 후 취소합니다. 완성된OnPlayerExitsVolume()메서드는 다음과 같습니다.Verse# Unregister the Agent with the FireTrigger when they leave the DoorVolume. OnPlayerExitsVolume(Agent:agent):void= Logger.Print("Agent exited DoorVolume") FireTrigger.Unregister(Agent) # Cancel the subscription to the FireSubscription. if (SubscriptionToCancel := FireSubscription?): SubscriptionToCancel.Cancel()플레이어가
ItemButton과 상호작용할 때 진행하는 데 필요한 무기가 지급됩니다. 또한 아직 문을 찾지 못한 경우 문으로 가는 길을 보여주는 목표 마커가 미니맵에 표시됩니다. 이를 처리하기 위해agent를door_open_cinematic_manager클래스 정의로 가져오는 새로운 메서드GrantItem()을 추가합니다.GrantItem()내부에서 통과한 에이전트에 대해GrantItem을 호출하고 목표 마커를 활성화합니다. 완성된GrantItem()메서드는 다음과 같습니다.Verse# Grants the Agent an item when they interact with the ItemGrantButton # and enables the ObjectiveMarker. GrantItem(Agent:agent):void= ItemGranter.GrantItem(Agent) ObjectiveMarker.Enable()
모든 요소 연결하기
이제 각 이벤트를 등록하여 연결된 함수로 이어지도록 하고 게임 내에서 코드를 테스트해 볼 수 있습니다.
OnBegin()에서ItemGrantButton.InteractedWithEvent를GrantItem()함수에 등록합니다. 그런 다음DoorVolume.AgentEntersEvent및DoorVolume.AgentExitsEvent모두를 등록하여 연결된 함수로 이어지도록 합니다. 완성된OnBegin()함수는 다음과 같습니다.Verse# Runs when the device is started in a running game OnBegin<override>()<suspends>:void= # Subscribe each event to its associated function. ItemGrantButton.InteractedWithEvent.Subscribe(GrantItem) DoorVolume.AgentEntersEvent.Subscribe(OnPlayerEntersVolume) DoorVolume.AgentExitsEvent.Subscribe(OnPlayerExitsVolume)코드를 저장하고 컴파일합니다.
UEFN에서 레벨의 DoorOpenCinematicManager 장치를 선택합니다. 아웃라이너(Outliner)에서 각 편집 가능한 레퍼런스를 레벨의 장치에 할당합니다.
이미지를 클릭하면 확대됩니다.
UEFN 툴바에서 세션 시작(Launch Session)을 클릭하여 레벨을 플레이테스트합니다. 레벨을 플레이테스트할 때 아이템 버튼과 상호작용하면 플레이어에게 필요한 무기가 지급되며, 플레이어의 미니맵에 목표 마커가 추가됩니다. 플레이어가 문 볼륨 내부에서 무기를 사용할 때 시네마틱이 재생되고 문이 열리며, 플레이어가 1인칭 시점으로 전환되어야 합니다.
완성된 코드
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
# See https://dev.epicgames.com/documentation/en-us/uefn/create-your-own-device-in-verse for how to create a verse device.
door_open_log := class(log_channel){}
door_open_cinematic_manager := class(creative_device):
Logger:log = log{Channel := door_open_log}
직접 해보기
이 가이드를 완료하면서, Verse를 사용하여 플레이어가 문을 열 때 시네마틱을 재생하는 방법과 3인칭에서 1인칭 카메라로 전환하는 방법을 알아보았습니다.
알아본 내용을 바탕으로 다음과 같은 작업을 시도해 보세요.
횡스크롤 시점으로의 전환과 같이 다른 타입의 카메라 전환 연출하기
전용 버튼으로 카메라 각도를 변경하거나, 진행을 위해 여러 카메라 각도가 필요한 레벨을 디자인하기
플레이어에게 점프 없이 섹션을 통과하는 과제를 주고, 실패하는 경우 시네마틱을 재생하는 것과 같이 부정적인 페널티에 입력 트리거 활용하기