Unity 使用携程WebRequest下载GetAssetBundle加载模型实例化出来 不继承MonoBehaviour 提示下载进度可以在外面的类调用下载进度
时间: 2024-02-18 09:02:20 浏览: 123
在不继承MonoBehaviour的类中,我们可以通过回调函数来获取下载进度。具体来说,我们可以使用UnityWebRequest的downloadProgress属性来获取下载进度,并将其传递给一个回调函数。
以下是一个简单的示例代码:
```csharp
public class ModelLoader
{
public delegate void OnProgressChanged(float progress);
public IEnumerator DownloadAndLoadAssetBundle(string url, OnProgressChanged onProgressChanged)
{
UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(url);
while (!request.isDone)
{
float progress = request.downloadProgress;
onProgressChanged?.Invoke(progress); // 回调进度更新
yield return null;
}
AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);
GameObject model = bundle.LoadAsset<GameObject>("ModelName");
Instantiate(model);
}
}
```
在上面的代码中,我们定义了一个OnProgressChanged委托类型,它将被用作回调函数的类型。在DownloadAndLoadAssetBundle函数中,我们使用UnityWebRequest下载Asset Bundle,并在每次迭代中检查downloadProgress属性以获取下载进度。如果onProgressChanged不为空,则调用回调函数onProgressChanged并将下载进度作为参数传递。在下载完成后,我们使用DownloadHandlerAssetBundle从下载的数据中提取AssetBundle,并使用AssetBundle.LoadAsset()函数加载模型,并使用Instantiate()函数在场景中创建一个新实例。
在外部调用DownloadAndLoadAssetBundle时,我们可以传递一个实现了OnProgressChanged委托类型的回调函数,以获取下载进度。例如:
```csharp
ModelLoader loader = new ModelLoader();
StartCoroutine(loader.DownloadAndLoadAssetBundle(url, OnProgressChanged));
```
其中OnProgressChanged是一个回调函数,它将在下载进度更新时被调用。
阅读全文