Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

3냥 집사이면서 게임 개발자입니다.

언리얼 엔진 게임 제작 기초 본문

Unreal Engine 5/언리얼 C++

언리얼 엔진 게임 제작 기초

훙이야 2023. 8. 2. 20:36

언리얼 게임 프레임워크를 활용한 게임 제작 방식의 이해와 프로젝트와 기본 C++ 클래스 생성 방법, 향후 운영될 C++ 프로젝트 운영 규칙의 이해에 대해 정리하겠습니다. 

 

언리얼 게임 프레임워크

게임 콘텐츠의 구조

- 게임 제작을 위해 언리얼 엔진은 자체적으로 설계한 프레임워크를 제공합니다.

- 이를 게임플레이 프레임워크(Gameplay Framework)이라고 부릅니다. 

- 언리얼 게임 프레임워크의 각 구성 요소를 파악하고, 이를 확장하면서 게임을 제작하는 것을 권장합니다.

 

월드 (게임 : 월드, 모드, 상태)

- 게임 콘텐츠를 담기 위해 제공되는 가상의 공간

- 월드는 시간, 트랜스폼, 틱을 서비스로 제공합니다.

- 월드 세팅이라는 콘텐츠 제작을 위한 기본 환경 설정을 제공합니다.

- 월드의 기본 단위는 액터(Actor)로 정의되며, 액터 클래스는 언제나 접두사 A를 사용합니다. 

     - 게임 콘텐츠를 담는 공간 (Transform)

     - 게임 콘텐츠의 진행 (Tick)

     - 게임 흐름을 위한 시간 (Time)

     - 기본 환경 설정 (World Setting)

     - 월드의 단위 구성 요소 (Actor)

 

게임 모드 (게임 : 월드, 모드, 상태)

- 게임 규칙을 지정하고, 게임을 판정하는 최고 관리자 액터. 형태가 없습니다.

- 언리얼 엔진에서 하나의 게임에는 반드시 하나의 게임 모드만 존재합니다.

- 게임 모드에서 입장할 사용자의 규격을 지정할 수 있습니다. 

- 멀티플레이어 게임에서 판정을 처리하는 절대적 권위의 심판입니다. 

     - 플레이어 입장 관리

     - 게임의 최종 승패 관리

     - 게임의 규칙 관리

     - 게임 데이터 검증 (멀티 플레이 게임)

 

기믹 (기믹 : 트리거, 스폰, 물리)

- 게임 진행을 위한 이벤트를 발생시키는 사물 액터입니다.

- 주로 이벤트 발생을 위한 충돌 영역을 설정하는데, 이를 트리거(Trigger)라고 한다. 

- 트리거를 통해 캐릭터와 상호 작용하고, 월드에 액터를 스폰해 콘텐츠를 전개합니다. 

     - 월드 내 사물과 상호 작용을 수행.

     - 지정된 조건을 만족하면 이벤트를 발생.

     - 월드에 물체를 스폰(Spawn)시킬 수 있음.

 

플레이어 (플레이어: 입력, 카메라, HUD, 상태)

- 게임에 입장한 사용자 액터. 형태가 없습니다.

- 게임 모드의 로그인을 통해 사용자가 게임 월드에 입장하면 플레이어가 생성됩니다.

- 싱글 플레이 게임에는 0번 플레이어가 설정됩니다.

- 사용자와의 최종 커뮤니케이션을 담당합니다. ( 예) 입력 장치의 해석, 화면 장치로의 출력 )

     - 게임에 입장한 사용자와의 1:1 대응

     - 사용자의 현재 상태 및 데이터를 관리

     - 사용자 입력의 1차 처리 ( 필요시 )

     - 사용자 화면에 대응하는 카메라 관리 

     - 사용자 화면에 나타나는 HUD UI 관리

 

폰 (Pawn) ( 폰 : 이동, 모션, 액션, 위젯)

- 무형의 액터인 플레이어가 빙의해 조종하는 액터입니다. 

- 길찾기를 사용할 수 있으며, 기믹 및 다른 폰과 상호작용합니다.

- 폰 중에서 인간형 폰을 별도로 캐릭터라고 지칭합니다. 

     -  빙의(Possess)를 통해 플레이어와 연결

     - 사용자 입력의 실제 처리

     - 기믹과의 상호작용

     - 현재 상태에 적합한 애니메이션 재생

 


게임의 제작 과정

- 싱글 플레이 게임 제작은 크게 총 다섯 단계로 나누었고, 지금은 블루프린트를 사용해 세 단계만 작업해보겠습니다. 

 

