unity不使用协程异步加载外部音频音乐并返回AudioClip
时间: 2023-09-16 11:13:38 浏览: 262
在Unity中也可以不使用协程来异步加载外部音频文件并返回AudioClip。下面是一个简单的示例代码:
```csharp
public void LoadAudio(string path, Action<AudioClip> callback)
{
StartCoroutine(LoadAudioCoroutine(path, callback));
}
private IEnumerator LoadAudioCoroutine(string path, Action<AudioClip> callback)
{
UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(path, AudioType.WAV);
yield return www.SendWebRequest();
if (www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.ProtocolError)
{
Debug.LogError(www.error);
yield break;
}
AudioClip audioClip = DownloadHandlerAudioClip.GetContent(www);
if (audioClip.loadState == AudioDataLoadState.Loaded)
{
callback(audioClip);
}
else
{
UnityWebRequestAsyncOperation asyncOp = audioClip.LoadAudioDataAsync();
while (!asyncOp.isDone)
{
yield return null;
}
callback(audioClip);
}
}
```
这个示例代码使用UnityWebRequest从指定的路径中获取音频文件,并使用DownloadHandlerAudioClip将音频文件转换为AudioClip。如果AudioClip的loadState为Loaded,则直接调用回调函数返回AudioClip,否则使用LoadAudioDataAsync()方法异步加载AudioClip,并使用UnityWebRequestAsyncOperation来等待加载完成。等待完成后调用回调函数返回AudioClip。需要注意的是,由于UnityWebRequest是一个异步操作,因此不能直接在Update()函数中调用,必须使用协程或者异步委托来处理。
阅读全文