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