UE4:将游戏帧输出到文件

时间:2015-11-02 23:09:28

标签: c++ unreal-engine4

这适用于虚幻引擎4.9

每一帧,我都希望将其保存到文件中(覆盖现有文件)。

对于我制作的简单D3D11演示,我已经能够做到:

void Engine::CaptureFrame(D3DX11_IMAGE_FILE_FORMAT format, const LPCTSTR fileName){

    backbuffer->GetResource(&resource);
    ID3D11Texture2D* texture;
    HRESULT hResult = resource->QueryInterface(__uuidof(ID3D11Texture2D), reinterpret_cast<LPVOID*>(&texture));
    D3DX11SaveTextureToFile(deviceContext, texture, format, fileName);

    //Clean up
    texture->Release();
    resource->Release();
}

我也使用OpenGL,使用名为&#34; FreeImage&#34;的库。

我不想修改UE4来源,我正在寻找一种方法来解决问题。进入UE4和&#34;捕获&#34;框架。

我已设法使用Open Broadcasting Software执行此操作,但我希望通过c ++或蓝图在UE4内本地执行此操作。

我也知道I can do this from the editor,但这不是我想要做的。我想在运行时自动执行此操作。

我该如何解决这个问题?它甚至可能吗?

1 个答案:

答案 0 :(得分:5)

对于任何想要这样做的人,你有几个选择。

选项A

如果您不关心生成多少个截图文件而不关心它们的名称,那么您可以使用蓝图:

enter image description here

图像将输出到\Unreal Projects\ProjectName\Saved\Screenshots\Windows,其中ProjectName是项目的名称。

选项B

如果您不想要多个屏幕截图文件并需要控制它们的去向,那么您可以通过代码执行此操作:

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

    FString filename = "test.png";
    FScreenshotRequest::RequestScreenshot(filename, false, false);

}

以下是FScreenshotRequest

的文档