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

Unity节奏游戏:如何在JSON文件中存储MP3引用并读取路径

Unity节奏游戏JSON存储MP3引用解决方案

1. 修改自定义数据类

直接在你的MusicChart类中新增字符串字段,用来存储MP3文件的相对路径:

using UnityEngine;

[System.Serializable]
public class MusicChart
{
     public string name;
     public float startDelay;
     public float tempo;
     public float finishBeat;
     public Timing[] timings;
     // 新增音频路径字段
     public string audioPath;
}

2. 更新JSON文件

在对应的JSON文件中添加audioPath字段,填写MP3文件的相对路径示例:

{
    "name": "ExampleChart",
    "startDelay": 0.5,
    "tempo": 120,
    "finishBeat": 160,
    "timings": [],
    "audioPath": "Audio/GameMusic/ExampleSong"
}

3. 在Unity中读取路径并加载音频

根据MP3文件的存放位置,选择对应的加载方式:

情况一:MP3放在Resources文件夹下

若音频存放在Resources目录(比如Resources/Audio/GameMusic/),直接用Resources.Load加载:

// 假设已完成JSON解析,得到MusicChart实例
MusicChart loadedChart = JsonUtility.FromJson<MusicChart>(jsonText);

// 加载音频
AudioClip audioClip = Resources.Load<AudioClip>(loadedChart.audioPath);
if (audioClip != null)
{
    // 绑定到AudioSource播放(需提前挂载该组件)
    AudioSource audioSource = GetComponent<AudioSource>();
    audioSource.clip = audioClip;
    audioSource.Play();
}
else
{
    Debug.LogError("未找到指定路径的音频文件:" + loadedChart.audioPath);
}

情况二:MP3放在StreamingAssets文件夹下

若音频存放在StreamingAssets目录,需用UnityWebRequest加载(该目录文件无法直接通过路径访问):

using UnityEngine.Networking;
using System.Threading.Tasks;

// 异步加载音频方法
async Task LoadAudioFromStreamingAssets(MusicChart chart)
{
    string fullPath = System.IO.Path.Combine(Application.streamingAssetsPath, chart.audioPath + ".mp3");
    
    using (UnityWebRequest request = UnityWebRequestMultimedia.GetAudioClip(fullPath, AudioType.MPEG))
    {
        await request.SendWebRequest();

        if (request.result == UnityWebRequest.Result.Success)
        {
            AudioClip audioClip = DownloadHandlerAudioClip.GetContent(request);
            AudioSource audioSource = GetComponent<AudioSource>();
            audioSource.clip = audioClip;
            audioSource.Play();
        }
        else
        {
            Debug.LogError("音频加载失败:" + request.error);
        }
    }
}

// 调用示例(需在异步方法内执行)
// await LoadAudioFromStreamingAssets(loadedChart);

注意事项

  • 路径区分大小写,确保JSON中的路径与Unity项目内文件路径完全匹配
  • Resources加载的文件打包后无法动态新增;若需支持外部音频动态加载,优先选择StreamingAssets或其他外部存储方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:52:50