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