Unity移动端实现息屏/后台播放音频的方法?
实现Unity移动端后台音频播放(屏幕关闭/切后台仍播放)
要解决移动端切后台或屏幕关闭时音频停止的问题,需要结合项目配置和C#脚本共同处理,以下是适配Unity音频系统的完整方案:
一、关键项目配置
先确认Player Settings中的后台权限配置,这是基础前提:
Android平台
- 打开
Edit > Project Settings > Player > Android > Other Settings - 勾选
Allow Background Audio选项 - 在
Required Background Modes中添加Audio(若列表中没有,可手动输入)
iOS平台
- 打开
Edit > Project Settings > Player > iOS > Other Settings - 找到
Background Modes,勾选Audio, AirPlay, and Picture in Picture
二、C#脚本实现(适配Unity AudioSource)
创建一个持久化的音频管理脚本,确保后台状态下音频会话保持活跃,并且处理应用焦点/暂停事件:
using UnityEngine; public class BackgroundAudioHandler : MonoBehaviour { public static BackgroundAudioHandler Instance; [SerializeField] private AudioSource bgAudioSource; private void Awake() { // 单例模式保证跨场景不销毁,维持音频播放 if (Instance == null) { Instance = this; DontDestroyOnLoad(gameObject); SetupAudioSession(); } else { Destroy(gameObject); } } private void SetupAudioSession() { // 针对不同平台配置音频会话,强制后台播放 #if UNITY_IOS UnityEngine.iOS.AudioSession.SetCategory(UnityEngine.iOS.AudioSessionCategory.Playback); UnityEngine.iOS.AudioSession.MakeAudioSessionActive(); #elif UNITY_ANDROID // Android端请求音频焦点,避免被其他应用抢占 AndroidJavaObject audioManager = new AndroidJavaClass("android.content.Context") .GetStatic<AndroidJavaObject>("AUDIO_SERVICE"); AndroidJavaObject audioAttributes = new AndroidJavaObject("android.media.AudioAttributes.Builder") .Call<AndroidJavaObject>("setUsage", 1) // USAGE_MEDIA .Call<AndroidJavaObject>("setContentType", 2) // CONTENT_TYPE_MUSIC .Call<AndroidJavaObject>("build"); audioManager.Call("requestAudioFocus", null, 3, 1); // STREAM_MUSIC, AUDIOFOCUS_GAIN #endif } // 处理应用焦点切换(切后台/回前台) private void OnApplicationFocus(bool hasFocus) { if (bgAudioSource != null && !hasFocus) { // 切后台时如果音频暂停,强制恢复播放 if (!bgAudioSource.isPlaying) { bgAudioSource.Play(); } } } // 处理应用暂停事件(比如屏幕关闭) private void OnApplicationPause(bool pauseStatus) { if (bgAudioSource != null && pauseStatus) { // 应用暂停时确保音频不停止 bgAudioSource.UnPause(); } } }
三、使用步骤
- 在场景中创建一个空GameObject,命名为
BackgroundAudioManager - 将上述脚本挂载到该对象上
- 给脚本的
bgAudioSource字段拖入你的背景音频AudioSource组件(确保AudioSource已赋值音频文件,Play On Awake勾选,Loop按需开启) - 打包到真机测试(编辑器模拟后台可能无法完全复现移动端行为)
注意事项
- 必须打包到真机测试,Unity编辑器的后台模拟不支持完整的移动端音频会话逻辑
- 确保音频文件格式为移动端兼容类型(如MP3、AAC)
- Android 12+版本无需额外手动添加权限,Unity的
Allow Background Audio已自动配置必要的Manifest权限 - iOS上如果遇到音频中断问题,可在脚本中添加
OnAudioFocusChanged的监听逻辑(针对原生音频焦点变化)
内容的提问来源于stack exchange,提问作者user18219651
相关产品推荐
相关产品推荐

