要在 Unity 探查器一个帮助你优化游戏的窗口。它显示了游戏各个领域所花费的时间。例如,它可以报告渲染、动画或游戏逻辑所花费的时间百分比。更多信息
参见 词汇表 中显示自定义指标,必须在Unity Profiling Core 包中使用 ProfilerCounter API。
您可以使用 Profiling Core API 来跟踪应用程序中的指标。您可以将计数器跟踪的信息显示在 Unity Profiler 中。使用自定义Profiler 计数器使用 ProfilerCounter API 在代码中放置,用于跟踪指标,例如游戏中生成的敌人数量。更多信息
参见 词汇表 来比较系统指标并在 Profiler 窗口中识别性能问题。
自定义 Profiler 计数器可以显示来自 ProfilerCounter
或 ProfilerCounterValue
的数据。
有关使用 Unity Profiling Core API 创建 Profiler 计数器的完整指南,请参阅Profiler 计数器 API 指南。
要添加探查器计数器,请创建脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间推移修改组件属性并以任何您喜欢的方式响应用户输入。更多信息
参见 词汇表 以执行以下操作
这些部分中的代码示例将 Profiler 计数器添加到跟踪每个 游戏对象Unity 场景中的基本对象,可以表示角色、道具、场景、摄像机、路点等。游戏对象的功效由附加到它的组件定义。更多信息
参见 词汇表 的轨迹效果的 Unity 创建的粒子总数。在这些示例中,游戏对象的名称为“Tank”。
要创建新的计数器,请编写脚本以定义新计数器的值类型,并为该类型分配名称和单位。
创建计数器时,必须指定新计数器属于哪个Profiler 类别。为此,请使用现有的 Unity 类别。例如,下面的脚本示例使用现有的 ProfilerCategory.Scripts
类别。有关更多信息,请参阅使用 Profiler 类别
以下示例脚本定义了ProfilerCounterValue TankTrailParticleCount
,名称为“Tank Trail Particles”。此计数器的单位为“Count”
public static class GameStats
{
public static readonly ProfilerCategory TanksCategory = ProfilerCategory.Scripts;
public const string TankTrailParticleCountName = "Tank Trail Particles";
public static readonly ProfilerCounterValue<int> TankTrailParticleCount =
new ProfilerCounterValue<int>(TanksCategory, TankTrailParticleCountName, ProfilerMarkerDataUnit.Count,
ProfilerCounterOptions.FlushOnEndOfFrame | ProfilerCounterOptions.ResetToZeroOnFlush);
}
选项 FlushOnEndOfFrame
和 ResetToZeroOnFlush
会自动将计数器发送到 Profiler 数据流并在帧末将 Count 值重置为零。
Unity 会根据计数器分析的工作类型(例如渲染、脚本或动画)自动将 Profiler 计数器分组到类别中。您可以将自定义 Profiler 计数器分配到任何 Unity 的分析类别。有关可用 Profiler 类别的完整列表,请参阅ProfilerCategory。
Profiler 计数器必须属于 Profiler 类别。在定义计数器时,应将类别分配给 Profiler 计数器。为此,请使用 ProfilerModule 的可选 autoEnabledCategoryNames
构造函数参数将一个或多个类别分配给 Profiler 计数器。在以下示例代码中有一个此方法的示例
using Unity.Profiling;
using Unity.Profiling.Editor;
[System.Serializable]
[ProfilerModuleMetadata("Tank Effects")]
public class TankEffectsProfilerModule : ProfilerModule
{
static readonly ProfilerCounterDescriptor[] k_Counters = new ProfilerCounterDescriptor[]
{
new ProfilerCounterDescriptor(GameStatistics.TankTrailParticleCountName, GameStatistics.TanksCategory),
new ProfilerCounterDescriptor(GameStatistics.ShellExplosionParticleCountName, GameStatistics.TanksCategory),
new ProfilerCounterDescriptor(GameStatistics.TankExplosionParticleCountName, GameStatistics.TanksCategory),
};
// Ensure that both ProfilerCategory.Scripts and ProfilerCategory.Memory categories are enabled when our module is active.
static readonly string[] k_AutoEnabledCategoryNames = new string[]
{
ProfilerCategory.Scripts.Name,
ProfilerCategory.Memory.Name
};
// Pass the auto-enabled category names to the base constructor.
public TankEffectsProfilerModule() : base(k_Counters, autoEnabledCategoryNames: k_AutoEnabledCategoryNames) { }
}
要更新计数器的值,请创建一个 MonoBehaviour 脚本,该脚本设置您已定义的计数器的值。有关更多信息,请参阅如何将计数器值传递到 Profiler。
此示例 MonoBehaviour 脚本在 Update 函数中每帧计算属于分配的游戏对象的轨迹粒子的数量。为此,它使用名为 TankTrailParticleCount
的计数器。
以下示例脚本还在检查器一个 Unity 窗口,显示有关当前选定的游戏对象、资源或项目设置的信息,允许您检查和编辑值。更多信息
参见 词汇表 中创建了一个名为轨迹粒子系统一个组件,通过在场景中生成和动画处理大量小的 2D 图像来模拟流体实体,如液体、云和火焰。更多信息
参见 词汇表(m_TrailParticleSystem
)的公共属性。
using UnityEngine;
class TankMovement : MonoBehaviour
{
public ParticleSystem m_TrailParticleSystem;
void Update()
{
GameStats.TankTrailParticleCount.Value += m_TrailParticleSystem.particleCount;
}
}
在发布播放器中运行项目时,您无法访问 Profiler 窗口。但是,您可以将计数器作为UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三个 UI 系统。更多信息
参见 词汇表 元素显示在发布播放器中。这意味着您可以在发布的应用程序中包含分析工具。为此,请参阅Profiler 计数器 API 指南 中的获取播放器中的计数器值。
下图显示了在发布播放器中使用自定义 UI 在场景的左上角显示的计数器