示例#1
0
    public static void ClearBundlesMenu()
    {
        AssetDatabase.StartAssetEditing();

        FramesDirectoriesListingFunc listFunc = (frameDirectory, progress, frameId, level, gender, language, resolution) =>
        {
            var files = Directory.GetFiles(frameDirectory);
            foreach (var file in files)
            {
                bool cancelled = EditorUtility.DisplayCancelableProgressBar("Clear bundles", frameDirectory, progress);

                AssetImporter imp = AssetImporter.GetAtPath(file);
                if (imp == null)
                {
                    continue;
                }

                imp.assetBundleName = "";

                if (cancelled)
                {
                    throw new Exception("Stopped by user");
                }
            }
        };

        ListFramesDirectories(dataPath + framesPath, listFunc);

        AssetDatabase.StopAssetEditing();
        EditorUtility.ClearProgressBar();
    }
示例#2
0
    public static void ClearFrames(string directory)
    {
        try
        {
            FramesDirectoriesListingFunc listFunc = (frameDirectory, progress, frameId, level, gender, language, resolution) =>
            {
                bool cancelled = EditorUtility.DisplayCancelableProgressBar("Clearing frames", frameDirectory, progress);

                var files = Directory.GetFiles(frameDirectory);
                foreach (var file in files)
                {
                    if (file.EndsWith(".prefab") || file.EndsWith(".anim") || file.EndsWith(".controller") || file.Contains("frame_"))
                    {
                        AssetDatabase.DeleteAsset(file);
                    }
                }

                if (cancelled)
                {
                    throw new Exception("Stopped by user");
                }
            };

            ListFramesDirectories(directory, listFunc);
        }
        catch (Exception ex)
        {
            Debug.LogError("Frames clearing failed: " + ex.Message);
        }

        EditorUtility.ClearProgressBar();
    }
示例#3
0
    private static void ListFramesDirectories(string directory, FramesDirectoriesListingFunc listFunction)
    {
        var framesDirectories = Directory.GetDirectories(directory);

        for (int i = 0; i < framesDirectories.Length; i++)
        {
            float  frameDirectoryProgressStep = 1.0f / (float)framesDirectories.Length;
            float  frameDirectoryProgress     = (float)i * frameDirectoryProgressStep;
            string frameId = Path.GetFileNameWithoutExtension(framesDirectories[i]);

            var levelsDirectories = Directory.GetDirectories(framesDirectories[i]);
            for (int j = 0; j < levelsDirectories.Length; j++)
            {
                float  levelDirectoryProgressStep = 1.0f / (float)levelsDirectories.Length * frameDirectoryProgressStep;
                float  levelDirectoryProgress     = (float)j * levelDirectoryProgressStep + frameDirectoryProgress;
                string level = Path.GetFileNameWithoutExtension(levelsDirectories[j]);

                var genderDirectories = Directory.GetDirectories(levelsDirectories[j]);
                for (int k = 0; k < genderDirectories.Length; k++)
                {
                    float  genderDirectoryProgressStep = 1.0f / (float)genderDirectories.Length * levelDirectoryProgressStep;
                    float  genderDirectoryProgress     = (float)k * genderDirectoryProgressStep + levelDirectoryProgress;
                    string gender = Path.GetFileNameWithoutExtension(genderDirectories[k]);

                    var languageDirectories = Directory.GetDirectories(genderDirectories[k]);
                    for (int l = 0; l < languageDirectories.Length; l++)
                    {
                        float  languageDirectoryProgressStep = 1.0f / (float)languageDirectories.Length * genderDirectoryProgressStep;
                        float  languageDirectoryProgress     = (float)l * languageDirectoryProgressStep + genderDirectoryProgress;
                        string language = Path.GetFileNameWithoutExtension(languageDirectories[l]);

                        var resolutionDirectories = Directory.GetDirectories(languageDirectories[l]);
                        for (int m = 0; m < resolutionDirectories.Length; m++)
                        {
                            float  resolutionDirectoryProgressStep = 1.0f / (float)resolutionDirectories.Length * languageDirectoryProgressStep;
                            float  resolutionDirectoryProgress     = (float)m * resolutionDirectoryProgressStep + languageDirectoryProgress;
                            string resolution = Path.GetFileNameWithoutExtension(resolutionDirectories[m]);

                            listFunction(resolutionDirectories[m], resolutionDirectoryProgress, frameId, level, gender, language, resolution);
                        }
                    }
                }
            }
        }
    }
