UE4에서는 다음 코드를 통해 게임을 일시 정지할 수 있다.
UGameplayStatics::SetGamePaused(GetWorld(), true);
때로는 게임을 일시정지 해놓고 멋진 카메라 앵글로 바꾸고 싶을 때가 있는데 SetGamePaused 함수는 모든 Tick을 정지시키기 때문에 카메라의 Transform을 변경해도 바로 반영되지 않는다. (Pause를 풀었을 때 반영 됨)
해결책으로 게임이 정지되었을 때 APlayerController::UpdateCameraManager() 함수를 호출해주면 카메라가 바로바로 업데이트 된다. 단 매번 UpdateCameraManager 함수를 호출하기는 쉽지 않을 것이기 때문에 간단한 Actor를 만들어서 자동으로 불리게 해보았다.
AMyActor::AMyActor()
{
PrimaryActorTick.bCanEverTick = true;
// 기본적으로는 Tick 함수가 꺼져있음
PrimaryActorTick.bStartWithTickEnabled = false;
// 일시정지 상태에서도 Tick 함수가 호출 됨
PrimaryActorTick.bTickEvenWhenPaused = true;
}
void AMyActor::Tick(float Delta)
{
MyPlayerController->UpdateCameraManager(Delta);
}
이제 게임을 Pause 할 때 AMyActor::SetActorTickEnabled(true)를 호출해주고, Resume 할 때 AMyActor::SetActorTickEnabled(false)를 호출해주자.
AMyActor를 동적으로 생성했다가 해제해도 될 것 같다. 만약 그렇게 하려면 bStartWithTickEnabled를 true로 하면 될듯?
이제 우리 게임에서도 Bullet Time을 보여줄 수 있다!
'Game Dev > WarSimulation' 카테고리의 다른 글
Windows 화면 비율이 1:1이 아닐 경우 UE 에디터 이상 현상 수정 (0) | 2018.03.25 |
---|---|
Unreal Engine v4.17.0 업데이트 이후 고통 (0) | 2017.08.13 |
Hexagon Grid Material 제작 (0) | 2017.06.25 |
UE4 ACharacter의 RootComponent 변경 (0) | 2017.06.15 |