Esempio n. 1
0
 public TextureDetails(Texture tex)
 {
     texture      = tex;
     isCubeMap    = tex is Cubemap;
     memSizeBytes = TextureDetails.CalculateTextureSizeBytes(tex);
     format       = TextureFormat.RGBA32;
     mipMapCount  = 1;
     if (texture is Texture2D)
     {
         format      = (texture as Texture2D).format;
         mipMapCount = (texture as Texture2D).mipmapCount;
     }
     if (texture is Cubemap)
     {
         format = (texture as Cubemap).format;
     }
 }
Esempio n. 2
0
    // 调用时机:目录列表改变,检索模式改变

    void checkResources()
    {
        string[] paths = null;

        // TODO: inputPathList从未被使用,一直使用的是当前的inputPath
        paths = GetFilePaths <Material>(inputPath, searchOption);

        //目前只会找到有Material引用的自定义Texture和Shader
        //对于被引用的默认Texture和Shader也进行显示

        //找到material使用的texture和shader
        foreach (string path in paths)
        {
            Material material = (Material)AssetDatabase.LoadAssetAtPath(path, typeof(Material));
            if (material != null)
            {
                MaterialDetails tMaterialDetails = new MaterialDetails();
                tMaterialDetails.FoundInGameObjects = new List <string>();
                tMaterialDetails.name = material.name;
                tMaterialDetails.path = path;

                // 对于缩略图进行深拷贝
                Texture2D preview = AssetPreview.GetAssetPreview(material);
                tMaterialDetails.preview = new Texture2D(preview.width, preview.height);
                tMaterialDetails.preview.SetPixels32(preview.GetPixels32());
                tMaterialDetails.preview.Apply();

                AllMaterials.Add(tMaterialDetails);

                foreach (Object obj in EditorUtility.CollectDependencies(new UnityEngine.Object[] { material }))
                {
                    string p = AssetDatabase.GetAssetPath(obj);
                    if (p == defaultPath)
                    {
                        p = defaultPath + "::" + obj.name;
                    }

                    if (obj is Texture)
                    {
                        Texture tTexture = (Texture)obj;

                        int check = 0;
                        foreach (TextureDetails details in AllTextures)
                        {
                            if (details.path == p)
                            {
                                check = 1;
                                details.FoundInMaterials.Add(path);
                                break;
                            }
                        }
                        if (check == 0)
                        {
                            TextureDetails tTextureDetails = new TextureDetails();
                            tTextureDetails.FoundInMaterials = new List <string>();
                            tTextureDetails.name             = tTexture.name;
                            tTextureDetails.path             = p;
                            tTextureDetails.preview          = AssetPreview.GetMiniThumbnail(tTexture);
                            tTextureDetails.memSizeBytes     = TextureDetails.CalculateTextureSizeBytes(tTexture);
                            tTextureDetails.width            = tTexture.width;
                            tTextureDetails.height           = tTexture.height;
                            tTextureDetails.FoundInMaterials.Add(path);
                            AllTextures.Add(tTextureDetails);
                        }
                    }

                    else if (obj is Shader)
                    {
                        Shader tShader = (Shader)obj;

                        int check = 0;
                        foreach (ShaderDetails details in AllShaders)
                        {
                            if (details.path == p)
                            {
                                check = 1;
                                details.FoundInMaterials.Add(path);
                                break;
                            }
                        }
                        if (check == 0)
                        {
                            ShaderDetails tShaderDetails = new ShaderDetails();
                            tShaderDetails.FoundInMaterials   = new List <string>();
                            tShaderDetails.FoundInGameObjects = new List <string>();
                            tShaderDetails.name = tShader.name;
                            tShaderDetails.path = p;
                            tShaderDetails.FoundInMaterials.Add(path);
                            AllShaders.Add(tShaderDetails);
                        }
                    }
                }
            }
        }

        paths = GetFilePaths <Mesh>(inputPath, searchOption);

        foreach (string path in paths)
        {
            Mesh mesh = (Mesh)AssetDatabase.LoadAssetAtPath(path, typeof(Mesh));
            if (mesh != null)
            {
                MeshDetails tMeshDetails = new MeshDetails();
                tMeshDetails.FoundInGameObjects = new List <string>();
                tMeshDetails.name        = mesh.name;
                tMeshDetails.path        = path;
                tMeshDetails.preview     = AssetPreview.GetAssetPreview(mesh);
                tMeshDetails.vertexCount = mesh.vertexCount;
                tMeshDetails.triangles   = mesh.triangles.Length;
                AllMeshes.Add(tMeshDetails);
            }
        }

        paths = GetFilePaths <AudioClip>(inputPath, searchOption);

        foreach (string path in paths)
        {
            AudioClip clip = (AudioClip)AssetDatabase.LoadAssetAtPath(path, typeof(AudioClip));
            if (clip != null)
            {
                SoundDetails tSoundDetails = new SoundDetails();
                tSoundDetails.FoundInGameObjects = new List <string>();
                tSoundDetails.name    = clip.name;
                tSoundDetails.path    = path;
                tSoundDetails.preview = AssetPreview.GetAssetPreview(clip);
                AllSounds.Add(tSoundDetails);
            }
        }

        paths = GetFilePaths <MonoScript>(inputPath, searchOption);

        foreach (string path in paths)
        {
            MonoScript script = (MonoScript)AssetDatabase.LoadAssetAtPath(path, typeof(MonoScript));
            if (script != null)
            {
                ScriptDetails tScriptDetails = new ScriptDetails();
                tScriptDetails.FoundInGameObjects = new List <string>();
                tScriptDetails.name = script.name;
                tScriptDetails.path = path;
                AllScripts.Add(tScriptDetails);
            }
        }

        // TODO: 优化查重算法
        // TODO: 目前只能找到存为prefab的GameObject
        // 找到GameObject引用的内建资源也能找到

        paths = GetFilePaths <GameObject>(inputPath, searchOption);

        foreach (string path in paths)
        {
            GameObject gameObject = (GameObject)AssetDatabase.LoadAssetAtPath(path, typeof(GameObject));
            if (gameObject != null)
            {
                foreach (Object obj in EditorUtility.CollectDependencies(new UnityEngine.Object[] { gameObject }))
                {
                    string p = AssetDatabase.GetAssetPath(obj);
                    if (p == defaultPath)
                    {
                        p = defaultPath + "::" + obj.name;
                    }

                    if (obj is Material)
                    {
                        Material material = (Material)obj;
                        int      check    = 1;
                        foreach (MaterialDetails details in AllMaterials)
                        {
                            if (details.path == p)
                            {
                                check = 0;
                                details.FoundInGameObjects.Add(path);
                                break;
                            }
                        }

                        if (check == 1)
                        {
                            MaterialDetails tMaterialDetails = new MaterialDetails();
                            tMaterialDetails.FoundInGameObjects = new List <string>();
                            tMaterialDetails.name = material.name;
                            tMaterialDetails.path = path;

                            // 对于material的缩略图进行深拷贝
                            Texture2D preview = AssetPreview.GetAssetPreview(material);
                            tMaterialDetails.preview = new Texture2D(preview.width, preview.height);
                            tMaterialDetails.preview.SetPixels32(preview.GetPixels32());
                            tMaterialDetails.preview.Apply();

                            tMaterialDetails.FoundInGameObjects.Add(path);
                            AllMaterials.Add(tMaterialDetails);
                        }
                    }

                    else if (obj is Mesh)
                    {
                        Mesh mesh  = (Mesh)obj;
                        int  check = 1;
                        foreach (MeshDetails details in AllMeshes)
                        {
                            if (details.path == p)
                            {
                                check = 0;
                                details.FoundInGameObjects.Add(path);
                                break;
                            }
                        }

                        if (check == 1)
                        {
                            MeshDetails tMeshDetails = new MeshDetails();
                            tMeshDetails.FoundInGameObjects = new List <string>();
                            tMeshDetails.name        = mesh.name;
                            tMeshDetails.path        = path;
                            tMeshDetails.preview     = AssetPreview.GetAssetPreview(mesh);
                            tMeshDetails.vertexCount = mesh.vertexCount;
                            tMeshDetails.triangles   = mesh.triangles.Length;
                            tMeshDetails.FoundInGameObjects.Add(path);
                            AllMeshes.Add(tMeshDetails);
                        }
                    }

                    else if (obj is AudioClip)
                    {
                        AudioClip clip  = (AudioClip)obj;
                        int       check = 1;
                        foreach (SoundDetails details in AllSounds)
                        {
                            if (details.path == p)
                            {
                                check = 0;
                                details.FoundInGameObjects.Add(path);
                                break;
                            }
                        }

                        if (check == 1)
                        {
                            SoundDetails tSoundDetails = new SoundDetails();
                            tSoundDetails.FoundInGameObjects = new List <string>();
                            tSoundDetails.name    = clip.name;
                            tSoundDetails.path    = p;
                            tSoundDetails.preview = AssetPreview.GetAssetPreview(clip);
                            tSoundDetails.FoundInGameObjects.Add(path);
                            AllSounds.Add(tSoundDetails);
                        }
                    }

                    else if (obj is MonoScript)
                    {
                        MonoScript script = (MonoScript)obj;
                        int        check  = 1;
                        foreach (ScriptDetails details in AllScripts)
                        {
                            if (details.path == p)
                            {
                                check = 0;
                                details.FoundInGameObjects.Add(path);
                                break;
                            }
                        }
                        if (check == 1)
                        {
                            ScriptDetails tScriptDetails = new ScriptDetails();
                            tScriptDetails.FoundInGameObjects = new List <string>();
                            tScriptDetails.name = script.name;
                            tScriptDetails.path = p;
                            tScriptDetails.FoundInGameObjects.Add(path);
                            AllScripts.Add(tScriptDetails);
                        }
                    }
                }
            }
        }

        foreach (TextureDetails tTextureDetails in AllTextures)
        {
            TotalTextureMemory += tTextureDetails.memSizeBytes;
        }

        foreach (MeshDetails tMeshDetails in AllMeshes)
        {
            TotalMeshVertices += tMeshDetails.vertexCount;
        }
    }