UE5

게임플레이 프레임워크 이해하기

게임 개발 2023. 6. 14. 08:04

이번에 배우는 것들

> 콘텐츠 예제 프로젝트 다운로드 및 설정

> 애셋 가져오기

> 다른 프로젝트의 콘텐츠 가져오기

> 게임플레이 프레임워크 소개

 

 

언리얼 엔진 4는 2D 인디 게임에서부터 3D AAA 게임 타이틀,

인터랙티브 애플리케이션, 건축 시각화, VR 경험에 이르기까지 이러한 모두를 개발하는 데

사용될 수 있는 매우 강력한 애플리케이션이다.

UE4는 PC, 콘솔, 모바일 HRML5와 같은 매우 다양한 플랫폼에서

동작하는 콘텐츠를 제작할 수 있게 해준다.

UE4 에디터는 게임 개발의 매우 복잡한 작업을 처리하지만,

개발자가 쉽게 사용할 수 있는 환경을 제공한다.

다른 컴퓨터 프로그램들과 마찬가지로 UE4는 학습 곡선이 존재한다.

이번 시간에는 몇 가지 기술과 프로젝트의 구조,

UE4를 위한 기본적인 게임플레이 프레임워크에 대해 알아 보자.

 

 

사용 가능한 리소스들

 

에픽이 언리얼 엔진 4를 출시하면서 잘했던 것 중의 하나는

바로 높은 퀼리티의 온라인 문서와 프로젝트 예제들을 제공하는 것이다.

에픽 게임즈 런처를 보면 커뮤니티 섹션이 있는데 여기에서

뉴스, 프로젝트 스포트라이트, 포럼 링크, 블로그, 엔진 개발 로드맵과 같은 정보들을 볼 수 있다.

이곳에서 엔진의 기능에 관련된 카테고리를 볼 수 있는데 일반적으로 게임플레이 예제,

완성된 게임 프로젝트, 언리얼 커뮤니티 혹은 에픽 파트너사가 제공하는 샘플 프로젝트들을 볼 수 있다.

UE4의 워크플로우와 인터페이스에 친숙해진 후라면 학습을 위한 가장 좋은 방법은

기존에 있는 프로젝트를 분석해보는 것이다.

 

에디터에서 실행하기

 

에디터에서 실행하기는 콘텐츠를 컴파일하거나 패키징하지 않고

레벨을 플레이 테스트해볼 수 있게 해주는 옵션이다.

PIE 미리보기 옵션은 레벨 에디터 메인 툴바의 Play 버튼 (그림 2.1) 참조 아래에서 볼 수 있다.

Play 버튼 오른쪽에 아래로 뉘어진 삼각형을 클릭하면 레벨을 미리보기하기 위한 많은 옵션을 볼 수 있다.

기본적으로 UE4는 기능을 테스트하기에 좋은 선택된 뷰포트 옵션을 사용한다.

어느 시점에서 여러분은 아마 목표 플렛폼의 해상도나 화면 종횡비를 바꾸고 싶을지도 모른다.

 

New Editor Window 옵션을 선택하면 미리보기 플레이 아이콘의 모습이 바뀌고

새로운 윈도우가 열리면서 게임 테스트가 가능해진다.

미리보기 옵션의 가장 아래쪽을 보면 Advanced Setting(고급 설정)이 있는데 이곳에서 에디터 환경 설정을 열 수 있다.

새롭게 열린 창의 Play 섹션을 클릭하면 화면 오른쪽에서 해상도를 변경할 수 있다.

또한 윈도우의 시작 위치 (기본적으로 0, 0으로 설정돼 있으며 왼쪽 상단을 의미한다.)를 수정할 수 있다.

항상 창을 화면 중앙에 놓습니다를 체크하면 미리보기 윈도우가 항상 모니터 가운데에 나타나도록 설정된다.

 

그림 2.1 환경 설정의 에디터에서 실행하기 (PIE) 옵션

