캐릭터에 카메라 & 스프링암 추가하기
Unreal Engine 5의 캐릭터에 카메라와 스프링암 추가
목표
- 캐릭터 클래스에 스프링암과 카메라 컴포넌트를 추가한다.
- 인게임에서 플레이어 이동을 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 수정하기
DefaultCharacter의 수정 과정을 모두 마쳤기에, 이를 기반으로 하는 BP에서도 스프링암과 카메라가 확인된다. 스프링암의 각도와 위치를 임의로 조정해보자.
이제 실행하면 플레이어 캐릭터가 보인다!