Skip to content

Desuq Cafe

文档菜单

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

场景与来源

本指南介绍如何切换和管理场景、配置逐场景转场覆盖,以及操作场景项目(即场景内的来源实例),涵盖变换、排序、锁定和混合模式等内容。

场景管理

函数描述
SetCurrentScene(Name)切换到指定场景
GetSceneList()从 OBS 刷新场景列表
GetGroupList()获取所有场景分组
GetCachedScenes()获取本地缓存的场景列表
GetCachedScenesWithItems()获取包含来源项目的场景列表
SetSceneItemEnabled(Scene, ItemId, Enabled)显示/隐藏来源

场景增删改查

函数描述
CreateScene(Name)创建一个新的空场景
RemoveScene(Name)删除场景(若为当前场景则失败)
SetSceneName(Name, NewName)重命名场景

事件:

  • OnSceneCreated(SceneName, SceneUuid, bIsGroup):场景已创建
  • OnSceneRemoved(SceneName, SceneUuid, bIsGroup):场景已删除
  • OnSceneNameChanged(SceneUuid, OldName, NewName):场景已重命名

注意: 无法删除当前激活的场景。请先切换到其他场景。

场景转场覆盖

逐场景转场覆盖允许你在切换特定场景时使用不同的转场效果。

函数描述
GetSceneTransitionOverride(SceneName)异步获取指定场景的转场覆盖设置
SetSceneTransitionOverride(SceneName, TransitionName, DurationMs)设置覆盖(-1 时长表示保留当前值)
ClearSceneTransitionOverride(SceneName)移除覆盖,恢复使用默认转场
GetCachedTransitionOverride(SceneName, OutOverride)获取本地缓存的覆盖数据
FetchAllTransitionOverrides()获取所有已缓存场景的覆盖设置

事件:

  • OnTransitionOverrideReceived(SceneName, Override):转场覆盖数据已获取

覆盖结构体(FOBSSceneTransitionOverride):

字段类型描述
TransitionNameFString覆盖转场的名称(为空表示无覆盖)
TransitionDurationint32时长(毫秒,-1 表示无覆盖)
bHasOverridebool若已设置覆盖则为 True

场景项目变换

函数描述
GetSceneItemTransform(Scene, ItemId)从 OBS 获取变换属性
SetSceneItemTransform(Scene, ItemId, Transform)设置所有变换属性
SetSceneItemPosition(Scene, ItemId, X, Y)仅设置位置
SetSceneItemScale(Scene, ItemId, ScaleX, ScaleY)仅设置缩放
SetSceneItemRotation(Scene, ItemId, Rotation)设置旋转角度(单位:度)
SetSceneItemCrop(Scene, ItemId, L, T, R, B)设置裁剪量(单位:像素)
SetSceneItemBounds(Scene, ItemId, Type, W, H, Align)设置边界框
GetSceneItemId(Scene, SourceName)将来源名称转换为场景项目 ID
GetCachedSceneItemTransform(Scene, ItemId, OutTransform)获取缓存的变换数据

变换属性:

  • 位置:X/Y 坐标(单位:像素)
  • 缩放:X/Y 倍率(1.0 = 100%)
  • 旋转:角度(0 至 360)
  • 裁剪:各边裁剪的像素数
  • 边界框:边界框类型、尺寸和对齐方式
  • 对齐:位标志(0=居中,1=左,2=右,4=上,8=下)

边界框类型:

类型描述
None无边界框
Stretch拉伸填充(忽略宽高比)
ScaleInner适应边界内部(添加黑边)
ScaleOuter填满边界(可能裁剪)
ScaleToWidth缩放以匹配宽度
ScaleToHeight缩放以匹配高度
MaxOnly仅限最大尺寸(不放大)

重要: 场景项目通过 SceneItemId 标识,而非来源名称。同一来源可在场景中多次出现,每次对应不同的 ID。请使用 GetSceneItemId() 将来源名称转换为其 ID。

场景项目管理(增删改查)

函数描述
CreateSceneItem(Scene, SourceName, Enabled)将已有来源添加到场景
RemoveSceneItem(Scene, ItemId)从场景中移除项目(不删除来源)
DuplicateSceneItem(Scene, ItemId, DestScene)克隆项目(目标场景为空则克隆到同一场景)
GetSceneItemLocked(Scene, ItemId)查询项目是否已锁定
SetSceneItemLocked(Scene, ItemId, Locked)在 OBS 界面中锁定/解锁项目
GetGroupSceneItemList(GroupName)获取分组内的所有项目
GetSceneItemSource(Scene, ItemId)获取场景项目的来源信息
GetSceneItemIndex(Scene, ItemId)查询层级顺序位置
SetSceneItemIndex(Scene, ItemId, Index)设置层级顺序(0 = 最底层,数值越大越靠前)
GetSceneItemBlendMode(Scene, ItemId)查询混合模式
SetSceneItemBlendMode(Scene, ItemId, Mode)设置合成混合模式

混合模式:

模式描述
Normal默认混合
Additive提亮(颜色叠加)
Subtract压暗(颜色相减)
Screen滤色混合
Multiply正片叠底混合
Lighten保留较亮像素
Darken保留较暗像素

注意事项:

  • CreateSceneItem 需要使用已有来源,无法创建新来源。
  • DuplicateSceneItem 创建的是引用而非副本。对来源的修改会同时影响两者。
  • RemoveSceneItem 仅移除引用,底层来源仍然可用。
  • 索引 0 位于场景最底层(最先渲染),数值越大越靠前。
  • 混合模式的更改不会触发 OBS 事件,如有需要请在本地跟踪。

事件

场景

  • OnCurrentSceneChanged(SceneName, SceneUuid):当前激活场景已更改
  • OnSceneListUpdated:场景列表已刷新
  • OnSceneCreated(SceneName, SceneUuid, bIsGroup):新场景已创建
  • OnSceneRemoved(SceneName, SceneUuid, bIsGroup):场景已删除
  • OnSceneNameChanged(SceneUuid, OldSceneName, NewSceneName):场景已重命名
  • OnTransitionOverrideReceived(SceneName, Override):场景转场覆盖数据已获取

场景项目

  • OnSceneItemTransformChanged(SceneName, SceneItemId, Transform):场景项目变换已更改
  • OnSceneItemCreated(SceneName, SourceName, SceneItemId, SceneItemIndex):项目已添加到场景
  • OnSceneItemRemoved(SceneName, SourceName, SceneItemId):项目已从场景移除
  • OnSceneItemEnableStateChanged(SceneName, SceneItemId, bEnabled):项目可见性已更改
  • OnSceneItemLockStateChanged(SceneName, SceneItemId, bLocked):项目锁定状态已切换
  • OnSceneItemListReindexed(SceneName):场景内项目已重新排序(层级顺序已更改)

有关所有 OBS 领域事件的完整目录,请参阅事件参考