1. 엔진 4.10에서는 기본적으로 모니터 가운데에 윈도우가 나타나게 바뀌었다.

 

프로젝트 폴더 구조

 

에픽 게임즈 런처를 통해 블루프린트 기반의 프로젝트를 처음 만들 때,

프로젝트를 위한 경로를 설정해줘야 한다.

그 이후에 에디터는 기본적으로 사용되는 폴더들을 프로젝트로 복사하는데 프로젝트가 만들어진 후에 

이 프로젝트 폴더를 보면 Config, Content, Intermediate, Saved 폴더들과 .uproject 파일을 볼 수 있다.

 

> Config(설정) : 이 폴더에는 에디터, 프로젝트, 환경 설정들의 값들을 담고 있는 .ini 파일들이 들어있다.

 

> Content(컨텐츠) : 이 폴더에는 프로젝트의 실행을 위한 ini 파일들 (환경 설정 파일 같은)과

CachedAssetRegistry.bin 파일을 담고 있다.

 

> Saved : 이 폴더는 에티터의 자동 저장 및 백업 파일들, 콘텐츠 브라우저에서

애셋들을 조직화하기 위해 사용하는 컬렉션을 담고 있는 컬렉션 폴더, 목표 플랫폼을 위한 프로젝트 Config 설정들,

에디터 로그 파일, 런처에서 볼 수 있는 프로젝트 섬네일 이미지와 같은 것들을 담고 있다.

 

프로젝트를 진행할수록 더 많은 파일, 폴더들이 추가될 것이다.

 

모든 폴더 구조를 살펴보면 몇 가지 파일들이 이미 생성돼 있는 것을 볼 수 있다.

예를 들어 설정 파일과 같은 것들 말이다. 확장자가 ini로 돼 있는 것들이

설정파일인데 에디터, 엔진, 게임에서 모두 사용된다. 프로젝트 혹은 에디터의 환경 설정을 변경하면

이것들이 설정 파일에 반영돼 파일이 업데이트된 것을 확인할 수 있다.

 

에디터 환경 설정 및 프로젝트 설정

에디터, 프로젝트 설정은 레벨 에디터 메뉴 바에서 Edit를 선택하면 찾을 수 있다.

 

콘텐츠 폴더

 

콘텐츠 폴더는 프로젝트를 위해 사용되는 모든 애셋들을 담고 있다(그림 2.2 참조).

여기에서 일반적으로 두 개의 파일 타입을 볼 수 있는데, .uasset과 .umap이다.

외부 애셋을 프로젝트로 가져오고 나면 이것이 .uasset 파일로 저장된다.

새로운 맵을 만든 후 저장하면 이것은 .umap 파일로 저장되며 컨텐츠로서 관리된다.

에디터에서 콘텐츠 브라우저를 사용할 때, 콘텐츠 폴더의 구조를 볼 수 있다.

콘텐츠 폴더
콘텐츠 브라우저 소스 뷰

 

content 파일 안에 있다.

 

 

콘텐츠 가져오기

 

언리얼 엔진 4는 다양한 가져오기 가능한 파일 종류들을 지원한다.

표 2.1에 가장 일반적으로 사용하는 파일 종류들을 나타냈다.

 

표 2.1 에디터로 가져올 수 있는 일반적인 외부 파일들 종류

에셋 타입 파일 확장자
3D 모델, 스켈레탈 메시 러그, 애니메이션 데이터 .fbx, .obj
텍스처, 이미지 .bmp, .jpeg, .pcx, .png, .psd, .tga, .hdr
폰트 .otf, .ttf
오디오 .wav
비디오, 멀티미디어 .wmv
PhysX .apb, .apx
기타 .csv

 

 

파일 타입 식별하기

 

운영체제는 기본적으로 파일의 확장자를 감춘다.

프로젝트에 많은 파일을 사용하고 있다면

어떤 파일이 어떤 확장자를 가지고 있는지 추적하기 쉽지 않을 것이다.

