unity UnityWebRequest下载 不继承MonoBehaviour 提示下载进度可以在外面的类调用下载进度
时间: 2024-02-18 20:01:17 浏览: 126
在Unity中,你可以在不继承MonoBehaviour的类中使用UnityWebRequest进行下载,并通过回调函数来获取下载进度。
以下是一个示例代码,展示了如何在普通类中使用UnityWebRequest进行下载,并将下载进度保存在一个变量中,然后在另一个类中获取下载进度:
```csharp
using UnityEngine;
using UnityEngine.Networking;
public class DownloadExample
{
public string downloadUrl; // 下载链接
public string savePath; // 保存路径
private UnityWebRequest downloadRequest;
private float downloadProgress;
// 定义回调函数
public void OnDownloadProgress(float progress)
{
downloadProgress = progress;
}
// 开始下载
public void StartDownload()
{
downloadRequest = UnityWebRequest.Get(downloadUrl);
downloadRequest.downloadHandler = new DownloadHandlerFile(savePath);
// 设置下载进度回调函数
downloadRequest.SendWebRequest();
downloadRequest.downloadProgressDelegate += OnDownloadProgress;
}
// 获取下载进度
public float GetDownloadProgress()
{
return downloadProgress;
}
}
// 在另一个类中调用下载进度
public class ProgressTracker
{
private DownloadExample downloadExample;
public ProgressTracker()
{
downloadExample = new DownloadExample();
downloadExample.StartDownload();
}
public void Update()
{
float progress = downloadExample.GetDownloadProgress();
Debug.Log("Download progress: " + progress);
}
}
```
在上述代码中,我们定义了一个普通类DownloadExample来进行下载,并通过回调函数OnDownloadProgress获取下载进度。在StartDownload函数中,我们设置了下载进度回调函数,并启动了下载请求。
在另一个类ProgressTracker中,我们创建了一个DownloadExample实例并调用它的StartDownload函数来开始下载。在Update函数中,我们可以获取下载进度并将其打印在控制台中。
需要注意的是,由于回调函数是在主线程中执行的,因此在获取下载进度时需要确保线程安全。可以使用锁或其他线程同步机制来保证线程安全。
阅读全文