/// <summary> /// 读取字节 /// 1.File.ReadAllBytes(path) /// 2.WWW /// </summary> /// <param name="path">路径</param> /// <param name="streamMethod">形式</param> /// <param name="cotiner">字节容器</param> /// <returns></returns> private IEnumerator ExecuteLoadBundleAsync(string path, BundleLoadMethod streamMethod, BundleContainer container) { // Debug.Log(streamMethod); switch (streamMethod) { case BundleLoadMethod.WWW_LoadBundleAndBytes: { var webBbLoadRequest = UnityWebRequest.Get(path); yield return(webBbLoadRequest.SendWebRequest()); container.bytes = webBbLoadRequest.downloadHandler.data; var bundleCreationRequest = AssetBundle.LoadFromMemoryAsync(container.bytes); yield return(bundleCreationRequest); container.assetBundle = bundleCreationRequest.assetBundle; break; } case BundleLoadMethod.WWW_LoadBytes: { var webBytesLoadRequest = UnityWebRequest.Get(path); yield return(webBytesLoadRequest.SendWebRequest()); container.bytes = webBytesLoadRequest.downloadHandler.data; break; } case BundleLoadMethod.WWW_LoadBundle: { var webBundleRequest = UnityWebRequestAssetBundle.GetAssetBundle(path); yield return(webBundleRequest.SendWebRequest()); container.assetBundle = DownloadHandlerAssetBundle.GetContent(webBundleRequest); break; } case BundleLoadMethod.File_LocalBundle: { var fileBundleRequest = AssetBundle.LoadFromFileAsync(path); yield return(fileBundleRequest); container.assetBundle = fileBundleRequest.assetBundle; break; } case BundleLoadMethod.File_StreamingBundle: { var fileBundleRequest = AssetBundle.LoadFromFileAsync(path); yield return(fileBundleRequest); container.assetBundle = fileBundleRequest.assetBundle; break; } case BundleLoadMethod.File_Bytes: break; default: yield break; } }
/// <summary> /// 以字节流的形式载入资源 /// </summary> private IEnumerator LoadBundleAsync(string bundleName, string bundleVersion, BundleLoadMethod method, bool saveBundle = false) { string bundlePath; var container = new BundleContainer(); switch (method) { case BundleLoadMethod.File_StreamingBundle: bundlePath = @Path.Combine(Application.streamingAssetsPath, bundleName); break; case BundleLoadMethod.File_LocalBundle: bundlePath = pather.GetLocalBundlePath(bundleName, bundleVersion); break; default: bundlePath = pather.GetServeBundlePath(bundleName, bundleVersion); break; } yield return(ExecuteLoadBundleAsync(bundlePath, method, container)); onLoadEveryComplete(container.assetBundle); if (saveBundle && container.bytes != null) { var filePath = pather.GetLocalBundlePath(bundleName, bundleVersion); FileUtil.CreateFile(filePath, container.bytes); } }