[UE5] Pawn & Character

GamzaTori·2024년 9월 30일

UE5 C++

목록 보기
4/27
post-thumbnail

Pawn

  • Actor는 언리얼 엔진의 레벨에 배치할 수 있는 오브젝트를 의미한다
  • Pawn는 Actor를 상속받았으며 Controller를 통해 Pawn에 Poesses(빙의)하여 플레이어나 AI가 제어할 수 있다
  • Pawn의 멤버 변수 중 중요한 부분

- Controller를 통해 입력을 받을 수 있다
- Player나 AI가 Possess(빙의)하여 조작할 수 있다
- 키보드 입력 매핑 등은 Pawn의 SetupPlayerInputComponent보다 PlayerController에서 구현하는 것이 더 깔끔하다
  • Auto Possess Player의 옵션을 통해 Pawn에 Player를 Possess 할 수 있다. image.png
  • Pawn에 Capsule Collision, SkeletalMesh, SprintArm, Camera 추가하기
    // header
    // 멤버 변수 추가
    UPROPERTY(Category = Character, VisibleAnywhere, BlueprintReadOnly)
    TObjectPtr<class UCapsuleComponent> CapsuleComponent;
    
    UPROPERTY(Category = Character, VisibleAnywhere, BlueprintReadOnly)
    TObjectPtr<class USkeletalMeshComponent> SkeletalMeshComponent;
    
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
    TObjectPtr<class USpringArmComponent> SpringArmComponent;
    	
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
    TObjectPtr<class UCameraComponent> CameraComponent;
    
    //cpp
    // 생성자에서 초기화
    CapsuleComponent = CreateDefaultSubobject<UCapsuleComponent>(TEXT("Capsule"));
    CapsuleComponent->InitCapsuleSize(34.0f, 88.0f);
    RootComponent = CapsuleComponent;
    	
    SkeletalMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("SkeletalMesh"));
    SkeletalMeshComponent->SetupAttachment(CapsuleComponent);
    SkeletalMeshComponent->SetRelativeLocationAndRotation(FVector(0, 0, -88), FRotator(0, 0, -90));
    
    SpringArmComponent = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
    SpringArmComponent->SetupAttachment(CapsuleComponent);
    SpringArmComponent->TargetArmLength = 700.f;
    	
    CameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
    CapsuleComponent->SetupAttachment(SpringArmComponent);

Character

  • Character은 Pawn을 상속받았고 Pawn에서 설정해준 Capsule과 Mesh, Movement Component가 설정되어있다.
  • Character에 SpringArm, Camera 추가하기
    // header
    protected:
    	UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
    	TObjectPtr<class USpringArmComponent> SpringArmComponent;
    	
    	UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
    	TObjectPtr<class UCameraComponent> CameraComponent;
    	
    // cpp
    SpringArmComponent = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
    SpringArmComponent->SetupAttachment(GetCapsuleComponent());
    SpringArmComponent->TargetArmLength = 700.f;
    	
    CameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
    CameraComponent->SetupAttachment(SpringArmComponent);
    • Pawn에서 설정해준 것과 동일하다
  • Character Movement Component에서 중요한 것

- Use Controller Desired Rotation: Controller가 가려는 방향으로 간다
- Orient Rotation to Movement: 이동할때만 이동하는 방향을 바라본다
  • CharacterMovement, SpringArm, Pawn의 Rotation 설정을 통해 플레이어의 움직임과 카메라의 움직임을 다양하게 설정할 수 있다
profile
게임 개발 공부중입니다.

0개의 댓글