Exemple #1
0
        public static async Task BuildAssetInfoManifestPackage(string exportPath, string assetBundlePath, string aesKey, string aesIv)
        {
            var assetInfo = AssetInfoManifest.GetManifestAssetInfo();

            var cryptoKey = new AesCryptoStreamKey(aesKey, aesIv);

            var task = CreateBuildTask(exportPath, assetBundlePath, assetInfo, true, cryptoKey);

            await task;
        }
Exemple #2
0
        public static async Task BuildAllAssetBundlePackage(string exportPath, string assetBundlePath, AssetInfo[] assetInfos, AssetInfo[] updatedAssetInfos, string aesKey, string aesIv)
        {
            var isBatchMode = Application.isBatchMode;

            var cryptoKey = new AesCryptoStreamKey(aesKey, aesIv);

            using (new DisableStackTraceScope(LogType.Log))
            {
                var count      = 0;
                var logBuilder = new StringBuilder();

                var chunkedAssetInfos = assetInfos.Chunk(25);

                foreach (var infos in chunkedAssetInfos)
                {
                    var tasks = new List <Task>();

                    foreach (var info in infos)
                    {
                        var assetInfo = info;

                        if (assetInfo == null)
                        {
                            continue;
                        }

                        var createPackage = updatedAssetInfos.Contains(assetInfo);

                        var assetBundleName = assetInfo.AssetBundle.AssetBundleName;

                        var buildTask = CreateBuildTask(exportPath, assetBundlePath, assetInfo, createPackage, cryptoKey);

                        var task = Task.Run(async() =>
                        {
                            await buildTask;

                            if (isBatchMode)
                            {
                                Debug.LogFormat(assetBundleName);
                            }
                            else
                            {
                                lock (logBuilder)
                                {
                                    logBuilder.AppendLine(assetBundleName);

                                    count++;

                                    if (25 < count)
                                    {
                                        Debug.Log(logBuilder.ToString());

                                        logBuilder.Clear();
                                        count = 0;
                                    }
                                }
                            }
                        });

                        if (task != null)
                        {
                            tasks.Add(task);
                        }
                    }

                    await Task.WhenAll(tasks);
                }

                if (!isBatchMode && count != 0)
                {
                    Debug.Log(logBuilder.ToString());
                }
            }
        }
Exemple #3
0
        private static Task CreateBuildTask(string exportPath, string assetBundlePath, AssetInfo assetInfo, bool createPackage, AesCryptoStreamKey cryptoKey)
        {
            if (assetInfo == null)
            {
                return(null);
            }

            var task = Task.Run(async() =>
            {
                try
                {
                    // アセットバンドルファイルパス.
                    var assetBundleFilePath = PathUtility.Combine(assetBundlePath, assetInfo.AssetBundle.AssetBundleName);

                    if (!File.Exists(assetBundleFilePath))
                    {
                        throw new FileNotFoundException(assetBundleFilePath);
                    }

                    // 作成するパッケージファイルのパス.
                    var packageFilePath = Path.ChangeExtension(assetBundleFilePath, AssetBundleManager.PackageExtension);

                    // パッケージを作成.
                    if (!File.Exists(packageFilePath) || createPackage)
                    {
                        await CreatePackage(assetBundleFilePath, packageFilePath, cryptoKey);
                    }

                    // 出力先にパッケージファイルをコピー.
                    await ExportPackage(exportPath, assetBundleFilePath, assetInfo);
                }
                catch (Exception exception)
                {
                    Debug.LogException(exception);
                }
            });

            return(task);
        }
Exemple #4
0
        /// <summary> パッケージファイル化(暗号化). </summary>
        private static async Task CreatePackage(string assetBundleFilePath, string packageFilePath, AesCryptoStreamKey cryptoKey)
        {
            // アセットバンドル読み込み.

            byte[] data = null;

            using (var fileStream = new FileStream(assetBundleFilePath, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                data = new byte[fileStream.Length];

                await fileStream.ReadAsync(data, 0, data.Length);
            }

            // 暗号化・書き込み.

            using (var fileStream = new FileStream(packageFilePath, FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
            {
                using (var aesStream = new SeekableCryptoStream(fileStream, cryptoKey))
                {
                    aesStream.Write(data, 0, data.Length);
                }
            }
        }
Exemple #5
0
 /// <summary>
 /// 暗号化キー設定.
 /// Key,IVがModules.ExternalResource.Editor.ManageConfigのAssetのCryptKeyと一致している必要があります.
 /// </summary>
 /// <param name="key">暗号化Key(32文字)</param>
 /// <param name="iv">暗号化IV(16文字)</param>
 public void SetCryptoKey(string key, string iv)
 {
     cryptoKey = new AesCryptoStreamKey(key, iv);
 }