Пример #1
0
        private static void SetBundles(string dir)
        {
            List <string> paths = EditorResHelper.GetPrefabsAndScenes(dir);

            foreach (string path in paths)
            {
                string path1 = path.Replace('\\', '/');
                Object go    = AssetDatabase.LoadAssetAtPath <Object>(path1);

                SetBundle(path1, go.name);
            }
        }
Пример #2
0
    // 分析共享资源
    private void SetShareBundleAndAtlas(string dir)
    {
        this.dictionary.Clear();
        List <string> paths = EditorResHelper.GetPrefabsAndScenes(dir);

        foreach (string path in paths)
        {
            string path1 = path.Replace('\\', '/');
            Object go    = AssetDatabase.LoadAssetAtPath <Object>(path1);

            SetBundle(path1, go.name);

            List <string> pathes = CollectDependencies(path1);
            foreach (string pt in pathes)
            {
                if (pt == path1)
                {
                    continue;
                }

                // 不存在则记录下来
                if (!this.dictionary.ContainsKey(pt))
                {
                    // 如果已经设置了包
                    if (GetBundleName(pt) != "")
                    {
                        continue;
                    }
                    Debug.Log($"{path1}----{pt}");
                    BundleInfo bundleInfo = new BundleInfo();
                    bundleInfo.ParentPaths.Add(path1);
                    this.dictionary.Add(pt, bundleInfo);

                    SetAtlas(pt, go.name);

                    continue;
                }

                // 依赖的父亲不一样
                BundleInfo info = this.dictionary[pt];
                if (info.ParentPaths.Contains(path1))
                {
                    continue;
                }
                info.ParentPaths.Add(path1);

                DirectoryInfo dirInfo = new DirectoryInfo(dir);
                string        dirName = dirInfo.Name;

                SetBundleAndAtlas(pt, $"{dirName}-share", true);
            }
        }
    }
Пример #3
0
    private static void SetNoAtlas(string dir)
    {
        List <string> paths = EditorResHelper.GetPrefabsAndScenes(dir);

        foreach (string path in paths)
        {
            List <string> pathes = CollectDependencies(path);

            foreach (string pt in pathes)
            {
                if (pt == path)
                {
                    continue;
                }

                SetAtlas(pt, "", true);
            }
        }
    }
Пример #4
0
        // 会将目录下的每个prefab引用的资源强制打成一个包,不分析共享资源
        private static void SetIndependentBundleAndAtlas(string dir)
        {
            List <string> paths = EditorResHelper.GetPrefabsAndScenes(dir);

            foreach (string path in paths)
            {
                string path1 = path.Replace('\\', '/');
                Object go    = AssetDatabase.LoadAssetAtPath <Object>(path1);

                AssetImporter importer = AssetImporter.GetAtPath(path1);
                if (importer == null || go == null)
                {
                    Debug.LogError("error: " + path1);

                    continue;
                }
                importer.assetBundleName = $"{Path.GetDirectoryName(path1)}/{go.name}.unity3d";

                List <string> pathes = CollectDependencies(path1);

                foreach (string pt in pathes)
                {
                    string extension = Path.GetExtension(pt);
                    if (extension == ".cs" || extension == ".dll")
                    {
                        continue;
                    }
                    if (pt.Contains("Resources"))
                    {
                        continue;
                    }
                    if (pt == path1)
                    {
                        continue;
                    }

                    SetBundleAndAtlas(pt, go.name);
                }
            }
        }
Пример #5
0
    private static void SetBundleAndAtlasWithoutShare(string dir)
    {
        List <string> paths = EditorResHelper.GetPrefabsAndScenes(dir);

        foreach (string path in paths)
        {
            string path1 = path.Replace('\\', '/');
            Object go    = AssetDatabase.LoadAssetAtPath <Object>(path1);

            SetBundle(path1, go.name, true);

            //List<string> pathes = CollectDependencies(path1);
            //foreach (string pt in pathes)
            //{
            //	if (pt == path1)
            //	{
            //		continue;
            //	}
            //
            //	SetBundleAndAtlas(pt, go.name);
            //}
        }
    }
Пример #6
0
        private void SetOneDirPackingTagAndAssetBundle(string dir)
        {
            this.dictionary.Clear();
            List <string> paths = EditorResHelper.GetPrefabsAndScenes(dir);

            foreach (string path in paths)
            {
                string        path1    = path.Replace('\\', '/');
                Object        go       = AssetDatabase.LoadAssetAtPath <Object>(path1);
                AssetImporter importer = AssetImporter.GetAtPath(path1);
                if (importer == null || go == null)
                {
                    Log.Error("error: " + path1);
                    continue;
                }
                importer.assetBundleName = $"{go.name}.unity3d";

                List <string> pathes = CollectDependencies(path1);
                foreach (string pt in pathes)
                {
                    string extension = Path.GetExtension(pt);
                    if (extension == ".cs" || extension == ".dll")
                    {
                        continue;
                    }
                    if (pt.Contains("Resources"))
                    {
                        continue;
                    }
                    if (pt == path1)
                    {
                        continue;
                    }

                    // 不存在则记录下来
                    if (!this.dictionary.ContainsKey(pt))
                    {
                        Log.Info($"{path1}----{pt}");
                        BundleInfo bundleInfo = new BundleInfo();
                        bundleInfo.ParentPaths.Add(path1);
                        this.dictionary.Add(pt, bundleInfo);

                        AssetImporter   importer3        = AssetImporter.GetAtPath(pt);
                        TextureImporter textureImporter3 = importer3 as TextureImporter;
                        if (textureImporter3 != null)
                        {
                            textureImporter3.spritePackingTag = go.name;
                        }

                        continue;
                    }

                    // 依赖的父亲不一样
                    BundleInfo info = this.dictionary[pt];
                    if (info.ParentPaths.Contains(path1))
                    {
                        continue;
                    }
                    info.ParentPaths.Add(path1);

                    AssetImporter importer2 = AssetImporter.GetAtPath(pt);
                    if (importer2 == null)
                    {
                        continue;
                    }

                    if (importer2.assetBundleName != "")
                    {
                        continue;
                    }

                    DirectoryInfo dirInfo = new DirectoryInfo(dir);
                    string        dirName = dirInfo.Name;
                    importer2.assetBundleName = $"{dirName}-share.unity3d";
                    Log.Warning($"{importer2.assetBundleName}: {pt} {info.ParentPaths.ListToString()}");

                    TextureImporter textureImporter = importer2 as TextureImporter;
                    if (textureImporter != null)
                    {
                        textureImporter.spritePackingTag = $"{dirName}-share";
                    }
                }
            }
        }