게임 개발 (언리얼 엔진)

UE4 게임 개발 EscapeGame - 2 : 캐릭터 및 게임모드 기본 세팅

종황이 2020. 11. 5. 16:36

1. 기본 맵 만들기

 

Starter Content를 추가해서 Architecture에 있는 Floor, Wall, Door 등을 사용했습니다.

기본 맵을 활용해서 여러가지 스테이지를 제작할 예정입니다.

 

2. 1인칭 캐릭터 만들기

// MyPlayerCharacter.h

protected:
	UPROPERTY(Category = Character, VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true"))
	UCameraComponent* Camera;
	UPROPERTY(Category = Character, VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true"))
	USpringArmComponent* Arm;
// MyPlayerCharacter.cpp

AMyPlayerCharacter::AMyPlayerCharacter()
{
 	// Set this character to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;

	Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
	Arm = CreateDefaultSubobject<USpringArmComponent>(TEXT("Arm"));

	Arm->SetupAttachment(GetMesh());
	Camera->SetupAttachment(Arm);
}

Character 클래스를 상속받아서 플레이어를 만들고 스프링암과 카메라를 달아서 1인칭으로 구현했습니다.

 

3. 액션, 축 매핑

// MyPlayerCharacter.h

private:
	void MoveFront(float fScale);
	void MoveSide(float fScale);
	void RotationY(float fScale);
	void RotationZ(float fScale);
	void JumpKey();
// MyPlayerCharacter.cpp

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

	PlayerInputComponent->BindAxis(TEXT("MoveFront"), this, &AMyPlayerCharacter::MoveFront);
	PlayerInputComponent->BindAxis(TEXT("MoveSide"), this, &AMyPlayerCharacter::MoveSide);
	PlayerInputComponent->BindAxis(TEXT("RotationY"), this, &AMyPlayerCharacter::RotationY);
	PlayerInputComponent->BindAxis(TEXT("RotationZ"), this, &AMyPlayerCharacter::RotationZ);

	PlayerInputComponent->BindAction(TEXT("Jump"), EInputEvent::IE_Pressed, this, &AMyPlayerCharacter::JumpKey);
}

프로젝트 세팅의 입력으로 가서 액션 매핑으로는 점프, 축 매핑으로는 WSAD로 전후좌우 움직일 수 있게 하였고, 마우스 이동을 통해 축 값을 회전시키는것을 구현했습니다.

 

4. 게임 모드

// MainGameMode.cpp

AMainGameMode::AMainGameMode()
{
	// 플레이어로 사용할 블루프린트 클래스의 UCLASS 정보를 얻어온다.
	// 이 기능은 생성자에서만 사용이 가능하다.
	// 클래스 정보를 만들어낼 때는 경로의 마지막에 _C를 꼭 붙여주어야한다.
	// defaultpawnclass로 바뀌는 버그 있으면 다시 레퍼런스 복붙하고 컴파일
	static ConstructorHelpers::FClassFinder<AMyPlayerCharacter> PlayerClass(TEXT("Blueprint'/Game/GameContent/Player/BPMyPlayerCharacter.BPMyPlayerCharacter_C'"));

	if (PlayerClass.Succeeded())
		DefaultPawnClass = PlayerClass.Class;
}

게임모드에서 위에 만든 플레이어 클래스를 디폴트폰으로 지정합니다.

게임모드가 제대로 적용됐는지 확인하고 플레이해보면 만들어놓은 플레이어가 제대로 빙의되어있는것을 확인할 수 있습니다.