Pawn 핵심 컴포넌트
인간형 폰을 위한 컴포넌트로 사용되는 것은 아래와 같다
참고로 실제 게임 구현에서는
해당 APawn을 상속받아 만든 ASPlayerPawn은 사용하지 않고
ACharacter를 상속받아 클래스를 만든다
- Capsule Component
충돌 처리를 위한 컴포넌트로 루트 컴포넌트의 역할을 주로 담당한다
캐릭터 절반 높이와 몸둘레를 설정해주어야 하는데
해당 에셋을 Viewport에 드래그 드롭하고
Viewport 좌상단 Perspective를 눌러 Front로 시점을 바꾸어서
원하는 시작 위치에 마우스 휠 버튼 누르고,
끝 위치에 드래그하면 cm 단위 값이 나온다
- SkeletalMesh Component
캐릭터 랜더링과 애니메이션을 담당한다
- FloatingPawnMovement Component
플레이어의 입력에 따라 캐릭터의 움직임을 담당한다
- SpringArm Component
3인칭 시점으로 카메라 구도를 편리하게 설정하는 컴포넌트이다
카메라 지지대의 길이와 컴포넌트의 회전을 설정할 수 있다
- Camera Component
가상 세계의 모습을 플레이어 화면에 전송해 주는 컴포넌트이다
Pawn 클래스 생성
// SPlayerPawn.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Pawn.h"
#include "SPlayerPawn.generated.h"
class UCapsuleComponent;
class USkeletalMeshComponent;
class UFloatingPawnMovement;
class USpringArmComponent;
class UCameraComponent;
UCLASS()
class STUDYPROJECT_API ASPlayerPawn : public APawn
{
GENERATED_BODY()
public:
ASPlayerPawn();
protected:
UPROPERTY(EditAnywhere, Category="ASPlayerPawn", Meta=(AllowPrivateAccess))
TObjectPtr<UCapsuleComponent> CapsuleComponent;
UPROPERTY(EditAnywhere, Category="ASPlayerPawn", Meta=(AllowPrivateAccess))
TObjectPtr<USkeletalMeshComponent> SkeletalMeshComponent;
UPROPERTY(EditAnywhere, Category="ASPlayerPawn", Meta=(AllowPrivateAccess))
TObjectPtr<UFloatingPawnMovement> FloatingPawnMovementComponent;
UPROPERTY(EditAnywhere, Category="ASPlayerPawn", Meta=(AllowPrivateAccess))
TObjectPtr<USpringArmComponent> SpringArmComponent;
UPROPERTY(EditAnywhere, Category="ASPlayerPawn", Meta=(AllowPrivateAccess))
TObjectPtr<UCameraComponent> CameraComponent;
};
// SPlayerPawn.cpp
#include "Character/SPlayerPawn.h"
#include "Components/CapsuleComponent.h"
#include "GameFramework/SpringArmComponent.h"
#include "Camera/CameraComponent.h"
#include "GameFramework/FloatingPawnMovement.h"
ASPlayerPawn::ASPlayerPawn()
{
PrimaryActorTick.bCanEverTick = false;
float CharacterHalfHeight = 90.f;
float CharacterRadius = 40.f;
#pragma region InitializeCapsuleComponent
CapsuleComponent = CreateDefaultSubobject<UCapsuleComponent>(TEXT("CapsuleComponent"));
SetRootComponent(CapsuleComponent);
CapsuleComponent->SetCapsuleHalfHeight(CharacterHalfHeight);
CapsuleComponent->SetCapsuleRadius(CharacterRadius);
#pragma endregion
#pragma region InitializeSkeletalMesh
SkeletalMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("SkeletalMeshComponent"));
SkeletalMeshComponent->SetupAttachment(RootComponent);
FVector PivotPosition(0.f, 0.f, -CharacterHalfHeight);
FRotator PivotRotation(0.f, -90.f, 0.f);
SkeletalMeshComponent->SetRelativeLocationAndRotation(PivotPosition, PivotRotation);
#pragma endregion
#pragma region InitializeCamera
SpringArmComponent = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArmComponent"));
SpringArmComponent->SetupAttachment(RootComponent);
SpringArmComponent->TargetArmLength = 400.f;
SpringArmComponent->SetRelativeRotation(FRotator(-15.f, 0.f, 0.f));
CameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("CameraComponent"));
CameraComponent->SetupAttachment(SpringArmComponent);
#pragma endregion
FloatingPawnMovementComponent = CreateDefaultSubobject<UFloatingPawnMovement>(TEXT("FloatingPawnMovementComponent"));
}
Skeletal Mesh Asset 설정
Skeletal Mesh Asset을 하드 코딩하는 방법도 있지만
아래와 같이 에디터를 통해 수정해 주는 것이 좋다
BP_PlayerPawn > Details > Skeletal Mesh Asset에 원하는 에셋을 지정하면 된다
'게임 엔진 > [코드조선] 언리얼' 카테고리의 다른 글
언리얼 Pawn - 애니메이션 기초 설정 (0) | 2024.05.13 |
---|---|
언리얼 Pawn - Pawn 조작 (0) | 2024.05.13 |
언리얼 게임 플레이 프레임워크 - 이벤트 함수 Flow (0) | 2024.05.12 |
언리얼 게임 플레이 프레임워크 - 플레이어 컨트롤러와 폰 (0) | 2024.05.12 |
언리얼 게임 플레이 프레임워크 - Game Mode (0) | 2024.05.12 |