1. GameMode
GameMode란
- 게임의 전반적인 규칙과 흐름을 총괄 관리하는 컨트롤 타워 역할하는 클래스
- 어떤 캐릭터를 스폰하는지,
- 어떤 PlayerController를 사용할지,
- 점수계산 방식 등의 주요 게임 플레이 로직을 담당한다.
- 크게, GameMode와 GameModeBase 클래스가 있다.
- GameModeBase는 단순화되어있으며, 간단한 게임에서 사용하고 멀티플레이어 로직이 없다.
- GameMode 클래스는 좀 더 복잡하고 무겁지만, 더 많은 기능이 있으며, 멀티플레이어 로직이 존재한다.
GameMode의 주요 기능
- 플레이어 Pawn/Character 스폰
- PlayerController 지정
- 게임 규칙 관리
- 점수 계산, 타이머, 라운드 제어
- 승/패 결정
- 게임 오버 화면이나 다음 레벨로 전환하는 등의 후속 처리
- GameState/PlayerState 사용
- 상태 저장과 관리를 체계적으로 할 때 사용
- GameState : 게임 전역 데이터(점수, 타이머 등)을 관리
- PlayerState : 플레이어별 정보(체력 등) 을 관리
- 상태 저장과 관리를 체계적으로 할 때 사용
GameMode 지정
- GameMode 는 월드세팅에서 적용할 수 있고,
- 프로젝트 세팅에서도 설정해 줄 수 있는데
- 만약 두 GameMode가 다르다면, 월드에서 세팅해준 GameMode를 1순위로 적용한다.
2. Pawn
Pawn 클래스란
- 플레이어 혹은 AI가 Possess할 수 있는 가장 상위 클래스이다.
- 이동로직, 충돌, 중력, 네트워크 이동 등의 기능은 포함되어 있지 않다. -> 이 경우 Character 클래스가 더 좋다.
- 즉, Pawn 클래스는 비행기, 드론, 카메라 등 캐릭터 형태가 아닌 것을 구현할 때 유용하다.
3. Character
Character 클래스란
- Pawn을 상속받아 만들어진 클래스 중 하나로 UCharacterMovementComponent를 포함하고 있다.
- 달리기, 점프 등 움직임에 대한 기능이 구현되어있어 보행형 캐릭터를 만들 때 유용하다.
Character 클래스 만들어보기
- C++에서 한 기본 설정은, spring arm 컴포넌트와 카메라를 달아주는 것이다.
- 헤더파일의 중복을 없애주고 빠른 컴파일을 위해 .h 파일에서 전방선언을 해 주었다.
- .cpp 파일에서는 spring arm과 카메라 세팅을 했는데, 이때 spring arm만 pawn과 함께 회전시키도록 해주었다.
#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "SpartaCharacter.generated.h"
class USpringArmComponent;
class UCameraComponent;
UCLASS()
class SCC_PROJECT_API ASpartaCharacter : public ACharacter
{
GENERATED_BODY()
public:
ASpartaCharacter();
protected:
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
public:
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Camera")
USpringArmComponent* SpringArmComp;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Camera")
UCameraComponent* CameraComp;
};
#include "SpartaCharacter.h"
#include "Camera/CameraComponent.h"
#include "GameFramework/SpringArmComponent.h"
ASpartaCharacter::ASpartaCharacter()
{
PrimaryActorTick.bCanEverTick = false;
SpringArmComp = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
SpringArmComp->SetupAttachment(RootComponent);
SpringArmComp->TargetArmLength = 300.f;
SpringArmComp->bUsePawnControlRotation = true; //카메라 회전 세팅
CameraComp = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
CameraComp->SetupAttachment(SpringArmComp, USpringArmComponent::SocketName); //끝부분에 붙이기
CameraComp->bUsePawnControlRotation = false;
}
void ASpartaCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
}
- BP에서는 캐릭터의 스켈레탈 메시 설정과 위치와 방향세팅을 하였다.
- 언리얼에서 캐릭터는 x축 방향이 앞 방향(화살표 컴포넌트의 방향)이므로, -90도 회전을 통해 맞춰주고
- 캡슐 컴포넌트의 크기와 스켈레탈 메시의 위치가 잘 맞도록 조절해 주었다.
'Unreal Engine' 카테고리의 다른 글
Unreal Engine - 캐릭터 만들기 (0) | 2025.01.24 |
---|---|
Unreal Engine - Enhanced Input System (PlayerController) (2) | 2025.01.22 |
Unreal Engine - 클래스와 변수의 리플렉션 (매크로 지정자 위주) (0) | 2025.01.22 |
Unreal Engine - Actor의 생성과 응용 (0) | 2025.01.21 |
Unreal Engine - 개발 환경 세팅 및 빌드 프로세스 (0) | 2025.01.21 |