API Pública
WebAP está diseñado para que el desarrollador mantenga el control absoluto sobre el sistema. Si tu juego presenta escenarios específicos (por ejemplo, escenas cinemáticas donde los FPS son menos críticos, o un menú de pausa pesado), puedes administrar el plugin y leer sus métricas a través de una sencilla API de C#.
El único punto de entrada al sistema es el Singleton WebPerformanceIndexer.Instance.
Control Global
Puedes pausar las operaciones del plugin en cualquier momento. Cuando el Indexer está desactivado, los niveles actuales del Scaler se congelan.
using GrindsetStudios.WebAdaptivePerformance.Core;
// Pausar la optimización automática
WebPerformanceIndexer.Instance.enabled = false;
// Reanudar las operaciones
WebPerformanceIndexer.Instance.enabled = true;Lectura de Métricas
Si prefieres no utilizar el Dashboard integrado y tienes la intención de generar métricas en tu propia interfaz de usuario del juego (o enviarlas a análisis), puedes recuperar los datos sin procesar directamente desde el 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. Tiempos principales
float frameTime = tracker.AverageFrameTime;
float cpuTime = tracker.AverageCpuTime;
int currentFps = Mathf.RoundToInt(1f / frameTime);
// 2. ¿Qué está causando actualmente el retraso? (CPU, GPU, TargetFrameRate, o Unknown)
PerformanceBottleneck bottleneck = tracker.CurrentBottleneck;
// 3. ¿Qué está haciendo el plugin en este momento? (Increase, Decrease, Stale)
PerformanceAction action = indexer.CurrentAction;
Debug.Log($"FPS: {currentFps} | Bottleneck: {bottleneck} | Action: {action}");
}
}Anulaciones Manuales de Scaler
De vez en cuando, la automatización debe anularse. Por ejemplo, en el menú principal, es posible que desees que la resolución sea siempre del 100% y que la imagen sea prístina, independientemente de los retrasos del dispositivo.
Cada Scaler posee una propiedad OverrideLevel.
Cómo funciona OverrideLevel
- Un valor de
-1— el Scaler es administrado automáticamente por el Indexer (predeterminado). - Valores de
0aMaxLevel— cambian el Scaler al modo manual y bloquean rígidamente el nivel de calidad seleccionado.
using GrindsetStudios.WebAdaptivePerformance.Core;
using GrindsetStudios.WebAdaptivePerformance.Scalers.Resolution;
using UnityEngine;
public class MenuController : MonoBehaviour
{
public void OnEnterMainMenu()
{
var indexer = WebPerformanceIndexer.Instance;
// Localiza el Resolution Scaler entre los activos
if (indexer.TryGetActiveScaler<WebResolutionScaler>(out var resScaler))
{
// Bloquea rígidamente el Nivel 0 (Máxima calidad)
// El Indexer ya no puede alterarlo
resScaler.OverrideLevel = 0;
}
}
public void OnExitMainMenu()
{
var indexer = WebPerformanceIndexer.Instance;
if (indexer.TryGetActiveScaler<WebResolutionScaler>(out var resScaler))
{
// Devuelve el control a la automatización del plugin
resScaler.OverrideLevel = -1;
}
}
}Adición Dinámica de Scalers
Puedes habilitar y deshabilitar módulos dinámicamente en tiempo de ejecución. Por ejemplo, deshabilita WebPhysicsStepScaler cuando el jugador conduce un vehículo y vuelve a habilitarlo cuando va a pie.
Al quitar un Scaler, sus parámetros se revierten automáticamente de manera segura a la máxima calidad.
using GrindsetStudios.WebAdaptivePerformance.Core;
using GrindsetStudios.WebAdaptivePerformance.Scalers;
public class GameplayManager
{
public void EnablePhysicsOptimization()
{
// Agrega un Scaler dinámicamente
WebPerformanceIndexer.Instance.TryAddScaler<WebPhysicsStepScaler>();
}
public void DisablePhysicsOptimization()
{
// Elimina el Scaler (los parámetros de física se revierten a los predeterminados)
WebPerformanceIndexer.Instance.TryRemoveScaler<WebPhysicsStepScaler>();
}
}