1단계 : 월드 설정과 게임 모드 생성 

2단계 : 플레이어 폰의 입출력 및 모션 설정 ( 언리얼 엔진이 제공하는 삼인칭 템플릿을 활용 )

3단계 : 캐릭터에 반응하는 기믹 설계

4단계 : 게임 데이터와 NPC 인공 지능

5단계 : UI 연동 및 게임 제작 마무리

 

최종적 목표는 가급적 블루프린트를 사용하지 않고, C++ 로만 제작할 것이며, 이후에 블루프린트로 확장 가능한 구조로 작업할 것입니다. 

NPC 와의 전투를 이기고 10개의 상자를 획득하면 게임을 클리어하도록 게임 구조를 확장해보겠습니다. 

 

확장할 내용 

- 기본 템플릿을 사용하지 않고 직접 제작

- 두 가지 카메라 모드를 제공 (숄더 뷰, 탑 뷰) 

- 액션 입력을 통한 콤보 공격의 구현

- 아이템 에셋을 활용한 무기 상자의 구현 

- NPC 레벨 정보를 스프레드 시트로 관리 

- 플레이어와 전투하는 NPC 인공 지능의 구현

- UI 연동과 게임의 마무리

 

언리얼 C++ 프로젝트의 생성

1단계 월드 설정과 게임 모드 생성

- 신규 프로젝트 생성과 1단계 작업을 위한 준비입니다. 

 

프로젝트 소스코드 폴더 규칙

- 게임 플레이를 구성하는 요소별로 폴더를 제작해 관리하겠습니다.

     - Game : 게임 모드과 게임 설정에 관련된 클래스 

     - Gimmick : 기믹 배경 물체에 관련된 클래스

     - Player : 플레이어에 관련된 클래스 

     - Input : 플레이어 입력에 관련된 클래스

     - Character : 기본 캐릭터와 PC 및 NPC에 관련된 클래스 

     - Action : 캐릭터 액션에 관련된 클래스

     - Item : 캐릭터 아이템에 관련된 클래스

     - Stat : 캐릭터 스탯에 관련된 클래스 

     - AI : NPC 인공지능에 관련된 클래스

     - UI :UI에 관련된 클래스 

     - Physics : 물리 충돌체 설정에 관련된 전처리기

     - Interface : 인터페이스 클래스를 모아둔 폴더 

 

이번 포스팅에 제작할 부분을 볼드처리했습니다.

 

클래스 생성 규칙

- 모든 클래스는 AB(ArenaBattle의 약자)의 접두사로 시작.

- 폴더마다 다른 폴더와의 의존성을 최소화.

- 다른 폴더의 클래스에 접근할 때 가급적 인터페이스를 통해 접근 

- 헤더 경로를 찾기 쉽도록 모듈.Builod.cs 파일에 모듈의 폴더를 인클루드 경로에 설정

     - PublicIncludePaths.AddRange( new string[] {"모듈이름"}); 추가

 

* 가급적이면 다른 폴더의 헤더를 직접 참조하지 않도록 구성하겠습니다.

 

최초 생성할 클래스 

- 게임을 구성하는 기본 골격의 설정 

- 캐릭터는 PC와 NPC를 구분해 구현할 예정

- 게임 모드에서는 입장할 플레이어의 규격을 지정

모드 -> AABGameMode | 플레이어 -> AABPlayerController | 폰 -> AABCharacterBase - AABCharacterPlayer

 

언리얼 엔진의 월드 세팅에서 준비한 에셋에 맞는 월드 맵을 설정하고, ThirdPersonPawn 을 설정하였고, 갖고 있는 ABPlayerControllerClass 의 정보를 에셋으로부터 참조하는 방식으로 헤더 파일을 참조하는 것을 최소화 할 수 있었습니다.

월드 세팅을 직접 게임 모드 생성자 구현문 안에서 설정할 수 있습니다.

언리얼 게임 프레임워크 정리

1. 게임 컨텐츠 구조를 이해할 수 있었습니다.

2. 게임 프레임워크의 구성요소를 살펴봤습니다.

3. 단순한 게임 구조에서 출발해 점점 복잡한 게임으로 확장하는 제작 과정을 이해할 수 있었습니다.

4. C++ 프로젝트 구성을 위한 기본 설정을 할 수 있습니다.

5. 게임 구성 요소를 폴더별로 분류하고, 헤더 참조를 최소화하는 규칙 수립을 할 수 있습니다.