1. 폰에 카메라 붙이기

스프링 암과 카메라를 만들어 붙입니다.

Windows
MacOS
Linux
On this page

언리얼 엔진 4 에 처음이신 경우, 프로그래밍 퀵스타트 튜토리얼 을 먼저 읽어보세요. 이 튜토리얼은 프로젝트 생성, C++ 코드 추가, 코드 컴파일, 언리얼 엔진 에디터에서 액터컴포넌트 추가가 익숙하신 분들을 대상으로 합니다.

  1. 기본 코드 프로젝트에 시작용 콘텐츠를 포함시켜 "HowTo_PlayerCamera" 라는 이름으로 만드는 것으로 시작합니다. Pawn 클래스부터 먼저 만들어 줍시다. 이 튜토리얼에서는 새로운 Pawn 클래스 이름을 "PawnWithCamera" 로 하겠습니다.

    NamePawnClass.png

  2. 다음으로 Visual Studio 에서, PawnWithCamera.h 를 열고 클래스 정의 아래 다음 코드 줄을 추가합니다:

    protected:
        UPROPERTY(EditAnywhere)
        USpringArmComponent* OurCameraSpringArm;
        UCameraComponent* OurCamera;

    이 변수를 사용하여 끝에 Camera 컴포넌트가 붙은 Spring Arm 컴포넌트를 만들겠습니다. 스프링 암은 카메라가 이동하면서 너무 딱딱하지 않은 유연한 느낌을 낼 수 있도록 카메라(나 다른 컴포넌트) 를 붙일 수 있는 간편하고 좋은 방법입니다.

  3. 그 후, 생성자에서 실제 컴포넌트 를 생성해 줘야 합니다. PawnWithCamera.cppAPawnWithCamera::APawnWithCamera 안에 다음 코드를 추가합니다:

    //컴포넌트를 생성합니다
    RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent"));
    OurCameraSpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraSpringArm"));
    OurCameraSpringArm->SetupAttachment(RootComponent);
    OurCameraSpringArm->SetRelativeLocationAndRotation(FVector(0.0f, 0.0f, 50.0f), FRotator(-60.0f, 0.0f, 0.0f));
    OurCameraSpringArm->TargetArmLength = 400.f;
    OurCameraSpringArm->bEnableCameraLag = true;
    OurCameraSpringArm->CameraLagSpeed = 3.0f;

    그러면 비어 있는 기본 Scene 컴포넌트가 계층구조의 루트로 생성되며, 거기에 Spring Arm 컴포넌트를 만들어 붙입니다. 그런 다음 Spring Arm 의 기본 피치를 -60 도로 (즉 아래로 60 도를 향하도록) 설정하고, 위치를 루트에서 50 유닛 위로 잡습니다. SpringArmComponent 에 그 길이와 동작의 유연성을 결정하기 위한 전용 변수를 몇 개 만들어 주기도 했습니다. 그 작업이 완료되면 다음과 같이 SpringArmComponent 끝의 소켓에 CameraComponent 를 만들어 추가해 주기만 하면 됩니다:

    OurCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("GameCamera"));
    OurCamera->SetupAttachment(OurCameraSpringArm, USpringArmComponent::SocketName);
  4. 마지막으로 로컬 플레이어 스폰시 자동으로 Pawn 을 기본 제어하도록, 다음 코드 조각을 추가하여 설정하면 됩니다:

    //기본 플레이어의 제어권을 획득합니다
    AutoPossessPlayer = EAutoReceiveInput::Player0;

이제 카메라를 편하게 제어할 수 있는 간단한 Pawn 이 생겼습니다. 다음에는 언리얼 엔진 에디터에서 입력 환경설정을 하고 그에 반응하는 코드를 만들겠습니다.

작업중 코드

PawnWithCamera.h

// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Pawn.h"
#include "PawnWithCamera.generated.h"

UCLASS()
class HOWTO_PLAYERCAMERA_API APawnWithCamera : public APawn
{
    GENERATED_BODY()

public:
    // Sets default values for this pawn's properties
    APawnWithCamera();

protected:
    // Called when the game starts or when spawned
    virtual void BeginPlay() override;

public:
    // Called every frame
    virtual void Tick( float DeltaSeconds ) override;

    // Called to bind functionality to input
    virtual void SetupPlayerInputComponent(class UInputComponent* InputComponent) override;

protected:
    UPROPERTY(EditAnywhere)
    USpringArmComponent* OurCameraSpringArm;
    UCameraComponent* OurCamera;
};

PawnWithCamera.cpp

// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.

#include "HowTo_PlayerCamera.h"
#include "PawnWithCamera.h"

// Sets default values
APawnWithCamera::APawnWithCamera()
{
    // Set this pawn to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
    PrimaryActorTick.bCanEverTick = true;

    //Create our components
    RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent"));
    OurCameraSpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraSpringArm"));
    OurCameraSpringArm->SetupAttachment(RootComponent);
    OurCameraSpringArm->SetRelativeLocationAndRotation(FVector(0.0f, 0.0f, 50.0f), FRotator(-60.0f, 0.0f, 0.0f));
    OurCameraSpringArm->TargetArmLength = 400.f;
    OurCameraSpringArm->bEnableCameraLag = true;
    OurCameraSpringArm->CameraLagSpeed = 3.0f;
    OurCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("GameCamera"));
    OurCamera->SetupAttachment(OurCameraSpringArm, USpringArmComponent::SocketName);

    //Take control of the default Player
    AutoPossessPlayer = EAutoReceiveInput::Player0;
}

// Called when the game starts or when spawned
void APawnWithCamera::BeginPlay()
{
    Super::BeginPlay();

}

// Called every frame
void APawnWithCamera::Tick( float DeltaTime )
{
    Super::Tick( DeltaTime );

}

// Called to bind functionality to input
void APawnWithCamera::SetupPlayerInputComponent(class UInputComponent* InputComponent)
{
    Super::SetupPlayerInputComponent(InputComponent);

}
Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback