언리얼 튜토리얼(01) 카메라 이동

영차영차·2021년 9월 19일
1

튜토리얼

목록 보기
1/5

include

먼저 cpp파일에
#include "Kismet/GameplayStatics.h"
를 추가한다.

APlayerController를 받아오기 위해서이다.

함수 설명

이후 Tick함수에서

APlayerController* OurPlayerController = UGameplayStatics::GetPlayerController(this, 0);
로 플레이어 컨트롤러를 가져오고

OurPlayerController->GetViewTarget()
를 통해 현재 카메라가 무엇인지 검사할수있다
카메라 액터를 반환하는것 같다.

OurPlayerController->SetViewTarget((AActor*)카메라 액터);
로 그냥 카메라 전환이 가능하며

OurPlayerController->SetViewTargetWithBlend((AActor*)카메라 액터, (float)전환속도);
를 통해 부드럽게 전환이 가능하다.

예제 코드

CameraDirector.h

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "CameraDirector.generated.h"

UCLASS()
class (프로젝트 이름)_API ACameraDirector : public AActor
{
    GENERATED_BODY()

public: 
    ACameraDirector();

protected:
    virtual void BeginPlay() override;

public:
    virtual void Tick( float DeltaSeconds ) override;

    UPROPERTY(EditAnywhere)
    AActor* CameraOne;

    UPROPERTY(EditAnywhere)
    AActor* CameraTwo;

    float TimeToNextCameraChange;
};

CameraDirector.cpp

#include "CameraDirector.h"
#include "Kismet/GameplayStatics.h"

ACameraDirector::ACameraDirector()
{
    PrimaryActorTick.bCanEverTick = true;
}

void ACameraDirector::BeginPlay()
{
    Super::BeginPlay();
}

void ACameraDirector::Tick( float DeltaTime )
{
    Super::Tick( DeltaTime );

    const float TimeBetweenCameraChanges = 2.0f;
    const float SmoothBlendTime = 0.75f;
    TimeToNextCameraChange -= DeltaTime;
    
    if (TimeToNextCameraChange <= 0.0f)
    {
    	TimeToNextCameraChange += TimeBetweenCameraChanges;

    	//PlayerController를 찾습니다.
    	APlayerController* OurPlayerController = UGameplayStatics::GetPlayerController(this, 0);
        if (OurPlayerController)
        {
            if ((OurPlayerController->GetViewTarget() != CameraOne) && (CameraOne != nullptr))
            {
                //바로 1번 카메라로 전환
                OurPlayerController->SetViewTarget(CameraOne);
            }
            else if ((OurPlayerController->GetViewTarget() != CameraTwo) && (CameraTwo != nullptr))
            {
                //부드럽게 2번 카메라로 이동
                OurPlayerController->SetViewTargetWithBlend(CameraTwo, SmoothBlendTime);
            }
        }
    }
}

원본

카메라 튜토리얼의 글을 내가 보기편하게 옮겨 놓은것이다.

profile
게임을 만들자

0개의 댓글