如何从良率回报中返回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);
        }
    }

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...