You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity移动端实现息屏/后台播放音频的方法?

实现Unity移动端后台音频播放(屏幕关闭/切后台仍播放)

要解决移动端切后台或屏幕关闭时音频停止的问题,需要结合项目配置和C#脚本共同处理,以下是适配Unity音频系统的完整方案:

一、关键项目配置

先确认Player Settings中的后台权限配置,这是基础前提:

Android平台

  1. 打开Edit > Project Settings > Player > Android > Other Settings
  2. 勾选Allow Background Audio选项
  3. 在Required Background Modes中添加Audio(若列表中没有,可手动输入)

iOS平台

  1. 打开Edit > Project Settings > Player > iOS > Other Settings
  2. 找到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();
        }
    }
}

三、使用步骤

  1. 在场景中创建一个空GameObject,命名为BackgroundAudioManager
  2. 将上述脚本挂载到该对象上
  3. 给脚本的bgAudioSource字段拖入你的背景音频AudioSource组件(确保AudioSource已赋值音频文件,Play On Awake勾选,Loop按需开启)
  4. 打包到真机测试(编辑器模拟后台可能无法完全复现移动端行为)

注意事项

  • 必须打包到真机测试,Unity编辑器的后台模拟不支持完整的移动端音频会话逻辑
  • 确保音频文件格式为移动端兼容类型(如MP3、AAC)
  • Android 12+版本无需额外手动添加权限,Unity的Allow Background Audio已自动配置必要的Manifest权限
  • iOS上如果遇到音频中断问题,可在脚本中添加OnAudioFocusChanged的监听逻辑(针对原生音频焦点变化)

内容的提问来源于stack exchange,提问作者user18219651

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:10:31