본문 바로가기

언리얼엔진/c++클래스 만들어보기

UE5 GameModeBase

GameMode를 연습하기 위해 프로젝트를 새로 만들어 보겠습니다.

Games의 Blank템플릿을 선택합니다.

프로젝트 디테일은 C++로 하고 Starter Content를 포함시킵니다. 이름을 GameMode로 하고 Create합니다.

레벨에디터가 열리면 File>New Level을 선택하고

Base를 선택해줍니다.

컨텐트드러워를 열고 컨텐트폴더아래 Maps라는 폴더를 생성해줍니다.

뷰포트롷 돌아와  Ctrl-S를  누르면 레벨을 저장할수 있는데 방금만든 Maps폴더에 DefaultMap이라고 저장합니다.

프로젝트세팅 Maps탭에 Default Maps의 Start Map, Default Map을 방금만든 DefaultMap으로 설정해주면 에디터실행시 자동으로 로딩된다.

 

레벨에디터 아웃라이너 아래 Detail탭은 이제 다들 아시겠죠 그 옆의 탭인 World Settings를 눌러보면

GameMode Overrride가 현재 None입니다.  

GameMode는 다음과 같이 게임전반의 컨트롤규칙을 관리하는 파일입니다.

게임모드의 자세한 설명은 매뉴얼을 참조해주세요 

2023.10.15 - [언리얼레퍼런스/게임플레이프레임워크] - 게임 모드와 게임 스테이트

 

프로젝트이름이 GameMode라 GameModeGameMode라고 보이지만 게임모드는 기본적으로 아래에 만들어져 있어 사용해도 무관하지만 연습을 위해 하나 만들어보겠다. 

게임모드는 블루프린트로 만들수 있지만 C++클래스로 만들어 보겠다.

GameMode폴더 안에 우클릭후 New C++ Class를 클릭한다.

부모클래스로 GameModeBase를 선택해주고

이름과 폴더는 디폴트로 놔두고 저장한다. 

저장후 컴파일에러가 나는데  Visual Studio 로 가서 모드 다시로드를 눌러준다.

다시 언리얼로 돌아와 라이브코딩을 해준다. 정상적으로 수행하면 GameMode폴더에 방금만든 MyGameModeBase가 보인다.

이제 월드세팅의 GameMode Override 선택을 누르면 MyGameModeBase가 보일것이도 선택해준다.

블루프린트와는 다른게 Selected GameMode 아이템들이 비활성화 되어 있다. 이걸 C++코드로 넣어줄것이다.

첫번째 Default Pawn Class에 지정할 걸 만들어 보겠다.

앞에서 부모클래스를 Actor를 만들어 봤는데 Pawn은 Actor에 사용자입력을 받을 수 있는 클래스 이다. 

C++Classe>GameMode폴더에 우클릭후 C++클래스를 클릭후 부모로 Pawn을 선택후 이름을 MyPawn으로 한다.

Visual Studio로 가서 변경을 모두 다시 로드해주면 MyPawn.cpp MyPawn.h가 추가되어있다.

MyPawn.h 맨 밑에 StaticMeshComponent등록을 위해 코드를 추가해준다.

	UPROPERTY(VisibleAnywhere)
	UStaticMeshComponent* Mesh;
}

 

AMyPawn::AMyPawn()
{
 	// Set this pawn to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;
	Mesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MESH"));
	ConstructorHelpers::FObjectFinder<UStaticMesh> SM(TEXT("/Game/StarterContent/Props/SM_Couch.SM_Couch"));
	if (SM.Succeeded()) {
		Mesh->SetStaticMesh(SM.Object);
	}
}

SM(TEXT(" 이하 폴더는 StarterContent/Props안에 있는 SM_Couch의 경로인데 아이콘을 선택하고 Ctrl-C를 한후 Ctrl-V로 붙인후 위와 같이 정리하면 된다. 꼭 /Game으로 시작하기 앞에 필요없는 부분은 지워준다.

Visual Studio에서 MyGameModeBase.h에 클래스명과 같은 새성자 함수를 추가해준다. 

class GAMEMODE_API AMyGameModeBase : public AGameModeBase
{
	GENERATED_BODY()
	AMyGameModeBase();
};

MyGameModeBase.cpp로 가면 거의 텅텅비어 있는데 다음과 같이 생성자를 추가해준다.

#include "MyGameModeBase.h"
#include "MyPawn.h"

AMyGameModeBase::AMyGameModeBase() 
{
	DefaultPawnClass = AMyPawn::StaticClass();
}

저장후 라이브코딩해주면 Default Pawn Class가 MyPawn으로 잘 바껴있다.

플레이 해보면 배치를 안했던 M yPawn이  나타나는데 MyPawn의 일인칭 시점으로 보여 사실 확인이 어렵다 F8을 눌러 Zoom Out을 해보면 보인다. 그리고 컴포넌트에서 StartPoint를 찾아 배치해주면 게임 시작시 원하는 지점에 MyPawn을 표시할 있다.