如何从良率回报中返回audioClip?

问题描述

我想写一种从我的加载音频剪辑的方法

IEnumerator GetAudioClip(string filePath)
{
    using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(filePath,AudioType.MPEG))
    {
        yield return www.SendWebRequest();

        if (www.isNetworkError)
        {
            Debug.Log(www.error);
        }
        else
        {
            AudioClip ac= DownloadHandlerAudioClip.GetContent(www);

        }
    }
}

我希望我的方法返回audioClip 我该怎么做?我调查了一些,有一些复杂的类我没听懂

解决方法

从技术上讲,由于协程在Unity中的实现方式,您无法做到。 有几种解决方法。这是我头顶上的两个:

1.IEnumerator协程,它接收变量委托作为返回方法

IEnumerator GetAudioClip(string filePath,Action<AudioClip> callback)
{
    if (callback == null) { yield break; }
    using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(filePath,AudioType.MPEG))
    {
        yield return www.SendWebRequest();

        if (www.isNetworkError)
        {
            Debug.Log(www.error);
            callback(null);
        }
        else
        {
            AudioClip ac= DownloadHandlerAudioClip.GetContent(www);
            callback(ac);
        }
    }
}

2。使用Unity的新异步等待集成

public async Task<AudioClip> GetAudioClip(string filePath){

    using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(filePath,AudioType.MPEG))
    {
        var result = www.SendWebRequest();

        while (!result.isDone) { await Task.Delay(100); }

        if (www.isNetworkError)
        {
            Debug.Log(www.error);
            return null;
        }
        else
        {
            return DownloadHandlerAudioClip.GetContent(www);
        }
    }

请记住,这是我在浏览器中编写的伪代码,因此它可能无法通过复制粘贴直接编译。