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

Unity节奏游戏使用UnityWebRequest加载自定义音频过慢如何优化

优化方案

1. 开启音频流式加载(核心优化,直接实现秒开预览)

你当前使用的UnityWebRequestMultimedia.GetAudioClip默认关闭流式加载,必须手动设置DownloadHandlerAudioClip.streamAudio为true,开启后不需要等待整个MP3全部加载解码完成,只要缓冲了足够的播放帧就可以立刻开始播放,和osu、Quaver等同类游戏的预览实现逻辑完全一致。
修改后的加载代码如下:

public async Task<AudioClip> LoadAudioFile(string path, CancellationToken cancellationToken = default)
{
    using UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(path, AudioType.MPEG);
    // 开启流式加载,核心优化点
    ((DownloadHandlerAudioClip)www.downloadHandler).streamAudio = true;
    var operation = www.SendWebRequest();
    
    // 用原生await替代轮询,减少主线程开销
    await operation;

    // 支持取消加载,避免切歌后残留任务
    if (cancellationToken.IsCancellationRequested)
    {
        www.Dispose();
        return null;
    }

    if (www.result == UnityWebRequest.Result.Success)
    {
        return DownloadHandlerAudioClip.GetContent(www);
    }
    return null;
}

调用时新增取消逻辑,避免切歌后产生冗余加载任务:

// 类成员变量保存上一次加载的取消令牌源
private CancellationTokenSource _lastLoadCts;

// 选中某首歌时的调用逻辑
_lastLoadCts?.Cancel();
_lastLoadCts = new CancellationTokenSource();
try
{
    beatmap.music = await LoadFile.instance.LoadAudioFile(
        Path.Combine(folderPath, beatmap.musicName), 
        _lastLoadCts.Token
    );
    // 加载到可播放状态就立刻播放,不需要等全量加载完成
    audioSource.PlayOneShot(beatmap.music);
}
catch (OperationCanceledException)
{
    // 取消操作不需要额外处理异常
}

2. 选歌场景加载策略优化

  • 不要在进入选歌场景时全量加载所有歌曲的音频文件,仅加载歌曲封面、歌曲名、BPM等元数据即可,音频仅在用户选中对应歌曲时才触发加载
  • 若有固定长度预览片段的需求,可以在玩家导入自定义关卡时,提前提取音频前30秒转成低码率缓存文件存储在本地,选歌时优先加载缓存的预览片段,加载速度可以压缩到50ms以内
  • 对已经加载过的音频做LRU内存缓存,用户来回切歌时不需要重复加载,缓存大小超过阈值后自动淘汰最少使用的音频资源

3. 卡顿与资源残留问题修复

  • 移除原代码中的while (!operation.isDone) await Task.Yield()轮询逻辑,直接await UnityWebRequestAsyncOperation本身即可,大幅减少主线程调度开销,解决加载时FPS掉帧问题
  • 所有异步加载任务都加上取消令牌,用户切歌、退出选歌场景时主动取消未完成的加载任务,同时调用Resources.UnloadUnusedAssets()清理未使用的AudioClip资源,避免后台残留任务占用资源
  • 可选优化:如果支持导入时转码,可以将用户上传的MP3转成OGG格式,Unity对OGG的解码效率比MP3高30%左右,进一步提升加载速度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:06:04