Skip to content

パブリックAPI (Public API)

WebAPは、開発者がシステムに対する絶対的な制御を維持できるように設計されています。ゲーム内に特定のシナリオ(FPSの重要性が低いカットシーンや、重い一時停止メニューなど)がある場合は、シンプルなC# APIを通じてプラグインを管理し、そのメトリクスを読み取ることができます。

システムへの唯一のエントリポイントは WebPerformanceIndexer.Instance シングルトンです。

グローバル制御 (Global Control)

プラグインの動作はいつでも一時停止できます。Indexer が無効になると、現在のスケーラーレベルがフリーズされます。

csharp
using GrindsetStudios.WebAdaptivePerformance.Core;

// 自動最適化を一時停止する
WebPerformanceIndexer.Instance.enabled = false;

// 動作を再開する
WebPerformanceIndexer.Instance.enabled = true;

メトリクスの読み取り (Reading Metrics)

内蔵のダッシュボード(Dashboard)を使用せずに、独自のゲーム内UIにメトリクスを出力(または分析ツールに送信)したい場合は、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. コアとなるタイミング
        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}");
    }
}

スケーラーの手動オーバーライド (Manual Overrides)

自動化をバイパスする必要がある場合もあります。たとえば、メインメニューでは、デバイスの遅延に関係なく、解像度を常に100%にして画像を鮮明に保ちたいと考えるかもしれません。

各スケーラーには OverrideLevel プロパティがあります。

OverrideLevel の仕組み

  • -1 — インデクサーがスケーラーを自動的に管理します(デフォルト)。
  • 0 から MaxLevel — スケーラーを手動モードに切り替え、選択した品質レベルに厳密にロックします。
csharp
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))  
        {  
            // 厳密にレベル0(最大品質)にロックする
            // インデクサーはもはやこれを変更することはできません          
            resScaler.OverrideLevel = 0;  
        }  
    }  
  
    public void OnExitMainMenu()  
    {  
        var indexer = WebPerformanceIndexer.Instance;  
        if (indexer.TryGetActiveScaler<WebResolutionScaler>(out var resScaler))  
        {  
            // 制御をプラグインの自動化に戻す
            resScaler.OverrideLevel = -1;  
        }  
    }  
}

動的なスケーラーの追加 (Dynamic Scaler Addition)

実行時(Runtime)にモジュールを動的に有効化および無効化できます。たとえば、プレイヤーが車を運転しているときは WebPhysicsStepScaler を無効にし、徒歩で移動しているときは再び有効にすることができます。

スケーラーを削除すると、そのパラメータは安全に最大品質へと自動的に戻ります。

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