Public API
WebAP спроектирован так, чтобы разработчик имел полный контроль над системой. Если в вашей игре есть специфичные сценарии (например, кат-сцены, где FPS не так важен, или тяжелое меню паузы), вы можете управлять плагином и читать его метрики через простой C# API.
Единой точкой входа в систему является Singleton WebPerformanceIndexer.Instance.
Глобальное управление
Вы можете в любой момент поставить работу плагина на паузу. При отключении Indexer текущие уровни скейлеров замораживаются.
using GrindsetStudios.WebAdaptivePerformance.Core;
// Приостановить автоматическую оптимизацию
WebPerformanceIndexer.Instance.enabled = false;
// Возобновить работу
WebPerformanceIndexer.Instance.enabled = true;Чтение метрик
Если вы не хотите использовать встроенный Dashboard и планируете выводить метрики в свой собственный In-game UI (или отправлять их в аналитику), вы можете получить сырые данные напрямую из 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. Основные тайминги
float frameTime = tracker.AverageFrameTime;
float cpuTime = tracker.AverageCpuTime;
int currentFps = Mathf.RoundToInt(1f / frameTime);
// 2. Кто сейчас виновник лагов? (CPU, GPU, TargetFrameRate или Unknown)
PerformanceBottleneck bottleneck = tracker.CurrentBottleneck;
// 3. Что плагин делает прямо сейчас? (Increase, Decrease, Stale)
PerformanceAction action = indexer.CurrentAction;
Debug.Log($"FPS: {currentFps} | Bottleneck: {bottleneck} | Action: {action}");
}
}Ручное управление скейлерами (Overrides)
Иногда автоматику нужно переопределить. Например, в главном меню вы хотите, чтобы разрешение всегда было 100% и картинка была идеальной, независимо от лагов устройства.
У каждого скейлера есть свойство OverrideLevel.
Как работает OverrideLevel
- Значение
-1— скейлер управляется Индексатором автоматически (по умолчанию). - Значения от
0доMaxLevel— переводят скейлер в ручной режим и жестко фиксируют выбранный уровень качества.
using GrindsetStudios.WebAdaptivePerformance.Core;
using GrindsetStudios.WebAdaptivePerformance.Scalers.Resolution;
using UnityEngine;
public class MenuController : MonoBehaviour
{
public void OnEnterMainMenu()
{
var indexer = WebPerformanceIndexer.Instance;
// Ищем Resolution Scaler среди активных
if (indexer.TryGetActiveScaler<WebResolutionScaler>(out var resScaler))
{
// Жестко фиксируем Level 0 (Максимальное качество)
// Индексатор больше не сможет его изменять
resScaler.OverrideLevel = 0;
}
}
public void OnExitMainMenu()
{
var indexer = WebPerformanceIndexer.Instance;
if (indexer.TryGetActiveScaler<WebResolutionScaler>(out var resScaler))
{
// Возвращаем контроль автоматике плагина
resScaler.OverrideLevel = -1;
}
}
}Динамическое добавление скейлеров
Вы можете включать и выключать модули прямо в рантайме. Например, отключать WebPhysicsStepScaler, когда игрок управляет транспортом, и включать обратно, когда он ходит пешком.
При удалении скейлера его параметры автоматически безопасно возвращаются на максимальное качество.
using GrindsetStudios.WebAdaptivePerformance.Core;
using GrindsetStudios.WebAdaptivePerformance.Scalers;
public class GameplayManager
{
public void EnablePhysicsOptimization()
{
// Добавить скейлер динамически
WebPerformanceIndexer.Instance.TryAddScaler<WebPhysicsStepScaler>();
}
public void DisablePhysicsOptimization()
{
// Удалить скейлер (параметры физики вернутся на дефолтные)
WebPerformanceIndexer.Instance.TryRemoveScaler<WebPhysicsStepScaler>();
}
}