다양한 기록

[UE Game Framework] #1 기초 본문

언리얼 엔진/Unreal Game Framework

[UE Game Framework] #1 기초

라구넹 2025. 1. 2. 17:35

https://github.com/ideugu/UnrealProgrammingPart2/tree/1_1

 

GitHub - ideugu/UnrealProgrammingPart2

Contribute to ideugu/UnrealProgrammingPart2 development by creating an account on GitHub.

github.com

 

언리얼 프레임워크 기능 목록

게임: 월드, 모드, 상태

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

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

폰: 이동, 모션, 액션, 위젯

데이터: 애셋, 테이블, 설정, 저장

인공지능: 길찾기, BT

 

월드(World)

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

- 월드는 시간, 트랜스폼, 틱을 서비스로 지공

- 월드 세팅이라는 컨텐츠 제작을 위한 기본 환경 설정을 제공

- 월드의 기본 단위는 액터(Actor), 액터 클래스는 접두사 A 사용

 

월드의 역할

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

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

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

- 기본 환경 설정 (World Setting)

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

 

게임 모드 (Game Mode)

- 게임 규칙을 지정, 게임을 판정하는 최고 관리자 액터, 형태 없음

- 하나의 게임 => 하나의 게임 모드

- 게임 모드에서 입장할 사용자의 규격 지정 가능

- 멀티플레이어 게임에서 판정을 처리

 

게임 모드의 역할

- 플레이어 입장 관리

- 게임의 최종 승패 관리

- 게임의 규칙 관리

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

 

기믹 (Gimmick)

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

- 주로 이벤트 발생을 위한 충돌 영역 설정 => 트리거(Trigger)

- 트리거를 통해 캐릭터와 상호 작용, 월드에 액터를 스폰해 컨텐츠 전개

 

기믹의 역할

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

- 지정된 조건 만족 시 이벤트 발생

- 월드에 물체를 스폰

 

플레이어 (Player)

- 게임에 입장한 사용자 액터, 형태 없음

- 게임 모드의 로그인을 통해 사용자가 게임 월드에 입장 시 플레이어 생성

- 싱글 플레이 -> 0번 플레이어 설정

- 사용자와의 최종 커뮤니케이션

 

플레이어의 역할

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

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

- 사용자 입력의 1차 처리

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

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

 

폰 (Pawn)

- 무형의 액터인 플레이어가 빙의하여(Possess) 조종하는 액터

- 길찾기 가능, 기믹 및 다른 폰과 상호작용

- 폰 중 인간형 폰 -> 캐릭터

 

폰의 역할

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

- 사용자 입력의 실제 처리

- 사용자 화면에 대응되는 카메라 설정

- 기믹과의 상호작용

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

 

각각 폴더 추가 및 코드 추가

그리고 .Build.cs 파일에 모듈 이름 추가

 

월드 세팅 들어가서

게임 모드 변경

원래 디폴크 폰 클래스랑 플래에어 컨트롤러 클래스는 디폴트인데 코드에서 변경해줌

 

// Fill out your copyright notice in the Description page of Project Settings.


#include "Game/ABGameMode.h"
//#include "Player/ABPlayerController.h"

AABGameMode::AABGameMode()
{
	static ConstructorHelpers::FClassFinder<APawn> ThirdPersonClassRef(TEXT("/Game/ThirdPerson/Blueprints/BP_ThirdPersonCharacter.BP_ThirdPersonCharacter_C"));
	
	if (ThirdPersonClassRef.Class != nullptr )
	{
		DefaultPawnClass = ThirdPersonClassRef.Class;
	}

	static ConstructorHelpers::FClassFinder<APlayerController> PlayerControllerClassRef(TEXT("/Script/ArenaBattle.ABPlayerController"));

	if (PlayerControllerClassRef.Class != nullptr)
	{
		PlayerControllerClass = PlayerControllerClassRef.Class;
	}
	
	//PlayerControllerClass = AABPlayerController::StaticClass();
}

생성자에서 설정

ThirdPersonClassRef는 

Third Person 이미 언리얼 엔진에서 만들어진 거 가져온 거라 레퍼런스 가져와야 함

/Game/ThirdPerson/Blueprints/BP_ThirdPersonCharacter.BP_ThirdPersonCharacter_C

이렇게 레퍼런스를 주는데, 일단 카피 레퍼런스 시 '~' 사이에 끼워져서 문자열이 주어짐

밖에 다 날리고, _C 를 붙여줌 (기본적으로 클래스로 만든게 아니기 때문)

 

PlayerControllerClass는 직접 추가한 C++ 코드를 집어넣으면 되니까 

헤더 파일을 포함시킬 수도 있는데(주석 처리된 부분)

헤더파일은 가능한 적게 하는게 좋으니 레퍼런스 줘서 설정 (단, 애초에 클래스라 _C는 안붙임)

 

뷰포트에 바로 마우스가 가도록 하기

플레이어 컨트롤러의 헤더파일인데, BeginPlay()를 오버라이드 해야 함

 

// Fill out your copyright notice in the Description page of Project Settings.


#include "Player/ABPlayerController.h"

void AABPlayerController::BeginPlay()
{
	Super::BeginPlay();

	FInputModeGameOnly InputModeGameOnly;
	SetInputMode(InputModeGameOnly);
}

플레이어 컨트롤러의 cpp 파일

이렇게 설정해두면 실행 시 바로 포커스가 게임으로 감

 

잘 움직이고, 바로 화면에 포커스가 감 (Shift + f1 시 마우스 포커싱 빠져나옴)