示例#4
0
    public static void CopyFramesAssetsFromStatic(string staticPath, string dataPath)
    {
        AssetDatabase.StartAssetEditing();

        try
        {
            FramesDirectoriesListingFunc listFunc = (frameDirectory, progress, frameId, level, gender, language, resolution) =>
            {
                bool cancelled = EditorUtility.DisplayCancelableProgressBar("Copying frames resources", frameDirectory, progress);

                string frameDataPath = dataPath + "/" + frameId + "/" + level + "/" + gender + "/" + language + "/" + resolution;

                if (Directory.Exists(frameDataPath))
                {
                    return;
                }

                Directory.CreateDirectory(frameDataPath);

                var files = Directory.GetFiles(frameDirectory);
                foreach (var file in files)
                {
                    File.Copy(file, frameDataPath + "/" + Path.GetFileName(file), true);
                }

                if (cancelled)
                {
                    throw new Exception("Stopped by user");
                }
            };

            ListFramesDirectories(staticPath, listFunc);
        }
        catch (Exception ex)
        {
            Debug.LogError("Frames resources copying failed: " + ex.Message);
        }

        EditorUtility.ClearProgressBar();
        AssetDatabase.StopAssetEditing();
        AssetDatabase.Refresh();
    }
示例#5
0
    private static void SetFramesTexturesPlatformSettings(string directory, TextureImporterPlatformSettings settings)
    {
        AssetDatabase.StartAssetEditing();

        FramesDirectoriesListingFunc listFunc = (frameDirectory, progress, frameId, level, gender, language, resolution) =>
        {
            string frameDataPath = dataPath + "/" + frameId + "/" + level + "/" + gender + "/" + language + "/" + resolution;

            var files = Directory.GetFiles(frameDirectory);
            foreach (var file in files)
            {
                var importer = AssetImporter.GetAtPath(file) as TextureImporter;

                if (importer == null)
                {
                    continue;
                }

                bool cancelled = EditorUtility.DisplayCancelableProgressBar("Setting texture format: " + settings.format.ToString(), file, progress);

                var currSettings = importer.GetPlatformTextureSettings(settings.name);

                if (currSettings.format == settings.format && currSettings.maxTextureSize == settings.maxTextureSize)
                {
                    continue;
                }

                importer.SetPlatformTextureSettings(settings);

                if (cancelled)
                {
                    throw new Exception("Stopped by user");
                }
            }
        };

        ListFramesDirectories(directory, listFunc);

        AssetDatabase.StopAssetEditing();
    }
示例#6
0
    public static void RebuildFrames(bool forcible, string directory)
    {
        AssetDatabase.StartAssetEditing();

        if (forcible)
        {
            ClearFrames(directory);
        }

        try
        {
            FramesDirectoriesListingFunc listFunc = (frameDirectory, progress, frameId, level, gender, language, resolution) =>
            {
                bool cancelled = EditorUtility.DisplayCancelableProgressBar("Rebuilding frames", frameDirectory, progress);

                if (!File.Exists(frameDirectory + "/" + framePrefabName))
                {
                    GenerateFramePrefab(frameDirectory, frameId, level, gender, language, resolution);
                }

                if (cancelled)
                {
                    throw new Exception("Stopped by user");
                }
            };

            ListFramesDirectories(directory, listFunc);
        }
        catch (Exception ex)
        {
            Debug.LogError("Frames rebuild failed: " + ex.Message);
        }

        EditorUtility.ClearProgressBar();
        AssetDatabase.StopAssetEditing();
        AssetDatabase.Refresh();
    }
