2015-09-27 117 views
2

如果我可以将剖析器统计信息(http://docs.unity3d.com/Manual/ProfilerWindow.html)和/或Unity Rendering Statistics(显示实时统计信息的叠加窗口) - http://docs.unity3d.com/Manual/RenderingStatistics.html - 保存为像CSV或Excel甚至txt文件那样的文件,我需要知道我可以稍后研究它们并对它们进行一些统计分析。如何在文件(文本或CSV ...)中保存Unity统计信息或Unity Profiler统计信息(CPU,渲染,内存...中的统计信息)?

+0

也许这个文章可以帮助你:https://www.packtpub.com/mapt/book/game-development/9781785884580/1/ch01lvl1sec11/saving-and-loading-profiler-data – wil

回答

2

是的,你可以。

保存探查数据:

// write FPS to "profilerLog.txt" 
Profiler.logFile = Application.persistentDataPath + "/profilerLog.txt"; 

// write Profiler Data to "profilerLog.txt.data"                       
Profiler.enableBinaryLog = true;             
Profiler.enabled = true; 

然后你就可以显示在编辑这个数据:

Profiler.AddFramesFromFile(Application.dataPath + "/profilerLog.txt"); 

节能数据:

你可以使用任何你想要的序列化方法/喜欢。只需使用UnityEditor.UnityStats的数据。请记住,它只能从编辑器中获得。

这个类看起来是这样的,自动完成应该有所帮助:

public sealed class UnityStats { 
    public static extern int drawCalls 
    public static extern int batchedDrawCalls 
    public static extern int batches 
    public static extern int triangles 
    public static extern int vertices 
    public static extern int shadowCasters 
    public static extern int renderTextureChanges 
    public static extern float frameTime 
    public static extern float renderTime 
    public static extern int renderTextureCount 
    public static extern int renderTextureBytes 
    public static extern int usedTextureMemorySize 
    public static extern int usedTextureCount 
    public static extern string screenRes 
    public static extern int screenBytes 
    public static extern int vboTotal 
    public static extern int vboTotalBytes 
    public static extern int vboUploads 
    public static extern int vboUploadBytes 
    public static extern int ibUploads 
    public static extern int ibUploadBytes 
    public static extern int visibleSkinnedMeshes 
    public static extern int visibleAnimations 
    public static extern string GetNetworkStats(int i); 
} 
2

带着一脸到对反编译的统一代码(你可以在网上找到)的ProfilerWindow类,你可以很容易地编写导出数据的脚本你需要。

脚本可能看起来像这样

using UnityEditor; 
using UnityEditorInternal; 

var firstFrameIndex = ProfilerDriver.firstFrameIndex; 
var lastFrameIndex = ProfilerDriver.lastFrameIndex; 
var profilerSortColumn = ProfilerColumn.TotalTime; 
var viewType = ProfilerViewType.Hierarchy; 

var profilerData = new ProfilerData(); 
for (int frameIndex = firstFrameIndex; frameIndex <= lastFrameIndex; ++frameIndex) 
{ 
    var property = new ProfilerProperty(); 
    property.SetRoot(frameIndex, profilerSortColumn, viewType); 
    property.onlyShowGPUSamples = false; 
    bool enterChildren = true; 

    while (property.Next(enterChildren)) 
    { 
     // get all the desired ProfilerColumn 
     var name = property.GetColumn(ProfilerColumn.FunctionName); 
     var totalTime = property.GetColumn(ProfilerColumn.TotalTime); 
     // store values somewhere 
    } 

    property.Cleanup(); 
} 

如果你愿意,你可以使用this script,使您可以将数据导出为一个JSON文件,还提供了当你剖析一些有用的统计数据。