Skip to content

API Pública

O WebAP foi projetado para que o desenvolvedor mantenha o controlo absoluto sobre o sistema. Se o seu jogo apresentar cenários específicos (por exemplo, cutscenes em que os FPS são menos críticos, ou um menu de pausa pesado), você pode gerir o plugin e ler as suas métricas via uma API C# direta.

O único ponto de entrada para o sistema é o Singleton WebPerformanceIndexer.Instance.

Controlo Global

Pode pausar as operações do plugin a a qualquer momento. Quando o Indexer é desativado, os níveis atuais dos Scalers são congelados.

csharp
using GrindsetStudios.WebAdaptivePerformance.Core;

// Pausar otimização automática
WebPerformanceIndexer.Instance.enabled = false;

// Retomar operações
WebPerformanceIndexer.Instance.enabled = true;

Leitura de Métricas

Se você preferir não utilizar o Dashboard embutido e pretender apresentar as métricas na sua própria UI no jogo (ou enviá-las para o analytics), pode obter os dados brutos diretamente do 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. Timings Centrais
        float frameTime = tracker.AverageFrameTime;
        float cpuTime = tracker.AverageCpuTime;
        int currentFps = Mathf.RoundToInt(1f / frameTime);

        // 2. O que está atualmente causando o atraso? (CPU, GPU, TargetFrameRate, ou Unknown)
        PerformanceBottleneck bottleneck = tracker.CurrentBottleneck;
        
        // 3. O que o plugin está fazendo agora? (Increase, Decrease, Stale)
        PerformanceAction action = indexer.CurrentAction;

        Debug.Log($"FPS: {currentFps} | Bottleneck: {bottleneck} | Action: {action}");
    }
}

Substituições Manuais (Manual Overrides) de Scalers

Ocasionalmente, a automação tem de ser substituída. Por exemplo, no menu principal, pode querer que a resolução seja sempre de 100% e a imagem limpa, independentemente de atrasos no dispositivo.

Cada Scaler possui uma propriedade OverrideLevel.

Como funciona a OverrideLevel

  • Um valor de -1 — o Scaler é gerido automaticamente pelo Indexer (predefinição).
  • Valores de 0 a MaxLevel — altera o Scaler para modo manual e bloqueia rigidamente o nível de qualidade selecionado.
csharp
using GrindsetStudios.WebAdaptivePerformance.Core;  
using GrindsetStudios.WebAdaptivePerformance.Scalers.Resolution;  
using UnityEngine;  
  
public class MenuController : MonoBehaviour  
{  
    public void OnEnterMainMenu()  
    {  
        var indexer = WebPerformanceIndexer.Instance;  
        // Localize o Resolution Scaler entre os ativos  
        if (indexer.TryGetActiveScaler<WebResolutionScaler>(out var resScaler))  
        {  
            // Bloqueie rigidamente o Nível 0 (Qualidade Máxima)  
            // O Indexer já não pode alterá-lo            
            resScaler.OverrideLevel = 0;  
        }  
    }  
  
    public void OnExitMainMenu()  
    {  
        var indexer = WebPerformanceIndexer.Instance;  
        if (indexer.TryGetActiveScaler<WebResolutionScaler>(out var resScaler))  
        {  
            // Devolver o controlo à automação do plugin  
            resScaler.OverrideLevel = -1;  
        }  
    }  
}

Adição Dinâmica de Scaler

Pode ativar e desativar módulos dinamicamente no runtime. Por exemplo, desative o WebPhysicsStepScaler quando o jogador está a conduzir um veículo, e reative-o quando estiverem a pé.

Ao remover um Scaler, os seus parâmetros revertem de forma automática e segura para a qualidade máxima.

csharp
using GrindsetStudios.WebAdaptivePerformance.Core;  
using GrindsetStudios.WebAdaptivePerformance.Scalers;  
  
public class GameplayManager  
{  
    public void EnablePhysicsOptimization()  
    {  
        // Adicionar um Scaler dinamicamente  
        WebPerformanceIndexer.Instance.TryAddScaler<WebPhysicsStepScaler>();  
    }  
  
    public void DisablePhysicsOptimization()  
    {  
        // Remover o Scaler (parâmetros de física revertem para o padrão)  
        WebPerformanceIndexer.Instance.TryRemoveScaler<WebPhysicsStepScaler>();  
    }  
}