운영체제의 옵션을 변경해 파일 확장자가 나타나도록 바꿈으로써 파일의 확장자를 구별하기 쉽게 하자.

 

프로젝트로 콘텐츠를 가져오는 방법은 여러 가지가 있다.

외부에서 만들어진 콘텐츠, 예를 들어 3D 맥스나 마야에서 만든 모델, 포토샵에서 그린 텍스처,

어다시티로 만든 사운드를 불러올 수 있다.

 

외부 프로그램에서 만들어진 콘텐츠를 가져오는 방법에는 두 가지가 있는데,

첫 번째 방법은 '직접 해보기'에서 해봤던 대로 콘텐츠 브라우저를 이용하는 방법이고

두 번째 방법은 운영체제의 파일 관리자 (탐색기)를 사용해 불러오는 방법이다.

가져오길 원하는 파일을 탐색기에서 선택한 후 마우스로 클릭하고

드래그해 콘텐츠 부러우저 안에 있는 애셋 관리 영역으로 드롭해 불러올 수 있다.

 

그림 2.3 왼쪽은 소스 뷰를 나타낸 콘텐츠 브라우저, 오른쪽은 에셋 관리 영역

 

 

에셋 아이콘

 

콘텐츠 브라우저의 애셋 아이콘은 미리보기를 제공해 애셋을 열어볼 필요가 없게 해준다.

아이콘 위에 마우스 커서를 올려보면 애셋에 관련된 정보가 나타난다.

예를 들어 애셋 아이콘의 왼쪽 상단에 작은 별표 모양이 나타난면

이는 애셋이 수정됐다는 의미고 저장된 상태가 아니라는 뜻이다.

에셋을 처음으로 가져오고 나면 항상 별표 모양이 나타나는데,

즉 저장할 필요가 있다는 뜻이다.

애셋을 저장하지 않고 에디터를 종료하면

작업했던 부분 혹은 애셋을 잃어버릴 수 있다.

Ctrl + S 키를 누르거나 애셋 위에서 마우스 오른쪽 버튼을 눌러 Save를 선택하면

애셋을 저장할 수 있다.

 

이미 존재하는 프로젝트에서 콘텐츠 이주하기

프로젝트에 콘텐츠를 추가하는 다른 방법은

이미 존재하는 프로젝트에서 콘텐츠를 이주하는 것이다.

모든 프로젝트는 프로젝트의 모든 애셋을 담고 있는 Content 폴더를 가지고 있다.

이주 기능은 이미 존재하는 프로젝트에서 다른 프로젝트로 애셋들을 옮길 수 있게 해준다.

애셋을 이주할 때 애셋에 의존 관계가 있으면 의존 관계와 폴더 구조를 모두 유지한다.

 

콘텐츠 브라우저 필터

 

프로젝트에 콘텐츠가 많아지면 많아질수록 찾고자 하는 콘텐츠를 찾기가 어려워질 것이다.

그러므로 폴더 구조와 이름 규칙이 매우 중요하다.

콘텐츠 브라우저의 애셋 뷰 위쪽을 보면 검색 바가 있고 필터 도구가 있는데,

두 가지 모두 소스 패널에서 선택된 폴더에 관련돼 있다.

현재 선택된 폴더와 서브 폴더에 관해 검색 바와 필터 도구가 동작한다.

예를 들어 콘텐츠 폴더를 선택하고 검색 바와 필터 툴을 적용하면 

콘텐츠 폴더와 그 내부 폴더들에만 적용된다.

 

 

다른 에셋 타입들

 

많은 에셋들은 외부에서 가져온 것이 아니라 에디터 내부에서 직접 만들어진다

(예를 들어 블루프린트 클래스, 파티클 시스템, 카메라 애니메이션 데이터).

Hour 22 이후가 지나면 여러분은 애셋 타입들을 만들고 추가하는 방법을 배우게 될 것이다.

 

프로젝트를 위한 로우 애셋 폴더 만들기

