UE4.27で確認
// Get Current View Info (EditorMode, PlayMode).
auto GetCurrentViewportInfo = [](const UWorld* world, FVector2D& out_viewport_size, FVector& out_view_location, FQuat& out_view_quat)
{
if (!world)
return;
#if WITH_EDITOR
if (world->WorldType == EWorldType::Editor || world->WorldType == EWorldType::EditorPreview)
{
// EditorMode.
// Use First Editor Viewport.
for (FLevelEditorViewportClient* level_viewport_clients : GEditor->GetLevelViewportClients())
{
if (level_viewport_clients && level_viewport_clients->IsPerspective())
{
out_viewport_size = level_viewport_clients->Viewport->GetSizeXY();
out_view_location = level_viewport_clients->GetViewLocation();
out_view_quat = level_viewport_clients->GetViewRotation().Quaternion();
break;
}
}
}
else
#endif
{
// Non EditorMode.
// Use First PlayerCamera.
if (auto* camera_manager = UGameplayStatics::GetPlayerCameraManager(world, 0))
{
GEngine->GameViewport->GetViewportSize(out_viewport_size);
out_view_location = camera_manager->GetCameraLocation();
out_view_quat = camera_manager->GetCameraRotation().Quaternion();
}
}
return;
};
const UWorld* world = [ワールド];
FVector2D out_viewport_size;
FVector out_view_location;
FQuat out_view_quat;
// Get Info.
GetCurrentViewportInfo(world, out_viewport_size, out_view_location, out_view_quat);