UE4 - 게임조종 카메라
게임 조종 카메라
다양한 시점을 선택하고 전환하는 법을 배워봅니다.
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로 언리얼 엔진에서 직접 드래그 해서 넣는다.