매우 큰 그룹에 속해 있고 일정 규모 이상의 프로젝트에서 일하고 있다면,

프로젝트를 조직화하기 위해 아마 프로젝트 관리 소프트웨어가 필요할 것이다.

먼저 프로젝트의 루트 디렉터리에서 폴더를 추가하는 것으로 시작해,

에디터 바깥에 있는 외부 파일들을 관리해야 한다.

 

다음은 프로젝트로 불러오기 이전의 일반적인 외부 애셋들을 관리하기 위한

예제 디렉터리 구조를 나타낸 것이다.

 

> 로우 에셋 폴더 

-> 모델 내부 폴더

-> 오디오 내부 폴더

-> 텍스처 내부 폴더

 

 

애셋 레퍼런스와 레퍼런스 뷰어

 

아마 .uasset 파일들을 한 프로젝트에서 다른 프로젝트로 직접 복사하거나 이동시켜봤을 것이다.

기술적으로 이 방식도 동작은 하겠지만 의존 관계가 있기 때문에 좋은 방법은 아니다.

 

위치 또는 폴더의 구조를 바꿀 때는 항상 콘텐츠 브라우저 안에서 해주는 것이 좋다.

그렇게 해야 에디터가 의존 관계를 파악하고 올바르게 업데이트 할 수 있다.

레퍼런스 뷰어는 에셋의 의존 관계를 보여주는데, (그림 2.5 참조)

예를 들어 스태틱 메시 에디터에서 스태틱 메시에 머티리얼을 적용할 때

스태틱 메시는 콘텐츠 브라우저에서 머티리얼의 위치를 알아야 한다.

차례로 머티리얼 역시 의존하고 있는 텍스처의 위치를 알아야 한다.

콘텐츠 브라우저에서 머티리얼의 위치를 다른 폴더로 이동하면 에디터는 자동으로

스태틱 브라우저의 애셋 위에서 마우스 오른쪽 버튼을 눌러 

레퍼런스 뷰어를선택하면 된다.

 

 

그림 2.5 레퍼런스 뷰어. Jack의 머터리얼 애셋의 의존 관계를 보여준다.

 

 

Saved 폴더

 

Saved 폴더는 네 개의 폴더인 

AutoSaves, Backup, Config, Logs 를 내부 폴더로 가지고 있다.

에디터는 AutoSaves와 Backup 폴더를 백업 및 임시 작업용 파일들을 저장하는데 사용한다.

이 파일들은 에디터가 작업 중 중단됐을 때 복원하는 데 사용한다.

하지만 이 기능으로 인해 프로젝트의 사이즈가 더 커질 수 있으며

어떤 시점에서 이 폴더의 내용을 지워 프로젝트 사이즈를 줄일 필요가 있다.

Config 폴더는 프로젝트 설정 정보들을 담고 있는 .ini를 가지고 있다.

 

게임플레이 프레임워크

 

게임플레이 프레임우커는 모든 프로젝트에 있는 게임의 룰, 플레이어 입력, 아바타, 카메라, 플레이어 HUD를

관리하기 위한 C++ 또는 블루프린트 클래스 컬렉션이다.

 

+ 노트

게임 그 이상

용어에 속지 말자. 비록 UE4는 게임을 개발하기 위해 사용됐고 게임에 많은 것들이

관련되어 있지만, 이 엔진은 매우 다양한 컴퓨터 프로그램을 위해 사용될 수 있다.

예를 들어 3D 아티스트가 자신이 만든 모델을 웹사이트에서 보여주기 위한 포토폴리오를 만드는 데

사용될 수도 있다.

 

게임 모드 클래스

 

게임플레이 프레임워크에는 게임 모드 클래스가 있는데

이것은 게임의 규칙을 설정하는 데 사용되며

게임의 핵심 기능들을 정의하기 위한 클래스들을 담고 있다.

예를 들어, 게임 모드 클래스는 1인칭 슈팅 게임에서 적 생성 로직이 들어있는 시스템을 가지고 있거나

