Skip to content

Public API

WebAP спроектирован так, чтобы разработчик имел полный контроль над системой. Если в вашей игре есть специфичные сценарии (например, кат-сцены, где FPS не так важен, или тяжелое меню паузы), вы можете управлять плагином и читать его метрики через простой C# API.

Единой точкой входа в систему является Singleton WebPerformanceIndexer.Instance.

Глобальное управление

Вы можете в любой момент поставить работу плагина на паузу. При отключении Indexer текущие уровни скейлеров замораживаются.

csharp
using GrindsetStudios.WebAdaptivePerformance.Core;

// Приостановить автоматическую оптимизацию
WebPerformanceIndexer.Instance.enabled = false;

// Возобновить работу
WebPerformanceIndexer.Instance.enabled = true;

Чтение метрик

Если вы не хотите использовать встроенный Dashboard и планируете выводить метрики в свой собственный In-game 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}");
    }
}

Ручное управление скейлерами (Overrides)

Иногда автоматику нужно переопределить. Например, в главном меню вы хотите, чтобы разрешение всегда было 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))  
        {  
            // Жестко фиксируем Level 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>();  
    }  
}