Exemplo n.º 1
0
        public static bool CopyToStreamingAssets(string platform, ResourceEditorTargetCopyOptions copyOptions,
                                                 ConfigDataConfigurator configDataConfigurator, AssetBundleConfigurator assetBundleConfigurator)
        {
            var configData = configDataConfigurator.LoadConfigData(platform);

            if (configData == null)
            {
                return(false);
            }

            // options
            var rootDirectory = ResourceStreamingLocation.FullRootPath;

            if (copyOptions.ClearFolders)
            {
                var platformRootDirectory = Path.Combine(rootDirectory, platform);
                ResourceEditorHelper.ClearDirectory(platformRootDirectory);
            }
            if (copyOptions.ClearOtherPlatforms)
            {
                DeleteOtherPlatformDirectory(ResourceStreamingLocation.FullRootPath, platform);
            }

            // copy config
            var result = configDataConfigurator.CopyConfigToTarget(platform);

            // config asset bundles
            var locationDatas = configData.LocationDatas;

            result &= assetBundleConfigurator.CopyAssetBundlesToStreamingTarget(locationDatas, platform);

            return(result);
        }
        private void MoveAssetBundleToVirtualLocations(List <LocationData> locationDatas, string originDirectory, string targetPlatform, bool clearFolders)
        {
            var virtualStreamingPath = ResourceStreamingLocation.GetVirtualAssetBundleFullRootPath(targetPlatform);
            var virtualServerPath    = ResourceServerLocation.GetVirtualAssetBundleFullRootPath(targetPlatform);
            var virtualOdrPath       = ResourceODRLocation.VirtualFullRootPath;

            if (clearFolders)
            {
                ResourceEditorHelper.ClearDirectory(virtualStreamingPath);
                ResourceEditorHelper.ClearDirectory(virtualServerPath);
                if (targetPlatform == ResourceSettings.PLATFORM_DIRECTORY_IOS)
                {
                    ResourceEditorHelper.ClearDirectory(virtualOdrPath);
                }
            }

            foreach (var locationData in locationDatas)
            {
                var targetDirectory = string.Empty;

                switch (locationData.Location)
                {
                case LocationType.Streaming:
                    targetDirectory = virtualStreamingPath;
                    break;

                case LocationType.Server:
                    targetDirectory = virtualServerPath;
                    break;

                case LocationType.ODR:
                    targetDirectory = Path.Combine(virtualOdrPath, locationData.Id);
                    break;
                }

                if (string.IsNullOrEmpty(targetDirectory))
                {
                    continue;
                }

                if (!Directory.Exists(targetDirectory))
                {
                    Directory.CreateDirectory(targetDirectory);
                }

                foreach (var assetBundleData in locationData.AssetBundleDatas)
                {
                    MoveAssetBundle(assetBundleData.Id, originDirectory, targetDirectory);
                }
            }
        }
        public bool BuildAssetBundles(List <LocationData> locationDatas, string targetPlatform, ResourceEditorAssetBundleBuildOptions buildOptions)
        {
            var outputPath = ResourceOutputLocation.GetAssetBundleFullRootPath(targetPlatform);

            var options = BuildAssetBundleOptions.None;

            switch (buildOptions.CompressOption)
            {
            case CompressOption.Uncompressed:
                options |= BuildAssetBundleOptions.UncompressedAssetBundle;
                break;

            case CompressOption.ChunkBasedLZ4:
                options |= BuildAssetBundleOptions.ChunkBasedCompression;
                break;
            }

            if (!Directory.Exists(outputPath))
            {
                Directory.CreateDirectory(outputPath);
            }

            if (buildOptions.ClearFolders)
            {
                ResourceEditorHelper.ClearDirectory(outputPath);
            }

            var buildManifest = BuildPipeline.BuildAssetBundles(outputPath, options, buildOptions.BuildTarget);

            if (buildManifest == null)
            {
                return(false);
            }

            MoveAssetBundleToVirtualLocations(locationDatas, outputPath, targetPlatform, buildOptions.ClearFolders);
            return(true);
        }