Character 클래스에 Spring Arm과 Camera 추가하기

김민수·2025년 1월 24일

언리얼 C++

목록 보기
25/32

1. Spring Arm Component

  • 카메라와 캐릭터 간의 거리를 유지하면서 충돌 처리를 지원하는 컴포넌트다.
  • 예: 벽에 가까이 가면 카메라가 자동으로 당겨져서 벽 뒤에 가려지지 않는다.
  • 카메라 흔들림, 줌인/줌아웃 효과도 쉽게 구현 가능하다.


2. Camera Component

  • 화면에 보여질 카메라 뷰를 제공하는 컴포넌트다.
  • Spring Arm에 붙여서 캐릭터를 따라가도록 설정 가능하다.


3. C++ 코드로 Spring Arm과 Camera 추가하기

SpartaCharacter.h

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "SpartaCharacter.generated.h"

UCLASS()
class CH3CPP_API ASpartaCharacter : public ACharacter
{
	GENERATED_BODY()
    
public:
	ASpartaCharacter();

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Camera")
	USpringArmComponent* SpringArmComp;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Camera")
	UCameraComponent* CameraComp;

protected:
	virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
};

SpartaCharacter.cpp

#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.0f;
	SpringArmComp->bUsePawnControlRotation = true;

	CameraComp = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
	CameraComp->SetupAttachment(SpringArmComp, USpringArmComponent::SocketName);
	CameraComp->bUsePawnControlRotation = false;
}

void ASpartaCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);

}

(1) Spring Arm Component 생성

SpringArmComp = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
  • SpringArm이라는 이름으로 USpringArmComponent 타입의 컴포넌트를 생성해서 SpringArmComp에 저장한다.
  • CreateDefaultSubobject :
    • 객체(컴포넌트)를 생성할 때 사용하는 함수

(2) Spring Arm을 캐릭터에 연결

SpringArmComp->SetupAttachment(RootComponent);
  • Spring Arm 컴포넌트를 캐릭터의 루트 컴포넌트(Root Component)에 연결한다.
  • 루트 컴포넌트는 기본적으로 캐릭터의 Capsule Component다.
  • Spring ArmCapsule Component를 기준으로 움직이고 회전하게 된다.
  • SetupAttachment:
    • 컴포넌트를 다른 컴포넌트에 부착(Attach)한다.

(3) Spring Arm의 거리 설정

SpringArmComp->TargetArmLength = 300.0f;
  • Spring Arm 끝에 붙은 카메라와 캐릭터 사이의 거리를 300.0 으로 설정한다.
  • TargetArmLength:
    • 카메라가 캐릭터로부터 얼마나 떨어져 있는지를 설정한다.

(4) Spring Arm의 Pawn Control Rotation 설정

SpringArmComp->bUsePawnControlRotation = true;
  • 캐릭터가 회전하면 Spring Arm이 캐릭터의 컨트롤 회전(Pawn Control Rotation)을 따라갈지 설정한다.
  • bUsePawnControlRotation = true:
    • 캐릭터가 회전하면 Spring Arm도 따라 회전한다.
  • bUsePawnControlRotation = false:
    • Spring Arm은 캐릭터의 회전에 영향을 받지 않는다.

(5) Camera를 Spring Arm 끝에 연결

CameraComp->SetupAttachment(SpringArmComp, USpringArmComponent::SocketName);
  • 카메라를 Spring Arm의 끝에 부착(Attach)합니다.
  • USpringArmComponent::SocketName: Spring Arm 끝에 위치한 소켓 이름이다.
  • Spring Arm의 TargetArmLength 값에 따라 카메라의 위치가 결정된다.


4. GameMode에 캐릭터 설정

GameMode 클래스 생성자에서 기본 캐릭터 클래스를 ASpartaCharacter로 설정한다.

DefaultPawnClass = ASpartaCharacter::StaticClass();
profile
안녕하세요

0개의 댓글