公共 API
WebAP 的设计使开发人员可以绝对控制系统。如果您的游戏具有特定的场景(例如,FPS 不那么关键的过场动画,或繁重的暂停菜单),您可以通过简单的 C# API 管理插件并读取其指标。
系统的唯一入口点是单例 WebPerformanceIndexer.Instance。
全局控制
您可以随时暂停插件的运行。当 Indexer 被禁用时,当前的缩放器级别被冻结。
csharp
using GrindsetStudios.WebAdaptivePerformance.Core;
// 暂停自动优化
WebPerformanceIndexer.Instance.enabled = false;
// 恢复运行
WebPerformanceIndexer.Instance.enabled = true;读取指标
如果您不想使用内置仪表板,并打算将指标输出到您自己的游戏内 UI(或将它们发送到分析工具),您可以直接从 Tracker 检索原始数据。
csharp
using GrindsetStudios.WebAdaptivePerformance.Core;
using UnityEngine;
public class CustomMetricsUI : MonoBehaviour
{
private void Update()
{
var indexer = WebPerformanceIndexer.Instance;
if (indexer == null || !indexer.enabled) return;
var tracker = indexer.Tracker;
// 1. 核心计时
float frameTime = tracker.AverageFrameTime;
float cpuTime = tracker.AverageCpuTime;
int currentFps = Mathf.RoundToInt(1f / frameTime);
// 2. 目前什么导致了延迟?(CPU、GPU、TargetFrameRate 或 Unknown)
PerformanceBottleneck bottleneck = tracker.CurrentBottleneck;
// 3. 插件现在在做什么?(Increase、Decrease、Stale)
PerformanceAction action = indexer.CurrentAction;
Debug.Log($"FPS: {currentFps} | Bottleneck: {bottleneck} | Action: {action}");
}
}手动缩放器覆盖
有时必须覆盖自动化。例如,在主菜单中,无论设备是否存在延迟,您可能都希望分辨率始终为 100% 并且图像保持原始状态。
每个缩放器都有一个 OverrideLevel 属性。
OverrideLevel 的工作原理
- 值为
-1— 缩放器由索引器自动管理(默认)。 - 值从
0到MaxLevel— 将缩放器切换到手动模式并严格锁定所选的质量级别。
csharp
using GrindsetStudios.WebAdaptivePerformance.Core;
using GrindsetStudios.WebAdaptivePerformance.Scalers.Resolution;
using UnityEngine;
public class MenuController : MonoBehaviour
{
public void OnEnterMainMenu()
{
var indexer = WebPerformanceIndexer.Instance;
// 在活动的缩放器中定位分辨率缩放器 (Resolution Scaler)
if (indexer.TryGetActiveScaler<WebResolutionScaler>(out var resScaler))
{
// 严格锁定级别 0(最高质量)
// 索引器不能再更改它
resScaler.OverrideLevel = 0;
}
}
public void OnExitMainMenu()
{
var indexer = WebPerformanceIndexer.Instance;
if (indexer.TryGetActiveScaler<WebResolutionScaler>(out var resScaler))
{
// 将控制权返回给插件的自动化
resScaler.OverrideLevel = -1;
}
}
}动态缩放器添加
您可以在运行时动态启用和禁用模块。例如,当玩家驾驶车辆时禁用 WebPhysicsStepScaler,并在他们步行时重新启用它。
删除缩放器后,其参数会自动安全地恢复为最高质量。
csharp
using GrindsetStudios.WebAdaptivePerformance.Core;
using GrindsetStudios.WebAdaptivePerformance.Scalers;
public class GameplayManager
{
public void EnablePhysicsOptimization()
{
// 动态添加一个缩放器
WebPerformanceIndexer.Instance.TryAddScaler<WebPhysicsStepScaler>();
}
public void DisablePhysicsOptimization()
{
// 删除缩放器(物理参数恢复为默认值)
WebPerformanceIndexer.Instance.TryRemoveScaler<WebPhysicsStepScaler>();
}
}