UE4:将游戏画面输出至文件

3

本文适用于虚幻引擎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做过这件事,使用了一个叫做“FreeImage”的库。
我不想修改UE4源代码,而是想找到一种“钩入”UE4并“捕获”帧的方法。
我已经成功地使用Open Broadcasting Software实现了这一点,但我想在UE4内部本地完成,可以通过C++或蓝图实现。
我也知道我可以从编辑器中完成这个操作,但那不是我想要的。我想在运行时自动完成。
我该如何开始?这是否可能?

2
从我的问题中可以很明显地看出我已经使用了谷歌搜索。如果你找到了更具体的内容,展示如何使用代码或蓝图来实现这一点,请分享它,而不是发表讽刺性的评论。 - pookie
1个回答

7

如果您想要这样做,有几个选项供您选择。

选项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 的文档。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接