Объявление
public NativeArraypublic NativeArray
Параметры
id | Идентификатор проекта или пакета. |
tag | Индекс потока данных. |
index | Индекс чанка. |
Возвращает
NativeArray<T> Возвращает метаданные кадра в виде NativeArray.
Описание
Получает метаданные, связанные с кадром.
Используйте GetFrameMetaData для получения данных, которые метод Profiler.EmitFrameMetaData записал в поток Profiler.
Используйте id для идентификации метаданных из вашего проекта или пакета.
Используйте тег, чтобы различать разные потоки данных.
Используйте index для извлечения отдельных фрагментов данных для каждого Profiler.EmitFrameMetaData, вызываемого во фрейме.
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.EmitFrameMetaData(MyProjectId, TextureInfoTag, new[] { textureInfo });
Profiler.EmitFrameMetaData(MyProjectId, TextureDataTag, textureData);
}
public Texture2D GetTextureFromProfilerStream(int frame)
{
using (var frameData = ProfilerDriver.GetHierarchyFrameDataView(frame, 0, HierarchyFrameDataView.ViewModes.Default, HierarchyFrameDataView.columnDontSort, false))
{
NativeArray textureInfos = frameData.GetFrameMetaData(MyProjectId, TextureInfoTag);
if (textureInfos.Length == 0)
return null;
NativeArray textureData = frameData.GetFrameMetaData(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.EmitFrameMetaData.