如何在Unity上收集Profiler数据?

时间:2017-04-28 05:52:34

标签: performance unity3d

事实是,我有一个简单的工具让我的Android手机上的游戏自动运行。我想收集一些性能数据,如Profiler提供,内存,绘制调用,每个函数的每个mem分配等等。那么有没有api或工具来达到这个目标?

1 个答案:

答案 0 :(得分:0)

正如您已经注意到的,您无法从Profiler中保存超过300帧的数据。

保存分析数据流的唯一方法是编写一个类并将脚本附加到场景中的每个游戏对象。

using UnityEngine;
using UnityEngine.Profiling;
using System.Collections;

public class ProfilerDataLogger : MonoBehaviour
{
    int frameCount = 0;

    void Update()
    {
        if (Input.GetKey(KeyCode.LeftControl) && Input.GetKeyDown(KeyCode.L))
        {
            StopAllCoroutines();
            frameCount = 0;
            StartCoroutine(DataLogger());
        }
    }

    IEnumerator DataLogger()
    {        
        while (true)
        {
            string filepath = Application.persistentDataPath + "/profilerData" + frameCount + ".log";
            Profiler.logFile = filepath;
            Profiler.enableBinaryLog = true;
            Profiler.enabled = true;
            for (int i = 0; i < 300; i++)
            {
                yield return new WaitForEndOfFrame();
                if (!Profiler.enabled)
                    Profiler.enabled = true;
            }
            frameCount++;
        }
    }
}

然后,您可以在Profiler中加载日志文件(每个包含300帧数据),或者您可以编写一个类以便从编辑器执行加载。