2-1강 시작해요 Unreal

Ryan Ham·2024년 6월 25일
0

이득우 Unreal

목록 보기
3/23

Unreal 용어 정리

  • World
  • Game Mode
  • Gimmick
  • Player
  • Pawn

World

  • Game Content를 담는 가상의 공간
  • World의 기본 단위는 Actor로 정의되며, Actor Class는 언제나 접두사 A를 사용한다.
  • 시간, 트랜스폼, 틱을 서비스로 제공한다.
  • 월드 세팅이라는 콘텐츠 제작을 위한 기본 환경 설정을 제공한다.

Game Mode

게임 규칙을 지정하고 게임을 판정하는 최고 관리자 Actor
Unreal Engine에서 하나의 게임에는 반드시 하나의 GameMode만 존재한다.
MultiPlayer Game에서 판정을 처리하는 절대적 권위의 심판


Gimmick

게임 진행을 위한 event를 발생시키는 사물 Actor
주로 event 발생을 위한 collision 영역을 설정하는데, 이를 trigger라고 한다.
Trigger를 통해 character와 상호 작용하고, world에 actor를 spawn해 content를 전개한다.


Player

게임에 입장한 사용자 Actor. 형태가 없다.
GameMode의 로그인을 통해 사용자가 GameWorld에 입장하면 player가 생성된다.
싱글 플레이 게임에는 0번 플레이어가 설정된다.
사용자와의 최종 communication을 담당한다.


Pawn

무형의 Actor인 Player가 빙의(possess)해 조종하는 Actor
길찾기를 사용할 수 있으며, gimmick 및 다른 pawn과 상호작용한다.
Pawn 중에서 인간형 pawn을 별도로 character아고 지칭한다.


앞으로 제작할 게임의 플로우

1단계 : World 설정과 GameMode 생성
2단계 : Player Pawn의 입출력 및 motion 설정
3단계 : Character에 반응하는 gimmick 설계
4단계 : 게임 데이터와 NPC 인공지능
5단계 : UI 연동 및 게임 제작 마무리


Class 생성 규칙

  • 폴더마다 다른 폴더와의 의존성을 최소화
  • 다른 폴더의 class에 접근할 때 가급적 interface를 통해 접근

이번 강의에서는 GameMode, PlayerController, Character를 생성해보자.

Character를 생성하는 것은 PC와 NPC를 만들 것이기 때문에 기본 CharacterBase 클래스와 이를 상속하는 CharacterPlayer 클래스를 만든다.

최종적으로 위와 같이 총 4개의 C++ Class를 생성.

새로운 맵 생성 + Player Start까지 배치
Player Start에서는 login한 player와 그 player가 빙의한 pawn이 이쪽에서 생성이 된다.

Build.cs에 경로를 지정해 주지 않으면 위와 같이 Compile 오류가 발생할 수 있기 때문에 조심할 것! 이때는 Editor를 끄고 Visual에서 전체 compile을 하자.

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

헤더 경로를 찾기 쉽도록 module.Build.cs 파일에 위와 같이 모듈 경로를 추가해주자.


World Setting에서 우리가 만든 GameMode 등록하기

우리는 우리가 만든 custom gamemodebase인 RyanGameModeBaseDefaultPawnClass, PlayerControllerClass를 직접 만들어서 넣어볼 것이다.

World Setting의 Default GameMode. Third Person 패키지를 추가하였기 때문에 Default Pawn Class와 GameMode가 둘다 Third Person으로 설정되어 있는 것을 확인할 수 있다.

변경된 GameMode. 아직 Custom GameMode에 아무런 설정이 되어 있지 않아서 선택된 게임 모드 밑의 항목은 자동으로 설정되어 있는 것을 확인할 수 있다.


GameMode 손보기

GameModeBase.cpp 코드

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

#include "Player/RyanPlayerController.h"
#include "Game/RyanGameModeBase.h"

ARyanGameModeBase::ARyanGameModeBase()
{
	// GameMode에서는 DefaultPawnClass와 PlayerControllerClass에 대한 값을 설정을 해줄 것이다.
	// "DefaultPawnClass"와 "PlayerControllerClass"는 각각 reserved된 변수들이기 때문에 따로 선언을 해줄 필요는 없다. 

	// PlayerControllerClass를 설정하는 방법1
	// 사전에 만든 ARyanPlayerController을 StaticClass()로 접근.
	PlayerControllerClass = ARyanPlayerController::StaticClass();
	
	// PlayerControllerClass를 설정하는 방법2
	// Header 통해서가 아닌, 바로 reference 주소를 통해 가져오기! 
	{
		static ConstructorHelpers::FClassFinder<APlayerController> Asset(TEXT("/Script/ArenaBattle.RyanPlayerController"));
		if (Asset.Class) {
			PlayerControllerClass = Asset.Class;
		}
	}

	// DefaultPawnClass에 대한 설정
	// BP에서 FClassFinder를 통해 Class 정보를 가지고 올때는 뒤의 경로에다가 _C를 붙인다. 
	{
		static ConstructorHelpers::FClassFinder<APawn> Asset(TEXT("/Game/ThirdPerson/Blueprints/BP_ThirdPersonCharacter.BP_ThirdPersonCharacter_C"));
		if (Asset.Class) {
			DefaultPawnClass = Asset.Class;
		}
	}
}

게임 플레이시 마우스 숨기기

게임 플레이시 마우스를 화면에 숨기는 작업은 Controller 코드에서 이루어진다.

Controller.cpp

#include "Player/RyanPlayerController.h"

void ARyanPlayerController::BeginPlay()
{
	// 게임이 시작될 때 마우스를 자동으로 ViewPort 상에 넣는 코드
	// 마우스를 게임 도중에 보고 싶다면 shift + F1 키를 눌러서 나올 수 있다. 
	Super::BeginPlay();
	if (APlayerController* PC = GetWorld()->GetFirstPlayerController())
	{
		FInputModeGameOnly GameOnlyInputMode;
		PC->SetInputMode(GameOnlyInputMode);
	}

}
profile
🏦KAIST EE | 🏦SNU AI(빅데이터 핀테크 전문가 과정) | 📙CryptoHipsters 저자

0개의 댓글