public NativeArray<T> GetFrameMetaData (Guid id, int tag);
public NativeArray<T> GetFrameMetaData (Guid id, int tag, int index);

参数

id项目或包标识符。
tag数据流索引。
index块索引。

返回

NativeArray<T> 以 NativeArray 形式返回帧元数据。

描述

获取与帧关联的元数据。

使用 GetFrameMetaData 获取通过 Profiler.EmitFrameMetaData 方法写入性能分析器流中的数据 blob。

使用 ID 标识来自项目或包的元数据。
使用 tag 区分不同数据流。
使用 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 kMyProjectId = new Guid("7E1DEA84-51F1-477A-82B5-B5C57AC1EBF7"); public static readonly int kTextureInfoTag = 0; public static readonly int kTextureDataTag = 1;

public void EmitTextureToProfilerStream(Texture2D t) { TextureInfo textureInfo = new TextureInfo() { format = (int)t.format, w = t.width, h = t.height }; NativeArray<byte> textureData = t.GetRawTextureData<byte>(); Profiler.EmitFrameMetaData(kMyProjectId, kTextureInfoTag, new[] { textureInfo }); Profiler.EmitFrameMetaData(kMyProjectId, kTextureDataTag, textureData); }

public Texture2D GetTextureFromProfilerStream(int frame) { using (var frameData = ProfilerDriver.GetHierarchyFrameDataView(frame, 0, HierarchyFrameDataView.ViewModes.Default, HierarchyFrameDataView.columnDontSort, false)) { NativeArray<TextureInfo> textureInfos = frameData.GetFrameMetaData<TextureInfo>(kMyProjectId, kTextureInfoTag); if (textureInfos.Length == 0) return null;

NativeArray<byte> textureData = frameData.GetFrameMetaData<byte>(kMyProjectId, kTextureDataTag); 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; } } }

另请参阅:Profiler.EmitFrameMetaData