3냥 집사이면서 게임 개발자입니다.
언리얼 엔진 게임 제작 기초 본문
언리얼 게임 프레임워크를 활용한 게임 제작 방식의 이해와 프로젝트와 기본 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. 게임 구성 요소를 폴더별로 분류하고, 헤더 참조를 최소화하는 규칙 수립을 할 수 있습니다.
'Unreal Engine 5 > 언리얼 C++' 카테고리의 다른 글
언리얼 빌드 시스템 (0) | 2023.07.28 |
---|---|
언리얼 오브젝트 관리 2 - 패키지 (0) | 2023.07.28 |
언리얼 오브젝트 관리 1 - 직렬화 (Serialization) (0) | 2023.07.27 |
언리얼 엔진의 메모리 관리 (0) | 2023.07.27 |
언리얼 컨테이너 라이브러리 2 - 구조체와 Map (0) | 2023.07.27 |