XRoom_Unity/Assets/Script/ImportModel/AssetBundleLoader.cs

92 lines
3.0 KiB
C#

using UnityEngine;
using System.Collections;
using System.IO;
using UnityEngine.Networking;
using UnityEngine.UI;
using TMPro;
public class AssetBundleLoader : MonoBehaviour
{
[Header("UI Elements")]
public TMP_Text progressText;
[Header("Download Settings")]
public string fbxUrl = "http://yourserver.com/path/to/model.fbx"; // Replace with your actual FBX URL
public string savePath = "Assets/DownloadedModels/model.fbx"; // Path to save the downloaded FBX file
public int maxRetries = 3; // Maximum number of retries
private int currentRetries = 0;
void Start()
{
if (progressText != null)
{
progressText.text = "0%";
progressText.gameObject.SetActive(true);
}
// Start downloading the FBX file automatically
StartCoroutine(DownloadFBXFile());
}
IEnumerator DownloadFBXFile()
{
while (currentRetries < maxRetries)
{
using (UnityWebRequest uwr = UnityWebRequest.Get(fbxUrl))
{
uwr.SendWebRequest();
while (!uwr.isDone)
{
float progress = Mathf.Clamp01(uwr.downloadProgress);
if (progressText != null)
progressText.text = $"{(progress * 100f):0.0}%";
yield return null;
}
if (uwr.result != UnityWebRequest.Result.Success)
{
Debug.LogError("Download failed: " + uwr.error);
// Retry logic
currentRetries++;
if (currentRetries < maxRetries)
{
Debug.Log("Retrying download... Attempt " + currentRetries);
progressText.text = $"Retrying... ({currentRetries}/{maxRetries})";
yield return new WaitForSeconds(2f); // Wait before retrying
}
else
{
Debug.LogError("Max retries reached. Download failed.");
progressText.text = "Download failed!";
}
}
else
{
// Successful download
byte[] downloadedData = uwr.downloadHandler.data;
SaveFBXFile(downloadedData);
if (progressText != null)
progressText.text = "Download complete!";
break; // Exit the loop if download is successful
}
}
}
}
void SaveFBXFile(byte[] data)
{
// Ensure directory exists
string directory = Path.GetDirectoryName(savePath);
if (!Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
// Write the downloaded data to the specified path
File.WriteAllBytes(savePath, data);
Debug.Log("FBX file saved to: " + savePath);
}
}