Skip to content

공개 API (Public API)

WebAP는 개발자가 시스템에 대한 절대적인 제어권을 유지할 수 있도록 설계되었습니다. 게임에 특정 시나리오(예: FPS가 덜 중요한 컷신이나 무거운 일시정지 메뉴)가 있는 경우 간단한 C# API를 통해 플러그인을 관리하고 그 지표를 읽을 수 있습니다.

시스템의 유일한 진입점은 WebPerformanceIndexer.Instance 싱글톤입니다.

글로벌 제어 (Global Control)

언제든지 플러그인 작업을 일시 중지할 수 있습니다. Indexer가 비활성화되면 현재 Scaler 레벨이 동결됩니다.

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

Scaler 수동 재정의 (Manual Overrides)

때때로 자동화를 무시해야 할 수도 있습니다. 예를 들어 주 메뉴에서 기기 지연에 관계없이 해상도는 항상 100%이고 이미지는 선명하게 유지되기를 원할 수 있습니다.

각 Scaler에는 OverrideLevel 속성이 있습니다.

OverrideLevel의 작동 방식

  • -1 — Indexer가 Scaler를 자동으로 관리합니다(기본값).
  • 0 에서 MaxLevel — Scaler를 수동 모드로 전환하고 선택한 품질 레벨을 엄격하게 고정합니다.
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레벨 (최대 품질)로 엄격히 고정합니다
            // Indexer는 더 이상 이를 변경할 수 없습니다          
            resScaler.OverrideLevel = 0;  
        }  
    }  
  
    public void OnExitMainMenu()  
    {  
        var indexer = WebPerformanceIndexer.Instance;  
        if (indexer.TryGetActiveScaler<WebResolutionScaler>(out var resScaler))  
        {  
            // 플러그인 자동화로 제어권을 반환합니다
            resScaler.OverrideLevel = -1;  
        }  
    }  
}

동적 Scaler 추가 (Dynamic Scaler Addition)

런타임에 모듈을 동적으로 활성화 및 비활성화할 수 있습니다. 예를 들어 플레이어가 차량을 운전할 때 WebPhysicsStepScaler를 비활성화하고 도보로 이동할 때 다시 활성화할 수 있습니다.

Scaler를 제거하면 해당 매개변수가 안전하게 자동으로 최대 품질로 되돌아갑니다.

csharp
using GrindsetStudios.WebAdaptivePerformance.Core;  
using GrindsetStudios.WebAdaptivePerformance.Scalers;  
  
public class GameplayManager  
{  
    public void EnablePhysicsOptimization()  
    {  
        // 동적으로 Scaler 추가
        WebPerformanceIndexer.Instance.TryAddScaler<WebPhysicsStepScaler>();  
    }  
  
    public void DisablePhysicsOptimization()  
    {  
        // Scaler 제거 (물리 매개변수는 기본값으로 되돌아감)
        WebPerformanceIndexer.Instance.TryRemoveScaler<WebPhysicsStepScaler>();  
    }  
}