Skip to content

Desuq Cafe

文档菜单

此翻译可能落后于最新的英文版本。 查看英文版

游戏事件与 General 处理器

两项相关功能:将结构化事件从引擎推送 OBS,以及 General 处理器提供的一系列不属于单一 OBS 域的通用端点。

向 OBS 发送游戏事件

以命名空间化的 CustomEvent 形式(引擎到 OBS 方向)将结构化事件从引擎推送 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。若 payload 字符串不是有效的 JSON,则返回 false 且不发送任何内容。
EmitGameEventMap(EventName, Map, Realm="inhyeongobs")每对键/值都会成为 payload 下的一个字符串字段。

事件会被封装在 OBS 的 CustomEvent 下的固定信封结构中:

{ "realm": "inhyeongobs", "eventType": "BossDefeated", "payload": { }, "ts": 0 }

可选的 Realm 参数(默认值为 "inhyeongobs")为你的事件提供命名空间,以便监听器进行过滤。这些方法构建于 General 处理器的 BroadcastCustomEvent 之上,其中 EmitGameEvent 是其结构化封装,也是唯一一个在 Subsystem 上具有直接快捷方式的 General 处理器功能。

注意: OBS 不会将自定义事件回显给发起会话,因此发送方客户端不会收到自己发出的事件。

General 处理器(性能统计、热键、vendor 请求与自定义事件)

不属于单一域的通用端点,通过客户端的 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、active/render 帧率、丢帧数、剩余磁盘空间等)→ OnStatsReceived
GetCachedStats()返回上次缓存的 FOBSStats
GetHotkeyList()异步请求已注册的热键名称列表 → OnHotkeyListReceived
TriggerHotkeyByName(Name)通过已注册名称触发热键(例如 OBSBasic.StartRecording)。
TriggerHotkeyByKeySequence(Key, bShift, bControl, …)通过按键与修饰键组合触发热键。
BroadcastCustomEvent(...)发送原始自定义事件(上方的 EmitGameEvent 是其结构化封装)。
CallVendorRequest(...)调用第三方 OBS 插件的 vendor API → OnVendorResponseReceived

事件

事件触发时机
OnStatsReceived收到 GetStats 的响应时。
OnHotkeyListReceived收到 GetHotkeyList 的响应时。
OnExitStartedOBS 开始关闭时。
OnVendorEvent第三方 vendor 插件发出事件时。
OnCustomEvent另一会话广播自定义事件时。

大多数 General 处理器方法通过 GetClient()->GetGeneral() 访问。EmitGameEvent 具有上方所示的直接 Subsystem 快捷方式。

另请参阅