id | 项目或包标识符。 |
tag | 数据流索引。 |
index | 块索引。 |
NativeArray<T> 返回帧元数据作为 NativeArray。
检索与帧关联的元数据。
使用 GetFrameMetaData 检索 Profiler.EmitFrameMetaData 方法写入 Profiler 流的数据。
使用 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 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<byte> textureData = t.GetRawTextureData<byte>(); 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<TextureInfo> textureInfos = frameData.GetFrameMetaData<TextureInfo>(MyProjectId, TextureInfoTag); if (textureInfos.Length == 0) return null;
NativeArray<byte> textureData = frameData.GetFrameMetaData<byte>(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。