2015-11-02 97 views
3

這適用於虛幻引擎4.9UE4:輸出遊戲幀到文件

每個幀,我想將它保存到文件(覆蓋現有之一)。

對於我做了一個簡單的演示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 + +或藍圖。

我也知道I can do this from the editor,但那不是我想要做的。我想在運行時自動執行此操作。

我該怎麼辦?它甚至有可能嗎?

+1

從我的問題中應該很明顯我已經Google了這個。如果你已經找到更具體的東西來展示如何用代碼或藍圖做到這一點,那麼請分享它,而不是張貼諷刺意見。 – pookie

回答

4

對於任何想要這樣做的人,您有幾個選項。

選項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文檔