나만의 게임모드 만들기
우선 맵도 새로 만들어 보자 -> 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);
}