ゲームイベントと General ハンドラー
エンジンから OBS へ構造化イベントをプッシュする機能と、単一の OBS ドメインに属さないエンドポイントをまとめた General ハンドラーという、二つの関連する機能について説明します。
ゲームイベントを OBS へ送信する
エンジンから OBS へ、名前空間付きの CustomEvent として構造化イベントをプッシュします(エンジン → OBS 方向)。OBS 側のプラグインやスクリプト(Lua/Python)、ブラウザソースのオーバーレイ、または他の接続済み WebSocket クライアントがこれをリッスンして反応できます。
// Send arbitrary JSON
OBS->EmitGameEvent(TEXT("BossDefeated"), TEXT("{\"boss\":\"Dragon\",\"timeSec\":372}"));
// ...or a simple string map (each pair becomes a string field under "payload")
TMap<FString, FString> Payload;
Payload.Add(TEXT("combo"), TEXT("42"));
OBS->EmitGameEventMap(TEXT("ComboMilestone"), Payload);
| メソッド | 説明 |
|---|---|
EmitGameEvent(EventName, PayloadJson, Realm="inhyeongobs") | 任意の JSON を送信します。ペイロード文字列が有効な JSON でない場合は false を返し、何も送信しません。 |
EmitGameEventMap(EventName, Map, Realm="inhyeongobs") | 各キー/値ペアが payload 以下の文字列フィールドになります。 |
イベントは OBS の CustomEvent 内の固定エンベロープに包まれます。
{ "realm": "inhyeongobs", "eventType": "BossDefeated", "payload": { }, "ts": 0 }
省略可能な Realm 引数(デフォルト "inhyeongobs")はイベントに名前空間を付与し、リスナーがフィルタリングできるようにします。これらのメソッドは General ハンドラーの BroadcastCustomEvent の上に構築されており、EmitGameEvent はその構造化ラッパーであり、General ハンドラーの機能の中で Subsystem の直接ショートカットを持つ唯一のものです。
注意: OBS はカスタムイベントを送信元のセッションにエコーバックしません。そのため、送信側のクライアントは自分自身のイベントを受け取りません。
General ハンドラー(パフォーマンス統計、ホットキー、ベンダーリクエスト、カスタムイベント)
単一のドメインに属さない汎用エンドポイントで、クライアントの General ハンドラーを通じてアクセスします。
UInhyeongOBSGeneral* General = OBS->GetClient()->GetGeneral();
// Performance stats (CPU usage, active/render FPS, dropped frames, free disk space, ...)
General->GetStats(); // async -> OnStatsReceived
FOBSStats Stats = General->GetCachedStats();
// Hotkeys
General->GetHotkeyList(); // async -> OnHotkeyListReceived
General->TriggerHotkeyByName(TEXT("OBSBasic.StartRecording"));
General->TriggerHotkeyByKeySequence(TEXT("OBS_KEY_F1"), /*bShift=*/false, /*bControl=*/true);
メソッド
| メソッド | 説明 |
|---|---|
GetStats() | パフォーマンス統計(CPU、アクティブ/レンダーフレームレート、ドロップフレーム、空きディスク容量など)の非同期リクエスト → OnStatsReceived。 |
GetCachedStats() | 最後にキャッシュされた FOBSStats。 |
GetHotkeyList() | 登録済みホットキー名の非同期リクエスト → OnHotkeyListReceived。 |
TriggerHotkeyByName(Name) | 登録名(例: OBSBasic.StartRecording)でホットキーを発火します。 |
TriggerHotkeyByKeySequence(Key, bShift, bControl, …) | キーと修飾キーの組み合わせでホットキーを発火します。 |
BroadcastCustomEvent(...) | 生のカスタムイベント(上記の EmitGameEvent はその構造化ラッパーです)。 |
CallVendorRequest(...) | サードパーティの OBS プラグインのベンダー API を呼び出します → OnVendorResponseReceived。 |
イベント
| イベント | 発火タイミング |
|---|---|
OnStatsReceived | GetStats のレスポンスが届いたとき。 |
OnHotkeyListReceived | GetHotkeyList のレスポンスが届いたとき。 |
OnExitStarted | OBS のシャットダウンが開始されたとき。 |
OnVendorEvent | サードパーティのベンダープラグインがイベントを発行したとき。 |
OnCustomEvent | 別のセッションからカスタムイベントがブロードキャストされたとき。 |
General ハンドラーのほとんどのメソッドは
GetClient()->GetGeneral()経由でアクセスします。EmitGameEventには上記のように Subsystem の直接ショートカットがあります。