Объявление
public NativeArraypublic NativeArray
Параметры
id | Уникальный идентификатор, связанный с данными. |
tag | Индекс потока данных. |
index | Индекс фрагмента. |
Возвращает
NativeArray
Описание
Извлекает метаданные сеанса, в котором этот кадр появился, как NativeArray.
Используйте GetSessionMetaData для получения данных, которые метод Profiler.EmitSessionMetaData записал в поток Profiler. Данные профилировщика могут содержать кадры из разных сеансов.
Используйте id для идентификации метаданных из вашего проекта или пакета.
Используйте тег, чтобы различать разные потоки данных.
Используйте index для извлечения отдельных фрагментов данных для каждого Profiler.EmitSessionMetaData, вызываемого во время сеанса профилирования.
using System;
using Unity.Collections;
using UnityEditor.Profiling;
using UnityEditorInternal;
using UnityEngine;
using UnityEngine.Profiling;
public class Example
{
public struct TextureInfo
{
public int format;
public int w;
public int h;
}
public static readonly Guid MyProjectId = new Guid("7E1DEA84-51F1-477A-82B5-B5C57AC1EBF7");
public static readonly int TextureInfoTag = 0;
public static readonly int TextureDataTag = 1;
public void EmitTextureToProfilerStream(Texture2D t)
{
TextureInfo textureInfo = new TextureInfo() { format = (int)t.format, w = t.width, h = t.height };
NativeArray textureData = t.GetRawTextureData();
Profiler.EmitSessionMetaData(MyProjectId, TextureInfoTag, new[] { textureInfo });
Profiler.EmitSessionMetaData(MyProjectId, TextureDataTag, textureData);
}
public Texture2D GetSessionTextureFromProfilerStream(int frame)
{
using (var frameData = ProfilerDriver.GetRawFrameDataView(frame, 0))
{
NativeArray textureInfos = frameData.GetSessionMetaData(MyProjectId, TextureInfoTag);
if (textureInfos.Length == 0)
return null;
NativeArray textureData = frameData.GetSessionMetaData(MyProjectId, TextureDataTag);
if (textureData.Length == 0)
return null;
TextureInfo textureInfo = textureInfos[0];
Texture2D texture = new Texture2D(textureInfo.w, textureInfo.h, (TextureFormat)textureInfo.format, false);
texture.LoadRawTextureData(textureData);
return texture;
}
}
}
Примечание. Экземпляр FrameDataView определяет время жизни возвращаемого NativeArray. Таким образом, если FrameDataView удаляется, все возвращенные метаданные становятся недействительными и не могут использоваться. Скопируйте данные в новый NativeArray, если они нужны вам дольше.
Смотрите так же: Profiler.EmitSessionMetaData.