MediaFrames
Coding Style wiki
MediaFrames 是 MediaFrame 模块的统一调用入口(Facade),以嵌套静态类提供 AudioFrame(音频)与 VideoFrame(视频)两组接口,涵盖媒体资源的预加载、播放、暂停、恢复、停止与卸载,底层皆具备引用计数管理。
| 命名空间 | OxGFrame.MediaFrame |
| 类型 | public static class |
| 源码 | MediaFrames.cs |
using OxGFrame.MediaFrame;
注意 调用前需确保场景中已创建对应的 AudioManager / VideoManager 对象,相关设置请参考 MediaFrame 介绍。
快速上手
// 预加载 BGM
await MediaFrames.AudioFrame.Preload("TitleBgm");
// 播放 BGM(-1 = 无限循环)
var bgm = await MediaFrames.AudioFrame.Play("TitleBgm", null, -1);
// 播放音效(使用 res# 前缀,改由 Resources 加载)
await MediaFrames.AudioFrame.Play("res#Audio/Sound/ClickSfx");
// 播放过场视频
var video = await MediaFrames.VideoFrame.Play("OpeningCutscene");
// 停止 BGM
MediaFrames.AudioFrame.Stop("TitleBgm");
// 视频确定不再使用时,强制卸载释放内存
MediaFrames.VideoFrame.ForceUnload("OpeningCutscene");
通用规则
资源名称前缀
assetName 支持前缀解析,依前缀决定资源加载来源:
| 前缀 | 说明 | 示例 |
|---|---|---|
| res# | 从 Unity 原生 Resources 加载资源(依 Resources 相对路径)。 | res#Audio/Sound/ClickSfx |
| 无前缀 | 默认从 Asset Bundle (YooAsset) 加载资源(直接使用可寻址名称 Address)。 | TitleBgm |
资源包 (Package)
Preload 与 Play 皆提供 packageName 重载:
- 未指定
packageName:自动使用默认 Package(AssetPatcher.GetDefaultPackageName())。 - 指定
packageName:从 指定的 Package 加载资源,适用于多 Package 分包管理。
引用计数与生命周期
注意 MediaFrames 底层皆具备引用计数管理。媒体实例销毁时,若该资源已无其他同名实例存在(引用归零),且启用 onDestroyAndUnload 设置,将自动联动 AssetLoader 卸载资源。
提醒 媒体实例的销毁时机,可由 Prefab 上 AudioBase / VideoBase 组件的 onStopAndDestroy(停止时销毁)与 onDestroyAndUnload(销毁时卸载)设置控制,也可在调用 Stop 时传入 forceDestroy 强制销毁。
MediaFrames.AudioFrame
音频的统一调用接口。专门负责管理游戏中的所有音频(如 BGM、环境音、语音、音效),支持依 SoundType 分类管理,并与 Unity 的 AudioMixer 深度整合。
方法总览
初始化与组件获取
| 方法 | 说明 |
|---|---|
| InitInstance | 初始化 AudioManager 单例实例。 |
| GetComponent<T> | 获取指定名称的音频实例组件(首个匹配)。 |
| GetComponents<T> | 获取指定名称的所有音频实例组件。 |
Mixer 控制
| 方法 | 说明 |
|---|---|
| GetMixerByName | 依名称获取已注册于 AudioManager 的 AudioMixer。 |
| SetMixerExposedParam | 设置 Mixer 的 Exposed Parameter 数值(自动记录)。 |
| ClearMixerExposedParam | 清除 Mixer 的 Exposed Parameter 设置(恢复默认值)。 |
| AutoClearMixerExposedParams | 批量清除已记录的 Exposed Parameters。 |
| AutoRestoreMixerExposedParams | 批量还原已记录的 Exposed Parameters。 |
| GetMixerSnapshot | 获取 Mixer 中指定名称的 Snapshot。 |
| SetMixerSnapshot | 立即切换至指定的 Snapshot。 |
| SetMixerTransitionToSnapshot | 在指定时间内加权混合过渡至多个 Snapshots。 |
播放与资源管理
| 方法 | 说明 |
|---|---|
| Preload | 预加载音频资源至缓存。 |
| Play | 播放音频,返回 AudioBase 实例。 |
| Pause | 暂停指定名称的音频。 |
| PauseAll | 暂停所有音频。 |
| ResumeAll | 恢复所有处于暂停状态的音频。 |
| Stop | 停止指定名称的音频。 |
| StopAll | 停止所有音频。 |
| ForceUnload | 强制卸载指定名称的音频资源。 |
InitInstance
public static void InitInstance()
说明
主动初始化 AudioManager 单例实例。建议在游戏启动阶段调用一次,确保管理器提前就绪。
注意 若场景中不存在 AudioManager 对象,将输出错误日志。
GetComponent<T>
public static T GetComponent<T>(string assetName) where T : AudioBase
参数
| 参数 | 类型 | 说明 |
|---|---|---|
| assetName | string | 音频资源名称。 |
返回值
T — 首个名称匹配的音频实例组件;未找到时返回 null。
说明
获取指定名称的音频实例上的 AudioBase 组件。仅能获取已进入播放管理列表的实例(即调用过 Play 之后),仅预加载的资源尚未实例化,无法获取。
示例
var audBase = MediaFrames.AudioFrame.GetComponent<AudioBase>("TitleBgm");
if (audBase != null && audBase.IsPlaying())
{
// 对实例进行高级操作
}
GetComponents<T>
public static T[] GetComponents<T>(string assetName) where T : AudioBase
参数
| 参数 | 类型 | 说明 |
|---|---|---|
| assetName | string | 音频资源名称。 |
返回值
T[] — 所有名称匹配的音频实例组件数组;未找到时返回空数组。
说明
获取指定名称的所有音频实例组件。当同名音频同时存在多个实例时(如多次 播放的音效),可通过此方法批量获取。
GetMixerByName
public static AudioMixer GetMixerByName(string mixerName)
参数
| 参数 | 类型 | 说明 |
|---|---|---|
| mixerName | string | Mixer 名称。 |
返回值
AudioMixer — 名称匹配的 Mixer;未注册或未找到时返回 null。
说明
依名称获取 AudioMixer。
重要 必须先将 AudioMixer 挂载至场景中 AudioManager 的 Audio Mixer 列表(Inspector),才能通过此方法获取。
示例
var mixer = MediaFrames.AudioFrame.GetMixerByName("MasterMixer");
SetMixerExposedParam
public static void SetMixerExposedParam(AudioMixer mixer, string expParam, float val)
参数
| 参数 | 类型 | 说明 |
|---|---|---|
| mixer | AudioMixer | 目标 Mixer。 |
| expParam | string | Exposed Parameter 名称。 |
| val | float | 设置数值。 |
说明
设置 Mixer 的 Exposed Parameter 数值(如分组音量控制)。设置成功时会自动记录该参数值,供 AutoRestoreMixerExposedParams 还原使用。
示例
var mixer = MediaFrames.AudioFrame.GetMixerByName("MasterMixer");
// 将 BGM 分组音量调低至 -20 dB
MediaFrames.AudioFrame.SetMixerExposedParam(mixer, "BgmVol", -20f);
ClearMixerExposedParam
public static void ClearMixerExposedParam(AudioMixer mixer, string expParam)
参数
| 参数 | 类型 | 说明 |
|---|---|---|
| mixer | AudioMixer | 目标 Mixer。 |
| expParam | string | Exposed Parameter 名称。 |
说明
清除指定 Exposed Parameter 的自定义设置,恢复为 Mixer 的默认值。
AutoClearMixerExposedParams
public static void AutoClearMixerExposedParams(AudioMixer mixer)
参数
| 参数 | 类型 | 说明 |
|---|---|---|
| mixer | AudioMixer | 目标 Mixer。 |
说明