版本:Unity 6(6000.0)
语言英语
  • C#

ProfilerUnsafeUtility.BeginSampleWithMetadata

建议修改

成功!

感谢帮助我们提高 Unity 文档质量。虽然我们无法接受所有提交的建议,但肯定会阅读用户建议的每一项更改,并根据需要进行更新。

关闭

提交失败

由于某些原因,无法提交您建议的更改。请在几分钟后<a>重试</a>。感谢您花时间帮助我们提高 Unity 文档质量。

关闭

取消

声明

public static void BeginSampleWithMetadata(IntPtr markerPtr, int metadataCount, void* metadata);

参数

markerPtr 分析器标记句柄。
metadataCount 元数据参数计数。
metadata 指向 ProfilerMarkerData 数组的非托管指针。

描述

开始分析一段用自定义名称(由 markerPtr 句柄和元数据参数定义)标记的代码。

BeginSampleWithMetadataEndSample 标记的代码显示在分析器层级结构中。务必始终使用 EndSample 来关闭开始分析的已检测代码段。
在 Profiler 窗口的时间线视图中,所提供的 元数据 会显示在工具提示消息中。使用 HierarchyFrameDataView.GetItemMetadata 以编程方式检索元数据。

注意:BeginSampleWithMetadataEndSample 都是线程安全的,可在作业化代码中使用。
低级分析器 API 包含在 Release 版本中。

using Unity.Collections.LowLevel.Unsafe;
using Unity.Profiling;
using Unity.Profiling.LowLevel;
using Unity.Profiling.LowLevel.Unsafe;
using System;

class Example { static IntPtr MakeMarkerWithIntMetadata(string name, string paramName) { var handle = ProfilerUnsafeUtility.CreateMarker(name, ProfilerUnsafeUtility.CategoryScripts, MarkerFlags.Default, 1); ProfilerUnsafeUtility.SetMarkerMetadata(handle, 0, paramName, (byte)ProfilerMarkerDataType.Int32, (byte)ProfilerMarkerDataUnit.Count); return handle; }

static readonly IntPtr markerHandle = MakeMarkerWithIntMetadata("MyMarker", "Work Idx");

static unsafe void DoWork(int num) { var metadata = stackalloc ProfilerMarkerData[1]; metadata[0].Type = (byte)ProfilerMarkerDataType.Int32; metadata[0].Size = (uint)UnsafeUtility.SizeOf<int>(); metadata[0].Ptr = UnsafeUtility.AddressOf(ref num); ProfilerUnsafeUtility.BeginSampleWithMetadata(markerHandle, 1, metadata); //... ProfilerUnsafeUtility.EndSample(markerHandle); } }

使用 Recorder 获取 Player 中特定标记名称的每帧计时。

附加资源:EndSampleCreateMarkerSetMarkerMetadata