Beispiel #1
0
    /// <summary>
    /// アセットバンドル情報一覧のダウンロード
    /// </summary>
    /// <returns>コルーチン</returns>
    public IEnumerator DownloadAssetBundleInfoList()
    {
        var platformName = PlatformNameManager.GetPlatformName(Application.platform);
        var url          = string.Format("{0}/{1}/{2}", AssetBundleManagerConfig.ServerURL, platformName, AssetBundleManagerConfig.AssetBundleInfoListFileName);
        var webRequest   = UnityWebRequest.Get(url);

        webRequest.timeout = 300;

#if UNITY_2017_2_OR_NEWER
        yield return(webRequest.SendWebRequest());
#else
        yield return(webRequest.Send());
#endif

        while (!webRequest.isDone)
        {
            if (webRequest.isNetworkError || webRequest.isHttpError)
            {
                Debug.LogError("AssetBundleInfoList Download Error.");
                webRequest.Dispose();
                yield break;
            }
            yield return(null);
        }

        if (webRequest.responseCode != 200)
        {
            Debug.LogErrorFormat("Respose Error : Code = {0}", webRequest.responseCode);
            yield break;
        }

        this.assetBundleInfoList = JsonUtility.FromJson <AssetBundleInfoList>(webRequest.downloadHandler.text);
        this.assetBundleInfoList.CreateDictionary();
        webRequest.Dispose();
    }
    /// <summary>
    /// アセットバンドルのダウンロード
    /// </summary>
    /// <returns>コルーチン</returns>
    /// <param name="downloadRequest">ダウンロードリクエスト</param>
    public IEnumerator LoadFromCacheOrDownloadAssetBundle(AssetBundleDownloadRequest downloadRequest)
    {
        while (!Caching.ready)
        {
            yield return(null);
        }

        var platformName = PlatformNameManager.GetPlatformName(Application.platform);

        foreach (var assetBundleInfo in downloadRequest.AssetBundleInfos)
        {
            var assetBundleName = assetBundleInfo.AssetBundleName;
            var url             = string.Format("{0}/{1}/{2}", AssetBundleManagerConfig.ServerURL, platformName, assetBundleName);

            var webRequest = UnityWebRequest.Get(url);
            var hash       = UnityEngine.Hash128.Parse(assetBundleInfo.HashString);
            webRequest.downloadHandler = new DownloadHandlerAssetBundle(url, hash, assetBundleInfo.Crc);
            webRequest.timeout         = 300;
            webRequest.SetRequestHeader("Cache-Control", "no-cache");

#if UNITY_2017_2_OR_NEWER
            yield return(webRequest.SendWebRequest());
#else
            yield return(webRequest.Send());
#endif

            while (!webRequest.isDone)
            {
                if (webRequest.isNetworkError || webRequest.isHttpError)
                {
                    if (downloadRequest.OnError != null)
                    {
                        downloadRequest.OnError.Invoke("AssetBundleInfoList Download Error.");
                    }
                    this.DownloadRequestErrorEvent.Invoke(downloadRequest);
                    webRequest.Dispose();
                    yield break;
                }
                Debug.LogFormat("[{0}] Download Progress. : {1}%", assetBundleName, (webRequest.downloadProgress * 100));
                yield return(null);
            }


            var handler     = webRequest.downloadHandler as DownloadHandlerAssetBundle;
            var assetBundle = handler.assetBundle;

            this.AssetBundleDownloadedEvent.Invoke(assetBundle);
            webRequest.downloadHandler.Dispose();
        }


        if (downloadRequest.OnCompleted != null)
        {
            downloadRequest.OnCompleted.Invoke();
        }
        this.DownloadRequestCompletedEvent.Invoke(downloadRequest);
    }
    public static void BuildAssetBundles()
    {
        AssetDatabase.RemoveUnusedAssetBundleNames();
        var assetBundleNames  = AssetDatabase.GetAllAssetBundleNames();
        var assetBundleBuilds = AssetBundleBuilder.GenerateAssetBundleBuilds(assetBundleNames);

        var currentBuildTarget = EditorUserBuildSettings.activeBuildTarget;
        var platformName       = PlatformNameManager.GetPlatformName(currentBuildTarget);
        var outputPath         = string.Format("AssetBundles/{0}", platformName);

        AssetBundleBuilder.CheckAndCreateDirectory(outputPath);

        var assetBundleManifest = BuildPipeline.BuildAssetBundles(outputPath, assetBundleBuilds, BuildAssetBundleOptions.ChunkBasedCompression, currentBuildTarget);

        AssetBundleBuilder.SaveAssetBundleInfoListFile(outputPath, assetBundleManifest);
    }