Unity中如何从服务端JSON文件读取音频URL并实现网络音频播放
解决方案
方案1:复用现有VideoPlayer逻辑(改动量最小)
你现有的VideoPlayer逻辑本身支持播放纯音频文件,无法播放是因为默认配置需要绑定视频渲染纹理,纯音频无视频流导致加载卡住,按如下调整即可:
- 选中挂载VideoPlayer组件的GameObject,将
Render Mode属性设置为None,关闭视频纹理输出 - 将
Audio Output Mode属性设置为Direct,不需要额外绑定组件即可直接输出音频 - 删掉代码中RawImage相关的无用声明,同时修正笔误:你声明的标题字段是
TitleText,代码中错误写为uiTitleText,修改为TitleText.text = data.Title
调整完后原有逻辑无需其他改动即可正常播放纯音频文件。
方案2:改用AudioSource组件(纯音频场景更轻量)
AudioSource确实不支持直接传入URL加载,需要通过UnityWebRequestMultimedia先下载音频流再赋值播放,完整实现代码如下:
using UnityEngine; using UnityEngine.Networking; using System.Collections; using TMPro; public struct Dataudio { public string Title; public string AudioURL; } public class getaudio : MonoBehaviour { [SerializeField] TextMeshPro TitleText; // 替换原有VideoPlayer,Inspector中挂载场景内的AudioSource组件 [SerializeField] private AudioSource audioSource; string jsonURL = "https://myserver"; IEnumerator Start() { using (var request = UnityWebRequest.Get(jsonURL)) { yield return request.SendWebRequest(); if (request.result != UnityWebRequest.Result.Success) { Debug.LogError($"JSON加载失败: {request.error}"); } else { Dataudio data = JsonUtility.FromJson<Dataudio>(request.downloadHandler.text); // 修正原笔误 TitleText.text = data.Title; // 启动协程加载音频 StartCoroutine(LoadAudioClip(data.AudioURL)); } } } IEnumerator LoadAudioClip(string audioUrl) { // 针对MP4封装的AAC音频,AudioType选MPEG即可,若为MP3格式则选AudioType.MP3 using (var audioRequest = UnityWebRequestMultimedia.GetAudioClip(audioUrl, AudioType.MPEG)) { yield return audioRequest.SendWebRequest(); if (audioRequest.result != UnityWebRequest.Result.Success) { Debug.LogError($"音频加载失败: {audioRequest.error}"); } else { AudioClip audioClip = DownloadHandlerAudioClip.GetContent(audioRequest); audioSource.clip = audioClip; audioSource.Play(); } } } }
注意事项
- 服务器端需要配置对应音频资源的跨域访问权限,否则Unity会加载失败
- 若存在格式兼容性问题,建议将纯音频文件转码为MP3格式,适配性更强
内容的提问来源于stack exchange,提问作者Bolino
相关产品推荐
相关产品推荐

