본문 바로가기
언리얼 최고/언리얼 c++

이득우의 언리얼 C++ 정리 - 4 (게임플레이 프레임워크)

by Lee_story_.. 2022. 8. 17.
728x90

 

*  아래의 책의 내용을 정리한 글입니다!  *

 

 

이번 4장에서는 언리얼 프로젝트에서 기본이 되는 요소들

GameMode , PlayerController, pawn 등이 어떻게 생성되는지

어떻게 설정하는지에 따른 내용이었습니다.

 

먼저!

 

GameMode

게임의 기본적인 설정을 할 수 있는 요소로현재 게임의 폰, 컨트롤러, 스태이트 등 중요한 것들을 설정할 수 있습니다!

 

 

 

PlayerController?

현재 사용자가 어떤 액터를 통해 플레이하기 위해 폰과 사용자를 연결해주는 요소라고 할 수 있습니다!

 

 

Pawn?

사용자가 플레이할 게임 캐릭터!

 

 

등등 중요한 요소들이 있지만 일단 이 3가지 요소들을 통해 게임의 단계를 알아보도록 하겠습니다.

 

게임의 시작 버튼을 누르게 되면 

  1. 플레이어 컨트롤러의 생성
  2. 플레이어 폰의 생성
  3. 플레이어 컨트롤러가 플레이어 폰을 빙의
  4. 게임의 시작

순서로 게임이 진행됩니다

 

 

이걸 좀 더 시각적으로 알아보기 위해 로그를 찍어봅시다!

 

 

먼저 Pawn와 플레이어 컨트롤러를 만들어 봅시다!

클래스 생성은 하실수 있겠죠!

 

하나씩 추가한 다음다음의 코드를 작성해줍니다!

 

ABPlayerController.h

#pragma once

#include "ArenaBattle.h"
#include "GameFramework/PlayerController.h"
#include "ABPlayerController.generated.h"

/**
 * 
 */
UCLASS()
class ARENABATTLE_API AABPlayerController : public APlayerController
{
	GENERATED_BODY()

protected:
	virtual void BeginPlay() override;

public:
	virtual void PostInitializeComponents() override;
	virtual void OnPossess(APawn* aPawn) override;
	
};

 

 

ABPlayerController.cpp

#include "ABPlayerController.h"

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

	FInputModeGameOnly InputMode;
	SetInputMode(InputMode);
}

void AABPlayerController::PostInitializeComponents()
{
	Super::PostInitializeComponents();
	ABLOG_S(Warning);
}

void AABPlayerController::OnPossess(APawn* aPawn)
{
	ABLOG_S(Warning);
	Super::OnPossess(aPawn);
}

 

 

ABPawn.h

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

#pragma once

#include "ArenaBattle.h"
#include "GameFramework/Pawn.h"
#include "GameFramework/FloatingPawnMovement.h"
#include "ABPawn.generated.h"

UCLASS()
class ARENABATTLE_API AABPawn : public APawn {
	GENERATED_BODY()

public:
	// Sets default values for this pawn's properties
	AABPawn();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;

	// Called to bind functionality to input
	virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;

	virtual void PostInitializeComponents() override;
	virtual void PossessedBy(AController* NewController) override;

 

ABPawn.cpp에 추가

//~~~


void AABPawn::PostInitializeComponents()
{
	Super::PostInitializeComponents();
	ABLOG_S(Warning);
}

void AABPawn::PossessedBy(AController* NewAxisValue)
{
	ABLOG_S(Warning);
	Super::PossessedBy(NewAxisValue);
}

//~~~

 

 

 

그다음 게임모드를 수정해 줍시다.

 

 

ABGameMode.h 에 추가

virtual void PostLogin(APlayerController* NewPlayer) override;

 

 

ABGameMode.cpp

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


#include "ABGameMode.h"
#include "ABPawn.h"
#include "ABPlayerController.h"

AABGameMode::AABGameMode()
{
	DefaultPawnClass = AABPawn::StaticClass(); // 기본값 설정!
	PlayerControllerClass = AABPlayerController::StaticClass();
}


void AABGameMode::PostLogin(APlayerController* NewPlayer)
{
	ABLOG(Warning, TEXT("PostLogin Begin"));
	Super::PostLogin(NewPlayer);
	ABLOG(Warning, TEXT("PostLogin End"));
}

 

 

 

 

하고 실행하면

아래처럼 로그가 남게 됩니다!

  1. 플레이어 컨트롤러의 생성
  2. 플레이어 폰의 생성
  3. 플레이어 컨트롤러가 플레이어 폰을 빙의
  4. 게임의 시작!

 

그리고 게임모드의 기본값도 잘 설정돼있는 걸 볼 수 있습니다!

 

 

 

 

 

 

 

 

 

틀린 점이 있다면 댓 달아주세요!

댓글