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

Unity打包后AudioManager无声音求助(编辑器运行正常)

打包后AudioManager无声音问题排查与解决

Unity编辑器内游戏运行正常,但打包后所有依赖AudioManager的音频均无输出。以下是相关代码及排查解决方向:

问题相关代码

AudioManager脚本

using UnityEngine.Audio;
using System;
using UnityEngine;

public class AudioManager : MonoBehaviour
{

    public static AudioManager instance;

    public AudioMixerGroup mixerGroup;

    public Sound[] sounds;

    void Awake()
    {
        if (instance != null)
        {
            Destroy(gameObject);
        }
        else
        {
            instance = this;
            DontDestroyOnLoad(gameObject);
        }

        foreach (Sound s in sounds)
        {
            s.source = gameObject.AddComponent<AudioSource>();
            s.source.clip = s.clip;
            s.source.loop = s.loop;

            s.source.outputAudioMixerGroup = mixerGroup;
        }
    }

    public void Play(string sound)
    {
        Sound s = Array.Find(sounds, item => item.name == sound);
        if (s == null)
        {
            Debug.LogWarning("Sound: " + name + " not found!");
            return;
        }

        s.source.volume = s.volume * (1f + UnityEngine.Random.Range(-s.volumeVariance / 2f, s.volumeVariance / 2f));
        s.source.pitch = s.pitch * (1f + UnityEngine.Random.Range(-s.pitchVariance / 2f, s.pitchVariance / 2f));

        s.source.Play();
    }

}

Sound类脚本

using UnityEngine.Audio;
using UnityEngine;

[System.Serializable]
public class Sound {

    public string name;

    public AudioClip clip;

    [Range(0f, 1f)]
    public float volume = .75f;
    [Range(0f, 1f)]
    public float volumeVariance = .1f;

    [Range(.1f, 3f)]
    public float pitch = 1f;
    [Range(0f, 1f)]
    public float pitchVariance = .1f;

    public bool loop = false;

    public AudioMixerGroup mixerGroup;

    [HideInInspector]
    public AudioSource source;

}

调用方式:FindObjectOfType<AudioManager>().Play("AudioName");

排查与解决方向

  • 检查音频资源导入设置:选中所有AudioClip,在Inspector面板确认:
    • Load Type设为Compressed in Memory或Streaming(避免Decompress On Load导致打包后加载失败)
    • 勾选Include In Build,确保资源被打包进程序
  • 修复AudioMixer相关问题:
    • 打包后AudioMixer的音量滑块可能被默认设为0,可在AudioManager的Awake方法中添加代码,给Mixer的音量参数设置初始值(比如mixerGroup.audioMixer.SetFloat("Volume", 0);,需提前在Mixer中创建对应的暴露参数)
    • Sound类中也定义了mixerGroup,但当前AudioManager统一使用全局的mixerGroup,若需单独配置每个Sound的混音组,可修改Awake中的赋值逻辑:s.source.outputAudioMixerGroup = s.mixerGroup != null ? s.mixerGroup : mixerGroup;
  • 优化音频调用方式:
    • 替换FindObjectOfType<AudioManager>()为单例调用AudioManager.instance.Play("AudioName"),避免因场景加载顺序或对象查找失败导致调用失效
  • 调整初始化时机:
    • 将AudioManager中初始化AudioSource的代码从Awake移至Start方法,避免打包后组件加载延迟
  • 检查系统与程序音量:
    • 确认打包后的程序未被系统静音,PC端可右键任务栏音量图标查看程序音量,移动端检查应用权限及系统音量设置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:02:11