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

Unity外部音频源加载后无法播放问题求助

Unity外部WAV音频无法播放问题排查与修复

核心问题分析

  1. 异步加载时机错误:启动加载协程后立刻调用AudioSource.Play(),此时协程还未完成音频加载与赋值操作,AudioSource.clip仍处于未就绪状态。
  2. 路径格式不兼容:UnityWebRequestMultimedia.GetAudioClip要求本地文件路径带file:///协议前缀,直接传入File.Exists验证的原生本地路径会导致加载异常,表现为剪辑名称为空。
  3. 缺乏错误校验:未对UnityWebRequest的加载结果做判断,无法定位加载失败的具体原因。

修正后的代码

IEnumerator LoadMusic(string path, AudioSource audioSource)
{
    // 转换本地路径为UnityWebRequest兼容格式
    string webPath = Path.IsPathRooted(path) ? $"file:///{path.Replace("\\", "/")}" : path;
    
    using (UnityWebRequest uwr = UnityWebRequestMultimedia.GetAudioClip(webPath, AudioType.WAV))
    {
        yield return uwr.SendWebRequest();

        // 校验加载是否成功
        if (uwr.result != UnityWebRequest.Result.Success)
        {
            Debug.LogError($"音频加载失败:{uwr.error}");
            yield break;
        }

        var uwrClip = DownloadHandlerAudioClip.GetContent(uwr);
        if (uwrClip == null)
        {
            Debug.LogError("无法解析音频剪辑内容");
            yield break;
        }

        audioSource.clip = uwrClip;
        // 加载完成后再执行播放
        audioSource.Play();
    }
}

private void LoadAssets()
{
    if (charts.Length == 0) return;

    if (startingValue != currentDropdownValue)
    {
        startingValue = currentDropdownValue;
        string musicToLoad = currentFilePath;
        // 启动协程,播放逻辑移至协程内确保时机正确
        StartCoroutine(LoadMusic(musicToLoad, SelectorAudioPreview));
    }
}

关键修复点说明

  • 路径格式适配:将本地路径转换为file:///开头的格式,匹配UnityWebRequest的加载要求。
  • 异步流程同步:把AudioSource.Play()移到协程内音频加载完成且校验通过后执行,避免提前调用导致的无效播放。
  • 错误日志补充:添加加载结果和剪辑有效性校验,方便快速定位问题根源。
  • 代码简化:移除冗余else分支,保持逻辑简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:39:25