Skip to content

公共 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 — 缩放器由索引器自动管理(默认)。
  • 值从 0MaxLevel — 将缩放器切换到手动模式并严格锁定所选的质量级别。
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>();  
    }  
}