레이싱 게임에서 시간을 체크하는 로직을 담고 있을 만한 공간이다.

다음은 게임 모드 클래스에 붙어있는 게임플레이 프레임워크 리스트를 나타냈다.

 

> DefaultPawn 클래스

> HUD 클래스

> PlayerController 클래스

> Spectator 클래스

> ReplaySpectator 클래스

> PlayerState 클래스

> GameState 클래스

 

게임 모드와 의존 관계들이 생성되고 나면,

게임 모드를 프로젝트에 할당하거나 프로젝트 안의 레벨별로 모드를 설정할 수 있다.

프로젝트는 대부분 2~3개 정도의 게임 모드들을 가지고 있는데

이때 기본으로 설정될 수 있는 게임 모드는 오직 한 개다.

기본 게임 모드는 프로젝트 설정으로 간 후 Maps & Modes > Default Modes에서 설정할 수 있다.

게임 모드가 기본 모드로 설정되고 나면 모든 레벨이 시작될 때 기본적으로 이 모드를 사용한다.

물론 에디터의 World Settings 탭에 있는 GameMode Override 속성을 바꿔서 게임 모드를 변경할 수 있다.

 

컨트롤러 클래스

 

컨트롤러 클래스는 게임 내 폰pawn을 제어한다.

PlayerController 클래스는 플레이어로 부터 입력을 받고 플레이어의 폰을 조정한다.

컨트롤러 클래스에는 두 가지 기본 타입이 있는데 바로 PlayerController와 AIController다.

PlayerController 클래스는 플레이어의 입력을 관리하고 게임 내 폰에 빙의possess해 조종한다.

플레이어 입력은 마우스, 키보드, 게임패드, 터치, 엑스박스 키넥트와 같이 다양하다.

PlayerController 클래스는 마웃 커서의 표시성에도 관여하며 마우스 클릭 이벤트에 어떻게 반응하는지도 처리한다.

게임 내 모든 사람 플레이어는 PlayerController 클래스를 가지고 있으며 캐릭터에 할당된다.

예를 들어, 게이머가 멀티플에이어 게임에 입장하면 PlayerController 클래스가 게임 모드 클래스 내에서 생성되며

게임 세션이 종료할 때까지 플레이어에 할당된다.

중요한 점은 PlayerController 클래스는 게임 월드에서 물리적으로 표현되지 않는다는 점이다.

 

 

폰, 캐릭터 클래스

 

언리얼 엔진에서 폰은 플레이어 아바타를 뜻하는 용어다.

폰 클래스는 플레이어 컨트롤러 클래스로부터 입력을 취하고 게임 내 플레이어의 물리적인 표현을 담당한다.

이것은 레벨 안에 있는 플레이어의 위치를 으미하기도 하며 충돌 박스를 가진 복잡한 스켈레탈 메시를 뜻하기도 한다.

게임 모드에는 DefaultPawn 클래스 속성에 할당될 수 있는 여러 가지 클래스들이 있는데,

예를 들어 Pawn, Character, Vehicle 클래스들이 있다.

Pawn 클래스는 다양한 폰 타입들을 생성할 수 있는 일반 클래스이며

Character나 Vehicle 클래스들은 특정 목적을 위해 사용되는 클래스들이다.

보통 대부분 게임에서는 일반적인 폰이 사용되는 것을 볼 수 있다.

폰이 컨트롤러 클래스로부터 방향을 얻기 때문에 폰은 PlayerController 나 AIController 클래스에 의해 제어된다.

 

 

허드 클래스

 

허드 클래스는 2D 인터페이스를 플레이어 스크린에 보여주고 인게임 HUD를 만든다

게임의 전체 HUD 시스템은 HUD 클래스 안에서 작성될 수 있다.

에픽은 또한 인터페이스를 제작할 수 있게 해주는 에디터인 UMG를 제공한다,

