(Unreal : 입문) 4. 게임플레이 프레임워크

Posted by : at

Category : Unreal-entry


나만의 게임모드 만들기

우선 맵도 새로 만들어 보자 -> Ctrl + n

일단 Contens아래 DefaultMap으로 저장 후

기본맵으로 지정하기 위해
편집 -> 프로젝트 세팅
맵 & 모드에서 맵을 수정

이제 게임모드를 적용해 보자.
월드세팅 -> 게임모드 오버라이드

Pawn을 생성해 내가 조종할 캐릭을 만들어보자

Mesh를 지정하자

// ...

UCLASS()
class TESTUNREAL_API AMyPawn : public APawn
{
	// ...

private:
	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"));
	RootComponent = Mesh;
	static ConstructorHelpers::FObjectFinder<UStaticMesh> SM(TEXT("StaticMesh'/Game/StarterContent/Props/SM_Couch.SM_Couch'"));
	if (SM.Succeeded())
	{
		Mesh->SetStaticMesh(SM.Object);
	}
}

게임모드를 내가만든 MyPawn의 Pawn으로 교체하자

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

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

DefaultPawn이 MyPawn이 되어있다.


Key 입력을 받아서 Pawn을 이동해보자

void AMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);

	PlayerInputComponent->BindAxis(TEXT("UpDown"), this, &AMyPawn::UpDown);
	PlayerInputComponent->BindAxis(TEXT("LeftRight"), this, &AMyPawn::LeftRight);
}

void AMyPawn::UpDown(float value)
{
	if (value == 0.f)
		return;
	UE_LOG(LogTemp, Warning, TEXT("UpDown : %f"), value);
}

void AMyPawn::LeftRight(float value)
{
	if (value == 0.f)
		return;
	UE_LOG(LogTemp, Warning, TEXT("LeftRight : %f"), value);
}

PlayerInputComponent->BindAxis(TEXT("UpDown")의 UpDown, LeftRight와 프로젝트 세팅을 맞춰줘야한다.

언리얼 컴파일

움직이진 않지만 로그가 뜨는것을 확인가능


키보드로 Pawn을 움직이게 해보자

UCLASS()
class TESTUNREAL_API AMyPawn : public APawn
{
	// ...

	UPROPERTY(VisibleAnyWhere)
	class UFloatingPawnMovement* Movement;
};
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"));
	Movement = CreateDefaultSubobject<UFloatingPawnMovement>(TEXT("MOVEMENT"));

	// ...
}

// ...

void AMyPawn::UpDown(float value)
{
	if (value == 0.f)
		return;
	
	AddMovementInput(GetActorForwardVector(), value);
}

void AMyPawn::LeftRight(float value)
{
	if (value == 0.f)
		return;

	AddMovementInput(GetActorRightVector(), value);
}

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links