엔진/언리얼

UE5 언리얼 엔진 게임 제작 기초

Prooni 2024. 10. 9. 20:27

인프런 강의 이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해를 수강하며 학습한 내용입니다.

 

실습 레포지토리

https://github.com/Leehyewon96/ArenaBattle

 

GitHub - Leehyewon96/ArenaBattle

Contribute to Leehyewon96/ArenaBattle development by creating an account on GitHub.

github.com

 

 

용어 정리

월드(World)

  • 게임 콘텐츠를 담기 위한 가상의 공간
  • 시간, 트랜스폼, 틱을 제공함
  • 월드 세팅이라는 콘텐츠 제작을 위한 기본 환경 설정 제공
  • 액터(Actor)라는 기본 정의를 가짐, 액터 클래스는 접두사 A를 사용
  • 역할
    • 게임 콘텐츠를 담는 공간 (Transform)
    • 게임 콘텐츠의 진행 (Tick)
    • 게임 흐름을 위한 시간 (Time)
    • 기본 환경 설정 (World Setting)
    • 월드의 단위 구성 요소 (Actor)

게임 모드(Game Mode)

  • 게임 규칙을 지정하고 게임을 판정하는 최고 관리자 액터. 형태 없음
  • 언리얼 엔진에서 하나의 게임에는 반드시 하나의 게임 모드만 존재함.
  • 게임 모드에서 입장할 사용자의 규셕을 지정 가능
  • 멀티플레이어 게임에서 판정을 처리하는 절대적 권위의 심판
  • 역할
    • 플레이어 입장 관리
    • 게임 최종 승패 관리
    • 게임 규칙 관리
    • 게임 데이터 검증 (멀티 플레이)

기믹(Gimmick)

  • 게임 진행을 위한 이벤트를 발생시키는 사물 액터
  • 주로 이벤트 발생을 위한 충돌 영역을 설정하고 이를 트리거라고 함
  • 트리거를 통해 캐릭터와 상호 작용하고 월드에 액터를 스폰해 콘텐츠를 전개함
  • 역할
    • 월드 내 사물과 상호 작용을 수행
    • 지정된 조건을 만족하면 이벤트를 발생
    • 월드에 물체를 스폰시킬 수 있음

플레이어(Player)

  • 게임에 입장한 사용자 액터, 형태 없음
  • 게임 모드의 로그인을 통해 사용자가 게임 월드에 입장하면 플레이어가 생성됨
  • 싱글 플레이 게임에는 0번 플레이어가 설정됨
  • 사용자와의 최종 커뮤니케이션을 담당함. (ex : 입력 장치의 해석, 화면 장치로의 출력)
  • 역할
    • 게임에 입장한 사용자와의 1:1 대응
    • 사용자의 현재 상태 및 데이터를 관리
    • 사용자 입력의 1차 처리
    • 사용자 화면에 대응하는 카메라 관리
    • 사용자 화면에 나타나는 HUD UI 관리

폰(Pawn)

  • 무형의 액터인 플레이어가 빙의해 조종하는 액터
  • 길찾기를 사용할 수 있으며, 기믹 및 다른 폰과 상호작용함
  • 폰 중에서 인간형 폰을 별도로 캐릭터라고 지칭
  • 역할
    • 빙의(Process)를 통해 플레이어와 연결
    • 사용자 입력의 실제 처리
    • 사용자 화면에 대응되는 카메라 설정
    • 기믹과의 상호작용
    • 현재 상태에 적합한 애니메이션 재생

 

실습내용

액터 만들기

tools - Add C++ Class 항목을 선택하여 게임에 필요한 액터들을 생성해줬다.

 

ABGameMode

ABPlayerController

ABCharacterBase, ABCharacterPlayer

등등 게임에 필요한 베이스 클래스를 추가했다.

 

visual studio에 추가한 클래스들의 cpp와 헤더파일들

 

월드세팅

에디터 우측 하단의 월드 세팅에서 게임모드와 PawnClass와 Player Controller Class를

직접 만든 클래스들로 설정해줬다.

 

 

원래 언리얼의 디폴트 요소들로 설정되어 있었는데 게임모드를 직접만든 ABGameMode로 설정한 후

코드로 PawnClass와 Player Controller Class도 설정해줬다.

 

아래 코드 형태로 ConstructorHelpers를 통해 에디터에서 생성한 Pawn 오브젝트를 찾아서 디폴트 폰 클래스로 설정한다. 

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

 

 

마찬가지로 ConstructorHelper 를 통해 생성한 ABPlayerController 클래스를 찾아서 플레이어 컨트롤러 클래스로 설정한다. 

//헤더파일 Player/ABPlayerController.h 추가하지 않고 클래스 주소를 얻어오는 방식
static ConstructorHelpers::FClassFinder<APlayerController> PlayerControllerClassRef(TEXT("/Script/ArenaBattle.ABPlayerController"));
if (PlayerControllerClassRef.Class)
{
	PlayerControllerClass = PlayerControllerClassRef.Class;
}