示例#7
0
    public static void RebuildFramesFast()
    {
        FramesDirectoriesListingFunc listFunc = (frameDirectory, progress, frameId, level, gender, language, resolution) =>
        {
            bool cancelled = EditorUtility.DisplayCancelableProgressBar("Rebuilding frames", frameDirectory, progress);
            Debug.Log("------ Frame:" + frameDirectory);

            AssetDatabase.StartAssetEditing();

            // Copy files
            if (!Directory.Exists(dataPath))
            {
                Directory.CreateDirectory(dataPath);
            }

            var files = Directory.GetFiles(frameDirectory);
            foreach (var file in files)
            {
                File.Copy(file, dataPath + "/" + Path.GetFileName(file));
            }

            AssetDatabase.StopAssetEditing();
            AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport);
            AssetDatabase.StartAssetEditing();

            Debug.Log("Files copied");

            // Build prefab
            GenerateFramePrefab(dataPath, frameId, level, gender, language, resolution);

            AssetDatabase.StopAssetEditing();
            AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport);
            AssetDatabase.StartAssetEditing();

            Debug.Log("Prefab generated");

            // Set bundle
            string bundleName = "frame_" + frameId + "_" + level + "_" + gender + "_" + language + "_" + resolution;
            files = Directory.GetFiles(dataPath);
            foreach (var file in files)
            {
                AssetImporter imp = AssetImporter.GetAtPath(file);

                if (imp == null)
                {
                    continue;
                }

                imp.assetBundleName = bundleName;
            }

            AssetDatabase.SaveAssets();
            AssetDatabase.StopAssetEditing();
            AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport);

            Debug.Log("Setted bundle");

            string bundlesPath = assetBundlesPath + "/Android/";
            if (!Directory.Exists(bundlesPath))
            {
                Directory.CreateDirectory(bundlesPath);
            }

            var options  = BuildAssetBundleOptions.None; // | BuildAssetBundleOptions.ForceRebuildAssetBundle;
            var manifest = BuildPipeline.BuildAssetBundles(assetBundlesPath + "/Android/", options, BuildTarget.Android);

            Debug.Log("Created bundle");

            foreach (var file in files)
            {
                File.Delete(file);
            }

            Debug.Log("Removed files");

            File.Copy(bundlesPath + bundleName, staticResourcesPath + framesBundlesPath + "/" + bundleName);
            Directory.Delete(bundlesPath, true);

            AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport);

            Debug.Log("Bundle copied");

            if (cancelled)
            {
                throw new Exception("Stopped by user");
            }
        };

        try
        {
            ListFramesDirectories(staticResourcesPath + framesPath, listFunc);
        }
        catch (Exception ex)
        {
            //AssetDatabase.StopAssetEditing();
            EditorUtility.ClearProgressBar();
            Debug.LogError("Frames rebuild failed: " + ex.Message);
        }
    }
示例#8
0
    private static void BuildAndroidAssetBundles()
    {
        Dictionary <string, TextureImporterFormat> formats = new Dictionary <string, TextureImporterFormat>()
        {
            { "PVR", TextureImporterFormat.PVRTC_RGBA4 },
            { "DXT", TextureImporterFormat.DXT5 }
        };

        foreach (var kv in formats)
        {
            TextureImporterPlatformSettings textureSettings = new TextureImporterPlatformSettings();
            textureSettings.maxTextureSize = 2048;
            textureSettings.name           = "Android";
            textureSettings.format         = kv.Value;

            //SetFramesTexturesPlatformSettings(dataPath + framesPath, textureSettings);

            Debug.Log("Building android asset bundles for " + kv.Key);

            string assetsBundlesPath = assetBundlesPath + "/Android/" + kv.Key;
            if (!Directory.Exists(assetsBundlesPath))
            {
                Directory.CreateDirectory(assetsBundlesPath);
            }

            //             var options = BuildAssetBundleOptions.ChunkBasedCompression | BuildAssetBundleOptions.ForceRebuildAssetBundle;
            //             var manifest = BuildPipeline.BuildAssetBundles(assetBundlesPath + "/Android/" + kv.Key, options, BuildTarget.Android);
            //
            FramesDirectoriesListingFunc listFunc = (frameDirectory, progress, frameId, level, gender, language, resolution) =>
            {
                bool cancelled = EditorUtility.DisplayCancelableProgressBar("Building bundle", frameDirectory, progress);

                var files = Directory.GetFiles(frameDirectory);
                foreach (var file in files)
                {
                    AssetImporter imp = AssetImporter.GetAtPath(file);

                    if (imp == null)
                    {
                        continue;
                    }

                    imp.assetBundleName = "frames/" + frameId + "/" + level + "/" + gender + "/" + language + "/" + resolution;
                }

                var options  = BuildAssetBundleOptions.ChunkBasedCompression | BuildAssetBundleOptions.ForceRebuildAssetBundle;
                var manifest = BuildPipeline.BuildAssetBundles(assetBundlesPath + "/Android/" + kv.Key, options, BuildTarget.Android);

                foreach (var file in files)
                {
                    AssetImporter imp = AssetImporter.GetAtPath(file);
                    imp.assetBundleName = "";
                }

                if (cancelled)
                {
                    throw new Exception("Stopped by user");
                }
            };

            ListFramesDirectories(dataPath + framesPath, listFunc);
        }
    }