목표

  • 캐릭터 클래스에 스프링암과 카메라 컴포넌트를 추가한다.
  • 인게임에서 플레이어 이동을 3인칭으로 관찰하는 것이 목표

DefaultCharacter.h

// Camera Section
protected:
	UPROPERTY(VisibleAnywhere, Category = "Camera")
	class USpringArmComponent* SpringArm;

	UPROPERTY(VisibleAnywhere, Category = "Camera")
	class UCameraComponent* Camera;
  • 이후에 기능을 추가하며 접근할 수도 있으니까 protected로 지정했다.
  • BP에서도 확인할 수 있도록 VisivleAnyWhere로 지정.
  • 의존성을 낮추기 위하여 전방선언을 사용했다(class).

DefaultCharacter.cpp

#include "GameFramework/SpringArmComponent.h"
#include "Camera/CameraComponent.h"
#include "Components/CapsuleComponent.h"
. . .
// 생성자
ADefaultCharacter::ADefaultCharacter()
{
 	. . .
	// Camera Setting
	SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
	SpringArm->SetupAttachment(GetCapsuleComponent());

	Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
	Camera->SetupAttachment(SpringArm);
	. . .
}
  • 생성자에서 작업한다.
    • 위치 확인 안하고 만들다가 ‘왜 BP에 안나오지?’ 싶어서 보니까 BeginPlay에 만들고있더라. 내 시간…
  • 헤더파일에 선언하지 않았던 카메라와 스프링 컴포넌트의 헤더를 추가한다.
    • 캡슐 컴포넌트를 추가한 이유는 Character 클래스에 기본으로 포함되어있는 캡슐 컴포넌트에 접근하기 위함이다.
  • CreateDefaultSubobject를 사용해 컴포넌트를 생성한다.
    • CreateDefaultSubobject<생성할 서브오브젝트="" 타입="">(TEXT(사용할 서브오브젝트 이름지정))이다.
    • 캡슐 컴포넌트 > 스프링암 > 카메라 순서로 계층 구조를 가지길 원했기에 SetupAttachment를 사용했다.
  • GetCapsuleComponent 사용 오류

    분명 존재하는 컴포넌트인데 왜 오류가 날까? UCapsuleComponent는 USceneComponent의 상속이 맞는데. 캐스팅을 진행해 보아도 문제가 해결되지 않았었다. 해당 블로그의 글을 보고 문제를 해결할 수 있었다.

BP 수정하기

Untitled

DefaultCharacter의 수정 과정을 모두 마쳤기에, 이를 기반으로 하는 BP에서도 스프링암과 카메라가 확인된다. 스프링암의 각도와 위치를 임의로 조정해보자.

Untitled

Untitled

이제 실행하면 플레이어 캐릭터가 보인다!

참고 자료