UMG는 복잡한 인터페이스와 HUD를 제작할 수 있도록 도구와 클래스들을 제공한다.

 

에픽에서 제공하는 프로젝트 템플릿은 일반적인 게임 타입들을 위해 게임 모드가 설정돼 있다.

보통 새로운 프로젝트를 만들 때 게임 모드 템플릿을 선택한다.

 

이제 콘텐츠 브라우저를 살펴보면 바로 전에 추가한 새로운 폴더들을 볼 수 있다.

SideScrollerBP/Maps 폴더로 이동한 후 SideScrollerExampleMap 레벨을 더블 클릭해 연다.

레벨 에디터 툴바에서 Play 버튼을 눌러 레벨을 테스트해보자.

보다시피 사이드 스크롤 게임이 시작될 것이다. 하지만 다른 레벨을 열면 다른 게임 모드를 사용하고 있을 것이다.

SideScrollerBP/Maps 폴더로 이동한 후 Minimal_Default 레벨을 열자.

이제 사이드 스콜 게임 모드가 작동하지 않는 것을 볼 수 있다.

프로젝트를 위해 기본게임모드를 설정할 필요가 있다.

 

요약

이번 시간에는 에셋을 불러오는 방법, 다른 프로젝트로부터 콘텐츠를 이주하는 방법,

프로젝트에 다양한 기능들을 추가하는 방법에 대해 학습했다.

또한 게임 모드의 개념과 프로젝트에 기본 게임 모드를 설정하는 방법도 다뤄봤다.

 

질문 및 답변

 

질문 : 레벨을 만들 때 마다 게임 모드를 설정해줘야 하는가?

 

답변 : 아니다. 레벨이 특별히 필요로 하는 게임 모드가 아닐 경우에는 그대로 둬도 된다.

게임 모드가 프로젝트 설정에서 설정되면 모든 레벨은 기본적으로 같은 게임 모드를 사용한다.

 

질문 : 콘텐츠를 이주할 때, 기존에 있던 콘텐츠를 덮어 쓰려고 하면 에디터가 묻는다.

 

답변 : 콘텐츠를 이주할 때 어떤 애셋들을 다른 애셋과 같은 의존 관계를 가질 수 있으며

이러한 애셋들이 개별적으로 이주될 경우, 에디터는 원본 애셋이 덮어 써질 수 있다는 것을 경고한다.

이주 작업을 끝낸 후 수동으로 직접 의존 관계를 수정해야 한다.

 

질문 : .ini 파일은 무엇인가?

 

답변 : .ini 파일은 간단한 텍스트 파일로서 에디터와 프로젝트의 환경 설정이나 세팅을 저장하고 있다.

.ini 파일은 간단한 텍스트 에디터에서 열거나 수정할 수 있는데 UE4에디터에서 따로 관리 가능하므로

직접 수정할 필요는 거의 없을 것이다.

 

 

연구

 

이번 시간을 끝냈으니 다음 질문에 답해보자.

 

퀴즈

 

1. 참 또는 거짓 :

하나의 프로젝트에서 다른 프로젝트로 콘텐츠를 옮기는 가장 좋은 방법은

.uasset 파일을 복사하는 것이다. -> 오류발생 다분

 

해답 : 거짓 : 한 프로젝트에서 다른 프로젝트로 콘텐츠를 이동하는 올바른 방법은

콘텐츠를 이주하는 것이다.

 

2. 참 또는 거짓 :

에셋을 불러오거나 수정한 후에 콘텐츠 부라우저에서 애셋을 저장할 필요가 없다.

 

해답 : 거짓 : 처음으로 애셋을 불러오거나 기존에 있던 애셋을 수정하면 저장할 필요가 있다.

 

3. 참 또는 거짓 :

레퍼런스 뷰어는 다른 애셋에 의존 관계가 있는 것들을 보여준다

 

해답 : 참 : 레퍼런스 뷰어는 애셋의 의존 관계를 볼 수 있게 해준다.