[24.08.06]Unreal C++ - 게임플레이 프레임워크 (이득우의 언리얼 C++ 개발의 정석)

손지·2024년 8월 6일
0

Unreal

목록 보기
34/43


먼저 게임모드 베이스로 C++ 클래스를 하나 만듭니다.

이름을 ABGameMode로 만들고

그리고 폰으로도 하나 만들고 이름을 AbPawn 으로 한다.


그리고 월드설정에서 게임 모드 오버라이드에서 변경해준다.

이렇게 하면 3인칭이 아닌 1인칭으로 게임이 플레이된다.


그리고 ABGameMode의 선언부와 구현부를 위와같이 작성하면

디폴트 폰 클래스가 변경된것을 알수있다.


그리고 플레이어 컨트롤러를 상속받는 C++ 클래스를 만듭니다.


그리고 게임모드에 헤더와 코드를 추가해줍니다.


그럼 컨트롤러도 위와같이 변경된것을 알수있다.

그럼 이제 스크립트는

ABPlayerController.h

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

#pragma once

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

UCLASS()
class ARENABATTLE_API AABPlayerController : public APlayerController
{
	GENERATED_BODY()
	
public:
	virtual void PostInitializeComponents() override;

	virtual void OnPossess(APawn* aPawn) override;

};

ABPlayerController.cpp

#include "ABPlayerController.h"

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/ArenaBattle.h"
#include "GameFramework/Pawn.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;
	virtual void PostInitializeComponents() override;
	virtual void PossessedBy(AController* NewController) override;

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

};

ABPawn.cpp

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


#include "ABPawn.h"

// Sets default values
AABPawn::AABPawn()
{
 	// 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;

}

// Called when the game starts or when spawned
void AABPawn::BeginPlay()
{
	Super::BeginPlay();
	
}

// Called every frame
void AABPawn::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

}

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

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

// Called to bind functionality to input
void AABPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);

}

ABGameMode.h

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

#pragma once

#include "ArenaBattle/ArenaBattle.h"
#include "GameFramework/GameModeBase.h"
#include "ABGameMode.generated.h"

UCLASS()
class ARENABATTLE_API AABGameMode : public AGameModeBase
{
	GENERATED_BODY()

public:
	AABGameMode();

	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"));
}

하고 실행해보면

로그가 정상적으로 뜨는것을 볼수있다.

profile
언리얼 개발자가 될사람

0개의 댓글