Skip to content

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.

csharp
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.

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. 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 0 a MaxLevel — cambian el Scaler al modo manual y bloquean rígidamente el nivel de calidad seleccionado.
csharp
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.

csharp
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>();  
    }  
}