UE4 - C++

UE4 - 게임조종 카메라

불타는버스 2021. 7. 21. 15:53

 

https://docs.unrealengine.com/4.26/ko/ProgrammingAndScripting/ProgrammingWithCPP/CPPTutorials/AutoCamera/

 

게임 조종 카메라

다양한 시점을 선택하고 전환하는 법을 배워봅니다.

docs.unrealengine.com

이거도 제법 잘 되어 있어,햇갈릴 만한것/ C++ 코드만 기재한다.

 

	UPROPERTY(EditAnywhere)
		AActor* CameraOne;

	UPROPERTY(EditAnywhere)
		AActor* CameraTwo;

	float TimeToNextCameraChange;

카메라 헤더 부분.

UPROPERTY(EditAnyWhere) - 언리얼 에디터 상에서 표기 및 수정이 가능하게 한다.

에디터에서 표기만 하고 싶다면, VisibleAnyWhere로 적으면 된다.

 

AActor은 액터 객체를 의미.

앞서 만든 두 카메라의 액터를 담아놓는다.

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

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

    //TimeToNextCameraChage가 0이하일 때까지 틱당 시간을 줄인다.
    TimeToNextCameraChange -= DeltaTime;
    //0초 이하라면,
    if (TimeToNextCameraChange <= 0.0f)
    {
        //2초를 더해준다.
        TimeToNextCameraChange += TimeBetweenCameraChanges;

        // 0번 컨트롤러를 찾는다.
        APlayerController* OurPlayerController = UGameplayStatics::GetPlayerController(this, 0);
        if (OurPlayerController)
        {
            //0번 컨트롤러가 참조하는 카메라를 체크한다.1번 카메라가 아니라면,
            if ((OurPlayerController->GetViewTarget() != CameraOne) && (CameraOne != nullptr))
            {
                // 2번카메라일 경우 1번 카메라로 변경
                OurPlayerController->SetViewTarget(CameraOne);
            }
            else if ((OurPlayerController->GetViewTarget() != CameraTwo) && (CameraTwo != nullptr))
            {
                //일정 시간동안 부드럽게 카메라 전환
                OurPlayerController->SetViewTargetWithBlend(CameraTwo, SmoothBlendTime);
            }
        }
    }
}

Cpp파일의 Tick부분이다.

 

여기서 주의 깊게 볼 부분은

 UGameplayStatics::GetPlayerController(this, 0); - 0번 플레이어 컨트롤러를 얻어온다.

OurPlayerController->GetViewTarget() - 0번 플레이어가 사용하는 카메라를 얻어온다.

 

 OurPlayerController->SetViewTarget(CameraOne); - 카메라를 변경한다.

OurPlayerController->SetViewTargetWithBlend(CameraTwo, SmoothBlendTime); - 카메라를 부드럽게 보간을 주며 변경한다.

 

코드를 보면 CameraOne, CameraTwo는 코드상에서 받지않기 때문에 바로는 작동을 안함.

이건 헤더파일에서 설정한 EditAnyWhere로 언리얼 엔진에서 직접 드래그 해서 넣는다.

만약 안뜨면 컴파일 버튼을 누른다.
아쉽게도 유니티처럼 드래그로 붙이는건 안되는것 같다.있는데 못찾는걸수도.
자연스럽게 A에서 B로 보간되는 카메라를 확인 할 수 있다.