먼저 cpp파일에
#include "Kismet/GameplayStatics.h"
를 추가한다.
APlayerController를 받아오기 위해서이다.
이후 Tick함수에서
APlayerController* OurPlayerController = UGameplayStatics::GetPlayerController(this, 0);
로 플레이어 컨트롤러를 가져오고
OurPlayerController->GetViewTarget()
를 통해 현재 카메라가 무엇인지 검사할수있다
카메라 액터를 반환하는것 같다.
OurPlayerController->SetViewTarget((AActor*)카메라 액터);
로 그냥 카메라 전환이 가능하며
OurPlayerController->SetViewTargetWithBlend((AActor*)카메라 액터, (float)전환속도);
를 통해 부드럽게 전환이 가능하다.
#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;
};
#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);
}
}
}
}
카메라 튜토리얼의 글을 내가 보기편하게 옮겨 놓은것이다.