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.
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.
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
0aMaxLevel— altera o Scaler para modo manual e bloqueia rigidamente o nível de qualidade selecionado.
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.
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>();
}
}