2015-09-27 183 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文件,還提供了當你剖析一些有用的統計數據。