UE5.1中记录并保存基础GPU统计数据(计算时长)的最简方案
Unreal Engine 5.1 记录GPU计算时长到文件的最简实现
最简方案:C++ Actor定时记录
不需要蓝图,直接写一个轻量的C++ Actor,放在场景里就能自动按时间记录GPU统计数据到CSV文件,步骤如下:
- 创建C++ Actor子类
在项目中新建一个名为GPUMetricsRecorder的C++ Actor,替换以下代码:
头文件(GPUMetricsRecorder.h)
#pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "GPUMetricsRecorder.generated.h" UCLASS() class YOURPROJECT_API AGPUMetricsRecorder : public AActor { GENERATED_BODY() public: AGPUMetricsRecorder(); protected: virtual void BeginPlay() override; virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override; private: FTimerHandle MetricsTimerHandle; FILE* LogFile; void RecordMetrics(); };
源文件(GPUMetricsRecorder.cpp)
#include "GPUMetricsRecorder.h" #include "Stats/Stats.h" #include "Misc/FileHelper.h" #include "Misc/Paths.h" AGPUMetricsRecorder::AGPUMetricsRecorder() { PrimaryActorTick.bCanEverTick = false; } void AGPUMetricsRecorder::BeginPlay() { Super::BeginPlay(); // 生成文件路径:项目Saved/Logs/GPUMetrics.csv FString FilePath = FPaths::ProjectSavedDir() / TEXT("Logs/GPUMetrics.csv"); IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile(); PlatformFile.CreateDirectoryTree(*FPaths::GetPath(FilePath)); LogFile = PlatformFile.OpenWrite(*FilePath); if (LogFile) { // 写入CSV表头 fprintf(LogFile, "Time(s),GPU Compute Time(ms)\n"); // 每0.5秒记录一次,可根据需求调整间隔 GetWorld()->GetTimerManager().SetTimer(MetricsTimerHandle, this, &AGPUMetricsRecorder::RecordMetrics, 0.5f, true); } } void AGPUMetricsRecorder::EndPlay(const EEndPlayReason::Type EndPlayReason) { Super::EndPlay(EndPlayReason); // 关闭文件并清理定时器 if (LogFile) { fclose(LogFile); LogFile = nullptr; } GetWorld()->GetTimerManager().ClearTimer(MetricsTimerHandle); } void AGPUMetricsRecorder::RecordMetrics() { if (!LogFile) return; // 获取当前游戏运行时间(秒) float CurrentTime = GetWorld()->GetTimeSeconds(); // 获取GPU计算着色器耗时,可替换为其他统计项 FStatId ComputeTimeStat = FStats::GetStatId(TEXT("GPU.EComputeShaderTime")); float ComputeTimeMs = FStats::GetValue(ComputeTimeStat) / 1000.0f; // 转换为毫秒 // 写入数据到文件 fprintf(LogFile, "%.2f,%.4f\n", CurrentTime, ComputeTimeMs); fflush(LogFile); // 强制写入磁盘,避免缓存丢失 }
- 使用方法
- 替换代码中的
YOURPROJECT为你的项目名称,编译项目 - 编译完成后,将
GPUMetricsRecorderActor拖入编辑器场景中 - 运行PIE模式或打包后的游戏,结束后在
项目目录/Saved/Logs/GPUMetrics.csv中查看记录的数据
注意事项
- 确保项目启用统计功能:打开
Edit > Project Settings > General Settings > Stat System,勾选Enable Stats - 如需记录其他GPU统计项,可在编辑器
Window > Developer Tools > Stats面板中找到对应名称,替换代码中的TEXT("GPU.EComputeShaderTime")(比如GPU.ETotalFrameTime对应总GPU帧时间) - 可调整定时器间隔(代码中的
0.5f)来控制记录频率
内容的提问来源于stack exchange,提问作者Can Celik
相关产品推荐
相关产品推荐

