게임/UnReal_MakeMyGameStudy

게임 조종 카메라

CMS419 2021. 5. 1. 11:38

게임 조종 카메라

처음에 따라하는 것은

카메라를 활성화시키고, 서로 다른 카메라를 전환하는 법을 보여드리는 튜토리얼입니다.

카메라를 부드럽게 이동시킨다.

예)

카메라1

카메라2

이동 액션

 

이동 액션을 통해

카메라1 -> 카메라2

카메라2 -> 카메라1

 

완성 코드

CameraDirector.h

// Fill out your copyright notice in the Description page of Project Settings.
// CameraDirector.h

#pragma once

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


UCLASS()
class HOWTO_AUTOCAMERA_API ACameraDirector : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	ACameraDirector();

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

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

	UPROPERTY(EditAnywhere)
		AActor* CameraOne;

	UPROPERTY(EditAnywhere)
		AActor* CameraTwo;

	float TimeToNextCameraChange;
};

CameraDirector.cpp

// Fill out your copyright notice in the Description page of Project Settings.


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


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

}

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

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

	const float TimeBetweenCameraChanges = 2.0f;
	const float SmoothBlendTime = 0.75f;

	TimeToNextCameraChange -= DeltaTime;

	if (TimeToNextCameraChange <= 0.0f) {

		//이 코드는 3 초마다 기본 플레이어의 뷰를 두 카메라 사이에서 전환시켜 줍니다.
		TimeToNextCameraChange += TimeBetweenCameraChanges;

		//로컬 플레이어의 컨트롤을 처리하는 액터를 찾는다.
		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);
			}

		}
	}
}

 

 

응용

- 게임 매뉴 -> 게임 스타트 -> 카메라 이동 -> 게임 시작!!

- 게임 캐릭터 선택할 때, 할수도 있다.