Unreal 2-1. 케릭터 개요

별빛에소원을·2025년 1월 22일

TeamSparta-Unreal1기

목록 보기
13/18
post-thumbnail

케릭터 구현

GameMode

게임의 총괄 관리자 = GameManager 역할을하 하며 규칙과 흐름을 총괄한다.

  1. Character는 PawnClass를 상속받는다.
  2. PlayerController - Character에 빙의
  3. GameRule : 게임 규칙
  4. GameState : 전역 데이터
  5. PlayerState : 케릭터의 데이터

GameMode와 GamneModeBase가 존재한다.
GameModeBase는 멀티플 기능이 불가하다.

GameMode의 주요 기능

  • Player/Pawn Spawn
    • 게임이 시작 될 때, DefaultPawn 혹은 지정한 Pawn 클래스를 자동으로 Spawn한다.
    • Spawn된 Pawn을 플레이어가 조작이 가능하도록 PlayerController와 연동하는 역할을 한다.
  • PlayerContoller 지정
    • Player의 입력을 전달하고 처리하는 클래스로 동작을 정의한다.
  • Role관리
    • 점수 계산, 타이머, 라운드 제어, 난이도 등 전반의 규칙을 정의하고 유지한다.
    • 특정 점수 달성, 보스 몬스터 처치, 제한 시간 종료 등 승리/패배를 결정하는 조건을 관리.
    • 승리 혹은 패배가 확정되면, 게임 오버 화면을 띄우거나 다음 레벨로 전환하는 식의 후속 처리를 담당
  • GameState/PlayerState 사용
    • GameState는 전체 흐름을 관리하고, PlayerState는 Player별 정보를 관리한다.
    • 체계적으로 정보를 관리하고 싶을 경우 사용한다.

GameMode를 생성

BP를 생성해 두는 것이 일반적이다.


GameMode 적용방법

  1. Edit->ProjectSetting->DefaultGameMode 변경
  2. Window->WorldSetting 패널에서 변경이 가능하다.
    레벨에 따라 적용하는 방식이 달라야 할 경우 사용한다.
  3. 게임모드의 인스턴트는 PlayerStart로 표기된다.

Pawn

  • Pawn은 Character의 부모 클래스이다. 케릭터는 이족보행하는 인간형 메쉬에 어울리기 때문에 이외것을 구현하려면 Pawn을 구성하는 것이 유리하다.
  • Pawn에는 기본 기능이 없다.

Character

  • Pawn을 상속받아 만들어진 클래스다.
  • 이동, 회전, 점프, 중력, 지형 따라가기, 네트워크 동기화 등 보행ㅎ여 케릭터에게 필요한 기능이 모두 구현되어 있다.
  • MoveForward, MoveRight, Jump가 이미 존재하므로 몇줄의 코드로 구현이 가능하다.
  • 일반적인 인간형 케릭터를 만드는데 최적화 되어있다.

케릭터 생성

  • C++ 클래스를 만들 되 CharacterClass를 상속받아 만들면 된다.
  • BP를 생성 해두면 세부 기능에 대한 조작이 편리하다.

Character의 Component

  • Capsule
    • 기본적으로 충돌체이고 이게 기본적인 Root이다.
  • Skeletal Mesh
    • 애니메이션을 적용하기 위한 Bone정보이다.
  • ArrowComponent
    • 플레이어가 기본적으로 바라보고 있는 방향이다 Skeletal과 일치시키는 것이 좋다.
  • Character Movement
    • 이동, 점프, 중력, 네트워크 등의 기능이 추가되어 있다.

위의 4가지는 기본적으로 달려 있는 컴포넌트 들이다.

Camera / CameraArm

2개를 만들어 주어야 조작시 화면을 볼 수 있다.

	  UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Camera")
	  USpringArmComponent* SpringArmComp;
	  // 카메라 컴포넌트
	  UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Camera")
	  UCameraComponent* CameraComp;
  • VisibleAnywhere, BlueprintReadOnly: 블루프린트에서 보기만 가능하고, C++ 코드 쪽에서만 수정 가능하게 하는 속성입니다.
  • SpringArmComp
    • 스프링 암 컴포넌트(카메라 붐). 캐릭터와 카메라 간의 거리를 유지하고, 충돌 시 카메라가 벽 등에 박히지 않도록 위치를 자동 조정해줍니다.
  • CameraComp
    • 실제로 화면에 표시되는 카메라 컴포넌트입니다. 위치와 회전을 제어하면 게임 뷰가 변경됩니다.
ASpartaCharacter::ASpartaCharacter()
{
		// Tick 함수는 우선 꺼둡니다.
		PrimaryActorTick.bCanEverTick = false;
		
		// (1) 스프링 암 생성
    SpringArmComp = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
    // 스프링 암을 루트 컴포넌트 (CapsuleComponent)에 부착
    SpringArmComp->SetupAttachment(RootComponent);
    // 캐릭터와 카메라 사이의 거리 기본값 300으로 설정
    SpringArmComp->TargetArmLength = 300.0f;  
    // 컨트롤러 회전에 따라 스프링 암도 회전하도록 설정
    SpringArmComp->bUsePawnControlRotation = true;  

    // (2) 카메라 컴포넌트 생성
    CameraComp = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
    // 스프링 암의 소켓 위치에 카메라를 부착
    CameraComp->SetupAttachment(SpringArmComp, USpringArmComponent::SocketName);
    // 카메라는 스프링 암의 회전을 따르므로 PawnControlRotation은 꺼둠
    CameraComp->bUsePawnControlRotation = false;
}

카메라와, Arm을 설정후 BP로 가면 추가되어있는 것을 확인 할 수 있다.

Cpp에서 DefaultPawnClass 설정

#include "SpartaGameMode.h"
#include "SpartaCharacter.h"
UCLASS()
class SPARTAPROJECT_API ASpartaGameMode : public AGameMode
{
    GENERATED_BODY()

public:
		ASpartaGameMode();
}

ASpartaGameMode::ASpartaGameMode()
{
    DefaultPawnClass = ASpartaCharacter::StaticClass(); // Controller와 연동된다.
}
  • 레벨 씬에 혹시 다른 Pawn 혹은 이미 배치된 객체가 있다면, 혼동되지 않도록 삭제하거나 비활성화합니다.
  • 게임이 시작되면, DefaultPawnClass로 설정된 캐릭터는 맵에 배치된 Player Start 위치에 스폰됩니다. Player Start는 언리얼 엔진에서 기본 플레이어 캐릭터의 시작 위치를 지정하는 데 사용됩니다.
    • 맵에 Player Start가 배치되지 않은 경우, 언리얼 엔진은 캐릭터를 맵의 원점(0, 0, 0)에 스폰하려고 시도합니다. 하지만 충돌 문제로 인해 스폰이 실패할 수도 있습니다.
    • Place Actors 패널 > Basic 카테고리에서 Player Start를 선택해서 맵에 드래그 앤 드롭하면 추가하고, 위치를 원하는 스폰 지점으로 조정하세요.
  • 아직 키보드나 마우스 입력으로 캐릭터가 움직이지 않습니다. 다음 강의에서 이 작업을 진행할 예정입니다.
profile
취미로 게임하는사람

0개의 댓글