/// <summary>
        /// カタログの同期
        /// </summary>
        /// <param name="catalog"></param>
        private static void SyncCatalog(AssetBundleCatalog catalog, Dictionary <string, string> deliveryStreamingAssetPathsCatalog)
        {
            var allDeliveryStreamingAssetInfos = AssetBundleUtility.GetAllDeliveryStreamingAssetInfos();

            deliveryStreamingAssetPathsCatalog.Clear();
            foreach (var deliveryStreamingAssetInfo in allDeliveryStreamingAssetInfos)
            {
                deliveryStreamingAssetPathsCatalog.Add(deliveryStreamingAssetInfo.deliveryStreamingAssetNameWithVariant, deliveryStreamingAssetInfo.path);
            }

            var allAssetBundles            = AssetDatabase.GetAllAssetBundleNames();
            var allDeliveryStreamingAssets = allDeliveryStreamingAssetInfos.Select(x => x.deliveryStreamingAssetNameWithVariant);

            allAssetBundles = allAssetBundles.Concat(allDeliveryStreamingAssets).ToArray();
            System.Array.Sort(allAssetBundles);

            var allAssetBundlesWithVariant            = allAssetBundles.Where(x => 0 <= x.IndexOf('.')).ToArray();
            var allDeliveryStreamingAssetsWithVariant = allDeliveryStreamingAssetInfos.Where(x => x.deliveryStreamingAssetName != x.deliveryStreamingAssetNameWithVariant)
                                                        .Select(x => x.deliveryStreamingAssetNameWithVariant);

            allAssetBundlesWithVariant = allAssetBundlesWithVariant.Concat(allDeliveryStreamingAssetsWithVariant).ToArray();
            System.Array.Sort(allAssetBundlesWithVariant);

            catalog.SetAllAssetBundles(allAssetBundles, allAssetBundlesWithVariant);
            var dependencies = new string[0];
            var fileSize     = 100u * 1024u;         //10KiB

            for (int i = 0, iMax = allAssetBundles.Length; i < iMax; ++i)
            {
                catalog.SetDependencies(i, dependencies, dependencies);
                catalog.SetAssetBundleFileSize(i, fileSize);
            }
        }
 /// <summary>
 /// データベースの同期
 /// </summary>
 private void SyncDatabase()
 {
     if (m_DeliveryStreamingAssetPathsCatalog == null)
     {
         if (m_Catalog == null)
         {
             m_Catalog = ScriptableObject.CreateInstance <AssetBundleCatalog>();
         }
         m_DeliveryStreamingAssetPathsCatalog = new Dictionary <string, string>();
         SyncCatalog(m_Catalog, m_DeliveryStreamingAssetPathsCatalog);
         CatalogPostprocess(m_Catalog);
     }
 }
        /// <summary>
        /// カタログポストプロセス
        /// </summary>
        /// <param name="catalog">カタログ</param>
        private static void CatalogPostprocess(AssetBundleCatalog catalog)
        {
            var assetBundleShoshaEditorAssembly = System.AppDomain.CurrentDomain
                                                  .GetAssemblies()
                                                  .Where(x => x.FullName.StartsWith("AssetBundleShosha.Editor,"))
                                                  .FirstOrDefault();

            if (assetBundleShoshaEditorAssembly == null)
            {
                return;
            }
            var assetBundleBuilderType = assetBundleShoshaEditorAssembly.GetType("AssetBundleShosha.Editor.AssetBundleBuilder");

            if (assetBundleBuilderType == null)
            {
                return;
            }
            var catalogPostprocessBindingFlags       = BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.DeclaredOnly;
            var assetBundleBuilderCatalogPostprocess = assetBundleBuilderType.GetMethod("CatalogPostprocess", catalogPostprocessBindingFlags);

            assetBundleBuilderCatalogPostprocess.Invoke(null, new[] { catalog });
        }
        /// <summary>
        /// 暗号化ハッシュ取得
        /// </summary>
        /// <param name="catalog">カタログ</param>
        /// <param name="assetBundleNameWithVariant">バリアント付きアセットバンドル名</param>
        /// <returns>暗号化ハッシュ</returns>
        public static int GetCryptoHash(AssetBundleCatalog catalog, string assetBundleNameWithVariant)
        {
            var result = catalog.GetAssetBundleCryptoHash(assetBundleNameWithVariant);

            return(result);
        }
        /// <summary>
        /// 暗号化確認
        /// </summary>
        /// <param name="catalog">カタログ</param>
        /// <param name="assetBundleNameWithVariant">バリアント付きアセットバンドル名</param>
        /// <returns>true:暗号化, false:平文</returns>
        public static bool IsCrypto(AssetBundleCatalog catalog, string assetBundleNameWithVariant)
        {
            var hash = GetCryptoHash(catalog, assetBundleNameWithVariant);

            return(0 != hash);
        }