이전 단계에서는 명령을 수신할 때 앞으로 이동하고, 왼쪽으로 회전하고, 오른쪽으로 회전할 수 있는 NPC를 만들었습니다. 이제 이 단계에서는 캐릭터가 이동할 수 있는 게임보드를 구성해 보겠습니다.
이 게임의 경우 게임보드에서 다음 사항을 알고 관리해야 합니다.
타일 크기: 캐릭터가 이동할 거리를 알기 위한 보드 위 타일의 크기입니다.
카메라: 캐릭터가 이 게임보드에 도달했을 때 사용할 카메라입니다. 이 게임에서는 고정 포인트 카메라 장치를 사용합니다.
시작 위치: 캐릭터가 보드 위에서 시작해야 하는 위치입니다. 이 게임에서는 편집 가능 프로퍼티로 손쉽게 설정하고 트랜스폼을 얻을 수 있도록 포크리 사물을 사용합니다.
최종 목표: 캐릭터가 향해 나아가는 최종 목표로, 게임보드 끝에서 신호를 보냅니다. 이 게임에서는 캐릭터가 밟으면 신호를 보내는 트리거 장치를 사용합니다.
장애물: 장애물은 캐릭터가 최종 목표에 바로 도달하지 못하도록 막습니다. 자세한 내용은 장애물 만들기에 설명되어 있습니다.
각 장애물은 게임보드의 클래스에서 추적됩니다. 클래스는 Verse 장치에서 편집 가능한 프로퍼티가 될 수 있도록 구상 지정자를 보유하며, 각 클래스 멤버는 UEFN에서 값을 변경할 수 있도록 편집 가능한 어트리뷰트를 보유합니다.
# This class represents the gameboard and how it behaves.
# This class has the concrete specifier so it can be an editable property on a Verse device.
gameboard<public> := class<concrete>:
# The size of each tile on the gameboard. By default set to
# the default Fortnite tile size of 512x512x384.
@editable
TileSize<public>:vector3 = vector3{X:=512.0, Y:=512.0, Z:=384.0}
# The fixed point camera that provides a top-down view of the gameboard
게임보드와 게임보드 프로퍼티를 정의했으니, 이제 비헤이비어를 추가해 보겠습니다.
최종 목표 처리: 게임보드가 구성되면 최종 목표의
TriggeredEvent를 등록합니다. 캐릭터가 트리거 장치를 트리거하면 이벤트 핸들러와 커스텀 이벤트를 사용하여 최종 목표에 도달했다는 신호를 공개적으로 보냅니다. 자세한 내용은 장치 상호작용 코딩하기를 확인하세요.게임보드 시작: 게임보드 시작 위치에서 카메라 장치를 모든 플레이어에게 할당합니다.
게임보드 끝: 게임보드 끝 위치에서 카메라 장치를 모든 플레이어로부터 제거합니다.
gameboard의 완성된 클래스는 다음과 같습니다.
# This class represents the gameboard and how it behaves.
# This class has the concrete specifier so it can be an editable property on a Verse device.
gameboard<public> := class<concrete>:
# The size of each tile on the gameboard. By default set to
# the default Fortnite tile size of 512x512x384.
@editable
TileSize<public>:vector3 = vector3{X:=512.0, Y:=512.0, Z:=384.0}
# The fixed point camera that provides a top-down view of the gameboard
장애물 만들기
장애물은 캐릭터가 최종 목표에 바로 도달하지 못하도록 막습니다. 장벽 장치를 캐릭터의 이동을 막는 이 게임 내 장애물로 사용하고, 장벽을 비활성화하는 트리거 장치를 사용합니다.
obstacle 클래스 정의에는 다음 요소가 포함됩니다.
IsObstaclePassed: 장벽의 현재 활성화 또는 비활성화 여부를 저장하는 데이터입니다. 두 가지 상태만 존재하므로 로직 타입입니다.
Barriers: 장애물과 연결된 장벽 장치입니다. 즉, 장벽을 비활성화하는 트리거에 2개 이상의 장벽 장치를 어태치할 수 있습니다.
BarrierDissolves: 장애물을 통과할 때 재생되는 시네마틱 시퀀스입니다.
BarrierAppears: 장애물을 리셋할 때 재생되는 시네마틱 시퀀스입니다.
Trigger: 캐릭터가 장애물을 비활성화하기 위해 도달하는 트리거 장치입니다.
다음은 장애물을 나타내는 완성된 클래스로, 클래스는 Verse 장치에서 편집 가능한 프로퍼티가 될 수 있도록 구상 지정자를 보유합니다.
# An obstacle on the gameboard, with an associated set of
# Barrier devices, Trigger devices that deactivate the barriers,
# and Cinematic Sequence devices that play sequences for barriers dissolving and appearing for visual feedback on what is happening.
# This class has the concrete specifier so it can be an editable property on a Verse device.
obstacle := class<concrete>:
# Data for storing whether barriers are currently enabled/disabled.
var IsObstaclePassed:logic = false
# The array of barriers for this obstacle.
게임보드 추가하기
게임보드를 정의했으니, 이제 Verse 장치에 이러한 게임보드의 배열을 추가할 수 있습니다. 이 작업은 나중에 6. 게임 루프 관리하기에서 확인할 수 있습니다.
VKT - Verse 장치 스타터 게임(VKT - Verse Device Starter Games) 템플릿으로 제작한 프로젝트의 아웃라이너에서 Verse 커맨더 미니게임(Verse Commander Minigame) 장치를 검색 및 선택하여 디테일(Details) 패널을 엽니다.
디테일 패널의 게임보드(Gameboards)에 게임 내 보드에 해당하는 5개의 엘리먼트가 있습니다. 이러한 엘리먼트를 확장하여 게임보드에 어떤 장치, 시네마틱 등의 프로퍼티가 사용되는지 확인할 수 있습니다.
게임에 더 많은 레벨을 추가하려면 게임보드의 엘리먼트 추가(Add Element)를 선택하여 게임보드를 추가할 수 있습니다.
게임에서 레벨을 제거하려면 제거할 게임보드 옆의 드롭다운을 선택하여 게임보드를 제거할 수 있습니다.
엘리먼트를 길게 누르고 다른 게임보드 엘리먼트 앞이나 뒤에 드래그하는 방식으로 게임보드 순서를 변경하여 게임 내 레벨의 순서를 바꿀 수도 있습니다.
특정 레벨을 테스트할 목적으로 테스트하고자 하는 레벨이 목록 첫 번째에 오도록 보드의 순서를 변경할 수 있습니다.
다음 단계
게임보드를 정의하고, 원하는 수만큼 추가하는 방법을 살펴보았습니다. 다음 단계에서는 보드를 디자인하여 재미있는 퍼즐을 개발하고 한계점을 피해 작업하는 방법을 알아봅니다.