原生 C++ 委托
每个可在 Blueprint 中赋值的 OBS 事件(FOBSOn*)都有一个原生 C++ 对应版本,其名称带有 Native 后缀(FOBSOn*Native)。原生委托使用 DECLARE_MULTICAST_DELEGATE_* 而非动态变体,因此它们接受 C++ lambda、成员函数以及 AddSP/AddUObject 绑定,这些都是仅限 Blueprint 的动态委托所不支持的。
原生委托携带与其 Blueprint 对应版本相同的参数(参数名称记录于事件页面)。插件在内部使用它们来保持处理器缓存同步,并将事件向上转发至事件金字塔;对于非 UObject 的 C++ 代码(例如无法对动态委托使用 AddSP 的编辑器 Details 面板定制代码),它们也是正确的绑定点。
用法
将 lambda 绑定到任意原生委托。当从具有独立生命周期的对象进行绑定时,务必在 lambda 内部捕获弱引用并检查其有效性。
// Connection
OBS->OnConnectedNative.AddLambda([]() { /* ... */ });
OBS->OnDisconnectedNative.AddLambda([](const FString& Reason) { /* ... */ });
// A handler-level event (lambda)
Client->GetScenes()->OnCurrentSceneChangedNative.AddLambda(
[](const FString& SceneName, const FString& SceneUuid)
{
UE_LOG(LogTemp, Log, TEXT("Now on scene: %s"), *SceneName);
});
// Member-function binding from a UObject
Client->GetOutputs()->OnRecordStateChangedNative.AddUObject(
this, &UMyClass::HandleRecordStateChanged);
以同样的方式添加 AddSP(共享指针)绑定。若后续需要调用 Remove() 来解绑,请保留返回的 FDelegateHandle,并在绑定对象销毁之前解除绑定。
连接与重连
| 原生委托 | 签名 |
|---|---|
FOBSOnConnectedNative | () |
FOBSOnDisconnectedNative | (const FString& Reason) |
FOBSOnConnectionErrorNative | (const FString& Error) |
FOBSOnReconnectingNative | (int32 AttemptNumber) |
FOBSOnReconnectFailedNative | () |
FOBSOnRequestFailedNative | (const FString& RequestType, int32 StatusCode, const FString& Comment) |
输出(录制 / 推流 / Virtual Camera / Replay Buffer)
| 原生委托 | 签名 |
|---|---|
FOBSOnStreamStateChangedNative | (bool bActive, EOBSOutputState State) |
FOBSOnRecordStateChangedNative | (bool bActive, EOBSOutputState State) |
FOBSOnRecordingStoppedNative | (bool bActive, EOBSOutputState State, const FString& OutputPath) |
FOBSOnVirtualCamStateChangedNative | (bool bActive, EOBSOutputState State) |
FOBSOnReplayBufferStateChangedNative | (bool bActive, EOBSOutputState State) |
FOBSOnReplayBufferSavedNative | (const FString& SavedReplayPath) |
FOBSOnRecordFileChangedNative | (const FString& NewOutputPath) |
FOBSOnRecordDirectoryReceivedNative | (const FString& RecordDirectory) |
FOBSOnOutputListReceivedNative | (const TArray<FOBSOutput>& Outputs) |
FOBSOnOutputStatusReceivedNative | (const FOBSOutputStatus& Status) |
场景与场景项目
| 原生委托 | 签名 |
|---|---|
FOBSOnCurrentSceneChangedNative | (const FString& SceneName, const FString& SceneUuid) |
FOBSOnSceneListUpdatedNative | () |
FOBSOnSceneItemTransformChangedNative | (const FString& SceneName, int32 SceneItemId, const FOBSSceneItemTransform& Transform) |
FOBSOnSceneItemCreatedNative | (const FString& SceneName, const FString& SourceName, int32 SceneItemId, int32 SceneItemIndex) |
FOBSOnSceneItemRemovedNative | (const FString& SceneName, const FString& SourceName, int32 SceneItemId) |
FOBSOnSceneItemLockStateChangedNative | (const FString& SceneName, int32 SceneItemId, bool bLocked) |
FOBSOnSceneItemEnableStateChangedNative | (const FString& SceneName, int32 SceneItemId, bool bEnabled) |
FOBSOnSceneItemListReindexedNative | (const FString& SceneName) |
FOBSOnSceneCreatedNative | (const FString& SceneName, const FString& SceneUuid, bool bIsGroup) |
FOBSOnSceneRemovedNative | (const FString& SceneName, const FString& SceneUuid, bool bIsGroup) |
FOBSOnSceneNameChangedNative | (const FString& SceneUuid, const FString& OldSceneName, const FString& NewSceneName) |
FOBSOnTransitionOverrideReceivedNative | (const FString& SceneName, const FOBSSceneTransitionOverride& Override) |
音频
| 原生委托 | 签名 |
|---|---|
FOBSOnInputListUpdatedNative | () |
FOBSOnInputMuteStateChangedNative | (const FString& InputName, bool bMuted) |
FOBSOnInputVolumeChangedNative | (const FString& InputName, float VolumeDb, float VolumeMul) |
FOBSOnInputVolumeMetersNative | (const TArray<FOBSInputVolumeMeter>& Meters) |
FOBSOnInputActiveStateChangedNative | (const FString& InputName, bool bVideoActive) |
FOBSOnMicActivityChangedNative | (const FString& InputName, bool bActive) |
FOBSOnInputCreatedNative | (const FString& InputName, const FString& InputUuid, const FString& InputKind, const FString& UnversionedInputKind) |
FOBSOnInputRemovedNative | (const FString& InputName, const FString& InputUuid) |
FOBSOnInputNameChangedNative | (const FString& InputUuid, const FString& OldInputName, const FString& NewInputName) |
FOBSOnInputKindListReceivedNative | (const TArray<FString>& InputKinds) |
FOBSOnInputAudioBalanceChangedNative | (const FString& InputName, const FString& InputUuid, float AudioBalance) |
FOBSOnInputAudioSyncOffsetChangedNative | (const FString& InputName, const FString& InputUuid, int32 SyncOffsetMs) |
FOBSOnInputAudioTracksChangedNative | (const FString& InputName, const FString& InputUuid, const FOBSAudioTracks& AudioTracks) |
FOBSOnInputAudioMonitorTypeChangedNative | (const FString& InputName, const FString& InputUuid, EOBSMonitorType MonitorType) |
FOBSOnSpecialInputsReceivedNative | (const FOBSSpecialInputs& SpecialInputs) |
OnInputVolumeMetersNative、OnInputActiveStateChangedNative和OnMicActivityChangedNative是高频率/需手动订阅的流。详见语音活动检测。
输入设置
| 原生委托 | 签名 |
|---|---|
FOBSOnInputSettingsChangedNative | (const FString& InputName, const FString& InputUuid) |
FOBSOnInputSettingsReceivedNative | (const FString& InputName, const FString& InputKind, TSharedPtr<FJsonObject> Settings) |
FOBSOnInputPropertyItemsReceivedNative | (const FString& InputName, const FString& PropertyName, const TArray<FOBSPropertyItem>& Items) |
OnInputSettingsReceivedNative 仅限原生使用,它暴露原始的 TSharedPtr<FJsonObject> 设置对象(对应的 Blueprint 事件则以字符串形式呈现该数据)。
媒体输入
| 原生委托 | 签名 |
|---|---|
FOBSOnMediaInputPlaybackStartedNative | (const FString& InputName) |
FOBSOnMediaInputPlaybackEndedNative | (const FString& InputName) |
FOBSOnMediaInputActionTriggeredNative | (const FString& InputName, EOBSMediaInputAction Action) |
FOBSOnMediaInputStatusReceivedNative | (const FOBSMediaInputStatus& Status) |
转场
| 原生委托 | 签名 |
|---|---|
FOBSOnCurrentTransitionChangedNative | (const FString& TransitionName) |
FOBSOnTransitionDurationChangedNative | (int32 DurationMs) |
FOBSOnTransitionStartedNative | (const FString& TransitionName) |
FOBSOnTransitionEndedNative | (const FString& TransitionName) |
FOBSOnTransitionVideoEndedNative | (const FString& TransitionName) |
FOBSOnTransitionListUpdatedNative | () |
工作室模式
| 原生委托 | 签名 |
|---|---|
FOBSOnStudioModeStateChangedNative | (bool bStudioModeEnabled) |
FOBSOnCurrentPreviewSceneChangedNative | (const FString& SceneName, const FString& SceneUuid) |
滤镜
| 原生委托 | 签名 |
|---|---|
FOBSOnSourceFilterCreatedNative | (const FString& SourceName, const FString& FilterName, const FString& FilterKind, int32 FilterIndex, bool bFilterEnabled) |
FOBSOnSourceFilterRemovedNative | (const FString& SourceName, const FString& FilterName) |
FOBSOnSourceFilterNameChangedNative | (const FString& SourceName, const FString& OldFilterName, const FString& FilterName) |
FOBSOnSourceFilterSettingsChangedNative | (const FString& SourceName, const FString& FilterName) |
FOBSOnSourceFilterEnableStateChangedNative | (const FString& SourceName, const FString& FilterName, bool bFilterEnabled) |
FOBSOnSourceFilterListReindexedNative | (const FString& SourceName) |
FOBSOnSourceFilterListReceivedNative | (const FString& SourceName) |
OnSourceFilterListReceivedNative 仅限原生使用:它在解析 GetSourceFilterList 响应后触发(不存在对应的 OBS 推送事件),以便编辑器 UI 可以刷新该来源的滤镜下拉菜单。
截图
| 原生委托 | 签名 |
|---|---|
FOBSOnScreenshotCapturedNative | (const FOBSScreenshotResult& Result) |
FOBSOnScreenshotSavedNative | (const FString& SourceName, const FString& FilePath) |
截图事件仅在处理器层级可用。请通过 Client->GetScreenshots() 访问(它们不会在 Subsystem 上重新广播)。
配置(场景集合 / 配置文件 / 视频 / 推流服务 / 持久化数据)
| 原生委托 | 签名 |
|---|---|
FOBSOnCurrentSceneCollectionChangingNative | (const FString& SceneCollectionName) |
FOBSOnCurrentSceneCollectionChangedNative | (const FString& SceneCollectionName) |
FOBSOnSceneCollectionListChangedNative | () |
FOBSOnCurrentProfileChangingNative | (const FString& ProfileName) |
FOBSOnCurrentProfileChangedNative | (const FString& ProfileName) |
FOBSOnProfileListChangedNative | () |
FOBSOnVideoSettingsReceivedNative | (const FOBSVideoSettings& Settings) |
FOBSOnStreamServiceSettingsReceivedNative | (const FOBSStreamServiceSettings& Settings) |
FOBSOnPersistentDataReceivedNative | (EOBSDataRealm Realm, const FString& SlotName, const FString& SlotValueJson) |
通用(性能统计 / 热键 / Vendor / 自定义事件)
| 原生委托 | 签名 |
|---|---|
FOBSOnStatsReceivedNative | (const FOBSStats& Stats) |
FOBSOnHotkeyListReceivedNative | (const TArray<FString>& HotkeyNames) |
FOBSOnExitStartedNative | () |
FOBSOnVendorEventNative | (const FString& VendorName, const FString& EventType, const FString& EventDataJson) |
FOBSOnCustomEventNative | (const FString& EventDataJson) |
FOBSOnVendorResponseReceivedNative | (const FString& VendorName, const FString& RequestType, const FString& ResponseDataJson) |
另见:事件,查阅 Blueprint 事件名称及每个事件在哪个层级(处理器 / Subsystem / Component)可用。