Unity3D 动态加载本地/网络GLB模型
生活随笔
收集整理的這篇文章主要介紹了
Unity3D 动态加载本地/网络GLB模型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/// <summary>
/// 加載GLB/GLTF模型
/// </summary>
public class LoadGLB_GLTFUtility :MonoBehaviour
{Action action;public GameObject ObjOfImport;bool isCreate = true;private static LoadGLB_GLTFUtility instance;public static LoadGLB_GLTFUtility Instance{get{if (instance == null){GameObject obj = new GameObject();obj.name = "LoadGLBUtility";instance = obj.AddComponent<LoadGLB_GLTFUtility>();}return instance;}}/// <summary>/// 導入網絡glb資源/// </summary>/// <param name="url">模型路徑</param>/// <param name="action">導入完成事件</param>public void ImportGLB_GLTFAsyncByWed(string url, Action action){StartCoroutine(DownLoadFile(url, action));}/// <summary>/// 導入網絡glb資源/// </summary>/// <param name="url">路徑</param>public void ImportGLBAsyncByWed(string url){StartCoroutine(DownLoadFile(url, null));}/// <summary>/// 下載網絡資源到本地/// </summary>/// <param name="url"></param>/// <returns></returns>IEnumerator DownLoadFile(string url,Action action){yield return new WaitForSeconds(0.5f);string directoryPath = Application.persistentDataPath + "/FileCache";if (!Directory.Exists(directoryPath)){Directory.CreateDirectory(directoryPath);}string downloadFileName = url.Substring(url.LastIndexOf('/') + 1);string localpath = directoryPath + "/" + downloadFileName;Debug.Log(downloadFileName);//如果本地文件已存在 直接加載if (File.Exists(localpath)){ImportGLB_GLTFAsync(localpath, action);yield break;}UnityWebRequest webRequest = UnityWebRequest.Get(url);webRequest.timeout = 60;yield return webRequest.SendWebRequest();if (webRequest.isNetworkError){Debug.Log("Download Error: " + webRequest.error);if (File.Exists(localpath)){File.Delete(localpath);}}else{var file = webRequest.downloadHandler.data;FileStream nFile = new FileStream(localpath, FileMode.Create);nFile.Write(file, 0, file.Length);nFile.Close();ImportGLB_GLTFAsync(localpath, action);}}/// <summary>/// 異步加載 gltf and glb/// </summary>/// <param name="filepath">路徑</param>/// <param name="action">回調函數</param>public void ImportGLB_GLTFAsync(string filepath, Action action){if (!isCreate) return;isCreate = false;UnloadAndDestroy(ObjOfImport);Importer.LoadFromFileAsync(filepath, new ImportSettings(), OnFinishAsync);this.action = action;}/// <summary>///異步加載模型/// </summary>/// <param name="filepath"><路徑/param>public void ImportGLB_GLTFAsync(string filepath){if (!isCreate) return;isCreate = false;UnloadAndDestroy(ObjOfImport);Importer.LoadFromFileAsync(filepath, new ImportSettings(), OnFinishAsync);}/// <summary>/// 完成加載/// </summary>/// <param name="result">加載出來的物體</param>/// <param name="clip">加載的動畫</param>/// <param name="transform"></param>/// <param name="name"></param>void OnFinishAsync(GameObject result, AnimationClip[] clip, Transform loadpos, string sign){ObjOfImport = result;isCreate = true;Debug.Log("Finished importing " + result.name);if (action != null)action();}/// <summary>/// 刪除卸載 所有加載過的模型 清除緩存/// </summary>/// <param name="obj"></param>public void UnloadAndDestroy(GameObject obj){if (obj != null){GameObject.Destroy(obj);}Resources.UnloadUnusedAssets();}}
總結
以上是生活随笔為你收集整理的Unity3D 动态加载本地/网络GLB模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pytorch动态网络以及权重共享
- 下一篇: 5y平台计算机应用测试题,2016电大网