Beispiel #1
0
    /// <summary>
    /// 从项目文件夹下获取所有的prefab
    /// </summary>
    /// <param name="dir">指定的文件夹目录,fullname</param>
    /// <returns></returns>
    public static GameObject[] GetPrefabListUsingFileSys(string dir)
    {
        if (dir == null)
        {
            return(null);
        }
        if (!BobUtils.IsDirectory(dir))
        {
            BobUtils.ShowErrorMessage("请提供一个文件夹地址");
            return(null);
        }
        List <GameObject> prefabList = new List <GameObject>();
        DirectoryInfo     dirRoot    = new DirectoryInfo(dir);

        FileInfo[] allPrefabFiles = dirRoot.GetFiles("*.prefab", SearchOption.AllDirectories);
        string     fullname       = "";

        for (int i = 0; i < allPrefabFiles.Length; i++)
        {
            fullname = allPrefabFiles[i].FullName;
            fullname = BobUtils.GetRelativePath(fullname);
            BobUtils.DisplayProgressBar(i, allPrefabFiles.Length, "收集prefab信息", fullname);
            GameObject obj = (AssetDatabase.LoadAssetAtPath(fullname, typeof(Object))) as GameObject;
            if (obj == null)
            {
                continue;
            }
            prefabList.Add(obj);
        }
        BobUtils.ClearProgressBar();
        return(prefabList.ToArray());
    }
 /// <summary>
 /// 添加一组文件路径
 /// </summary>
 /// <param name="filepaths"></param>
 private void AddFileItems(string[] filepaths)
 {
     for (int i = 0; i < filepaths.Length; ++i)
     {
         AddFileItems(filepaths[i]);
     }
     BobUtils.ClearProgressBar();
 }
Beispiel #3
0
    /// <summary>
    /// 搜集项目中的atlas以及贴图资源显示在文件列表中
    /// </summary>
    public static void CollectAtlas()
    {
        string baseDir = Application.dataPath.Substring(0, Application.dataPath.IndexOf("Assets")) + "Assets/MLDJ";

        GameObject[]      prefabs     = BobShrinker.GetPrefabListUsingFileSys(baseDir);
        List <GameObject> prefabsList = new List <GameObject>(prefabs);

        GameObject[] atlaslist = BobShrinker.GetUIAtlasListFromPrefabList(prefabs);
        for (int i = 0; i < atlaslist.Length; i++)
        {
            BobUtils.DisplayProgressBar(i, atlaslist.Length, "搜集UIAtlas", atlaslist[i].name);
            string atlaspath = AssetDatabase.GetAssetPath(atlaslist[i]);
            if (!BobShrinker.db.ContainsPath(atlaspath))
            {
                AtlasProperty originalAtlasProp = BobShrinker.GetAtlasProperty(atlaslist[i].GetComponent <UIAtlas>(), true);
                BobShrinker.db.SaveAtlasData(atlaspath, originalAtlasProp, originalAtlasProp);
            }
            prefabsList.Remove(atlaslist[i].gameObject);
        }

        BobUtils.ClearProgressBar();
        Object[] dependencies = EditorUtility.CollectDependencies(prefabsList.ToArray());
        for (int i = 0; i < dependencies.Length; i++)
        {
            if (dependencies[i] is Texture2D)
            {
                BobUtils.DisplayProgressBar(i, dependencies.Length, "搜集Textures", dependencies[i].name);
                string texturePath = AssetDatabase.GetAssetPath(dependencies[i]);
                if (!BobShrinker.db.ContainsPath(texturePath))
                {
                    TextureImporter ti = TextureImporter.GetAtPath(texturePath) as TextureImporter;
                    if (ti == null)
                    {
                        Debug.LogError(texturePath);
                        continue;
                    }
                    int maxTextSize          = 0;
                    TextureImporterFormat tf = new TextureImporterFormat();
                    bool ret = ti.GetPlatformTextureSettings("WP8", out maxTextSize, out tf);//获取WP8的平台设置
                    if (ret == false)
                    {
                        maxTextSize = ti.maxTextureSize;
                        ti.SetPlatformTextureSettings("WP8", maxTextSize, ti.textureFormat); //若没有设置WP8平台,则用default的设置来设置
                    }
                    //备份原始属性
                    TextureProperty originalTextureProp = new TextureProperty(maxTextSize, ti.mipmapEnabled);
                    originalTextureProp.isOriginal = true;
                    BobShrinker.db.SaveTextureData(texturePath, originalTextureProp, originalTextureProp);
                }
            }
        }
        BobUtils.ClearProgressBar();
    }
    /// <summary>
    /// 添加单个文件路径
    /// </summary>
    /// <param name="filepath"></param>
    private void AddFileItems(string filepath)
    {
        filepath = filepath.Replace('\\', '/');
        Object obj = AssetDatabase.LoadAssetAtPath(filepath, typeof(UnityEngine.Object));

        if (obj == null)
        {
            return;
        }

        if (!System.IO.File.Exists(filepath) && System.IO.Directory.Exists(filepath))
        {///如果是目录,则遍历其中的所有文件
            string[] files = System.IO.Directory.GetFiles(filepath, "*.*", System.IO.SearchOption.AllDirectories);
            for (int i = 0; i < files.Length; ++i)
            {
                AddFileItems(files[i]);
            }
            return;
        }
        if (obj is Texture)
        {
            if (BobShrinker.db.mTexturePaths.Contains(filepath))
            {
                return;
            }
            else
            {
                TextureImporter ti = TextureImporter.GetAtPath(filepath) as TextureImporter;
                if (ti == null)
                {
                    return;
                }
                BobUtils.DisplayProgressBar(1, 1, "添加文件", filepath);
                int maxTextSize          = 0;
                TextureImporterFormat tf = new TextureImporterFormat();
                bool ret = ti.GetPlatformTextureSettings("WP8", out maxTextSize, out tf);//获取WP8的平台设置
                if (ret == false)
                {
                    maxTextSize = ti.maxTextureSize;
                    ti.SetPlatformTextureSettings("WP8", maxTextSize, ti.textureFormat); //若没有设置WP8平台,则用default的设置来设置
                }
                //备份原始属性
                TextureProperty originalTextureProp = new TextureProperty(maxTextSize, ti.mipmapEnabled);
                originalTextureProp.isOriginal = true;
                BobShrinker.db.SaveTextureData(filepath, originalTextureProp, originalTextureProp);
            }
        }
        if (obj is GameObject)
        {
            GameObject go      = obj as GameObject;
            UIAtlas    uiatlas = go.GetComponent <UIAtlas>();
            if (uiatlas != null)
            {
                if (BobShrinker.db.mAtlasPaths.Contains(filepath))
                {
                    return;
                }
                else if (uiatlas.spriteMaterial == null)
                {
                    Debug.LogError(filepath + " has no materials");
                    return;
                }
                else
                {
                    BobUtils.DisplayProgressBar(1, 1, "添加文件", filepath);
                    AtlasProperty originalAtlasProp = BobShrinker.GetAtlasProperty(uiatlas, true);
                    BobShrinker.db.SaveAtlasData(filepath, originalAtlasProp, originalAtlasProp);
                }
            }

            List <string> dependencies = BobUtils.CollectDependencies(filepath);//获取依赖资源 接着AddItems
            for (int i = 0; i < dependencies.Count; ++i)
            {
                AddFileItems(dependencies[i]);
            }
        }
    }