Esempio n. 1
0
    private TextureDetails GetTextureDetail(Texture tTexture, Graphic graphic)
    {
        TextureDetails tTextureDetails = GetTextureDetail(tTexture);

        tTextureDetails.FoundInGraphics.Add(graphic);
        return(tTextureDetails);
    }
Esempio n. 2
0
    private TextureDetails GetTextureDetail(Texture tTexture)
    {
        TextureDetails tTextureDetails = FindTextureDetails(tTexture);

        if (tTextureDetails == null)
        {
            tTextureDetails           = new TextureDetails();
            tTextureDetails.texture   = tTexture;
            tTextureDetails.isCubeMap = tTexture is Cubemap;

            int memSize = CalculateTextureSizeBytes(tTexture);

            tTextureDetails.memSizeKB = memSize / 1024;
            TextureFormat tFormat      = TextureFormat.RGBA32;
            int           tMipMapCount = 1;
            if (tTexture is Texture2D)
            {
                tFormat      = (tTexture as Texture2D).format;
                tMipMapCount = (tTexture as Texture2D).mipmapCount;
            }
            if (tTexture is Cubemap)
            {
                tFormat = (tTexture as Cubemap).format;
            }

            tTextureDetails.format      = tFormat;
            tTextureDetails.mipMapCount = tMipMapCount;
        }

        return(tTextureDetails);
    }
Esempio n. 3
0
    private TextureDetails GetTextureDetail(Texture tTexture, Animator animator)
    {
        TextureDetails tTextureDetails = GetTextureDetail(tTexture);

        tTextureDetails.FoundInAnimators.Add(animator);
        return(tTextureDetails);
    }
Esempio n. 4
0
    private TextureDetails GetTextureDetail(Texture tTexture, MonoBehaviour script)
    {
        TextureDetails tTextureDetails = GetTextureDetail(tTexture);

        tTextureDetails.FoundInScripts.Add(script);
        return(tTextureDetails);
    }
Esempio n. 5
0
    private TextureDetails GetTextureDetail(Texture tTexture, Renderer renderer)
    {
        TextureDetails tTextureDetails = GetTextureDetail(tTexture);

        tTextureDetails.FoundInRenderers.Add(renderer);
        return(tTextureDetails);
    }
    private TextureDetails GetTextureDetail(Texture tTexture, Button button)
    {
        TextureDetails tTextureDetails = GetTextureDetail(tTexture);

        if (!tTextureDetails.FoundInButtons.Contains(button))
        {
            tTextureDetails.FoundInButtons.Add(button);
        }
        return(tTextureDetails);
    }
Esempio n. 7
0
    private TextureDetails GetTextureDetail(Texture tTexture, Material tMaterial, MaterialDetails tMaterialDetails)
    {
        TextureDetails tTextureDetails = GetTextureDetail(tTexture);

        tTextureDetails.FoundInMaterials.Add(tMaterial);
        foreach (Renderer renderer in tMaterialDetails.FoundInRenderers)
        {
            if (!tTextureDetails.FoundInRenderers.Contains(renderer))
            {
                tTextureDetails.FoundInRenderers.Add(renderer);
            }
        }
        return(tTextureDetails);
    }
Esempio n. 8
0
 TextureDetails TryAddActiveTextures(Texture tex)
 {
     if (tex != null)
     {
         TextureDetails details = FindTextureDetails(tex);
         if (details == null)
         {
             details = new TextureDetails(tex);
             ActiveTextures.Add(details);
         }
         return(details);
     }
     return(null);
 }
Esempio n. 9
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. 10
0
    void AddToActiveTexture(TextureDetails td)
    {
        bool find = false;

        foreach (TextureDetails t in ActiveTextures)
        {
            if (t == td)
            {
                find = true;
                break;
            }
        }

        if (find == false)
        {
            ActiveTextures.Add(td);
        }
    }
Esempio n. 11
0
    private TextureDetails GetTextureDetail(Texture tTexture)
    {
        TextureDetails tTextureDetails = FindTextureDetails(tTexture);

        if (tTextureDetails == null)
        {
            tTextureDetails           = new TextureDetails();
            tTextureDetails.texture   = tTexture;
            tTextureDetails.isCubeMap = tTexture is Cubemap;

            int memSize = CalculateTextureSizeBytes(tTexture);

            TextureFormat tFormat      = TextureFormat.RGBA32;
            int           tMipMapCount = 1;
            if (tTexture is Texture2D)
            {
                tFormat      = (tTexture as Texture2D).format;
                tMipMapCount = (tTexture as Texture2D).mipmapCount;
            }
            if (tTexture is Cubemap)
            {
                tFormat = (tTexture as Cubemap).format;
                memSize = 8 * tTexture.height * tTexture.width;
            }
                        #if !UNITY_EDITOR_OSX
            if (tTexture is Texture2DArray)
            {
                tFormat      = (tTexture as Texture2DArray).format;
                tMipMapCount = 10;
            }
                        #endif

            tTextureDetails.memSizeKB   = memSize / 1024;
            tTextureDetails.format      = tFormat;
            tTextureDetails.mipMapCount = tMipMapCount;
        }

        return(tTextureDetails);
    }
Esempio n. 12
0
    private TextureDetails GetTextureDetail(Texture tTexture, Material tMaterial, MaterialDetails tMaterialDetails)
    {
        TextureDetails tTextureDetails = FindTextureDetails(tTexture);

        if (tTextureDetails == null)
        {
            tTextureDetails           = new TextureDetails();
            tTextureDetails.texture   = tTexture;
            tTextureDetails.isCubeMap = tTexture is Cubemap;

            int memSize = CalculateTextureSizeBytes(tTexture);

            tTextureDetails.memSizeKB = memSize / 1024;
            TextureFormat tFormat      = TextureFormat.RGBA32;
            int           tMipMapCount = 1;
            if (tTexture is Texture2D)
            {
                tFormat      = (tTexture as Texture2D).format;
                tMipMapCount = (tTexture as Texture2D).mipmapCount;
            }
            if (tTexture is Cubemap)
            {
                tFormat = (tTexture as Cubemap).format;
            }

            tTextureDetails.format      = tFormat;
            tTextureDetails.mipMapCount = tMipMapCount;
        }
        tTextureDetails.FoundInMaterials.Add(tMaterial);
        foreach (Renderer renderer in tMaterialDetails.FoundInRenderers)
        {
            if (!tTextureDetails.FoundInRenderers.Contains(renderer))
            {
                tTextureDetails.FoundInRenderers.Add(renderer);
            }
        }
        return(tTextureDetails);
    }
    private TextureDetails GetTextureDetail(Texture tTexture)
    {
        TextureDetails tTextureDetails = FindTextureDetails(tTexture);

        if (tTextureDetails == null)
        {
            tTextureDetails           = new TextureDetails();
            tTextureDetails.texture   = tTexture;
            tTextureDetails.isCubeMap = tTexture is Cubemap;

            int memSize = CalculateTextureSizeBytes(tTexture);

            TextureFormat tFormat      = TextureFormat.RGBA32;
            int           tMipMapCount = 1;
            if (tTexture is Texture2D)
            {
                tFormat      = (tTexture as Texture2D).format;
                tMipMapCount = (tTexture as Texture2D).mipmapCount;
            }
            if (tTexture is Cubemap)
            {
                tFormat = (tTexture as Cubemap).format;
                memSize = 8 * tTexture.height * tTexture.width;
            }

            //注释:jerrylai 2017-03-23 14:10:23
            //if (tTexture is Texture2DArray)
            //{
            //    tFormat = (tTexture as Texture2DArray).format;
            //    tMipMapCount = 10;
            //}

            tTextureDetails.memSizeKB   = memSize / 1024;
            tTextureDetails.format      = tFormat;
            tTextureDetails.mipMapCount = tMipMapCount;
        }
        return(tTextureDetails);
    }
Esempio n. 14
0
    private TextureDetails GetTextureDetail( Texture tTexture, Material tMaterial, MaterialDetails tMaterialDetails )
    {
        TextureDetails tTextureDetails = FindTextureDetails ( tTexture );
        if ( tTextureDetails == null )
        {
            tTextureDetails = new TextureDetails ();
            tTextureDetails.texture = tTexture;
            tTextureDetails.isCubeMap = tTexture is Cubemap;

            int memSize = CalculateTextureSizeBytes ( tTexture );

            tTextureDetails.memSizeKB = memSize / 1024;
            TextureFormat tFormat = TextureFormat.RGBA32;
            int tMipMapCount = 1;
            if ( tTexture is Texture2D )
            {
                tFormat = ( tTexture as Texture2D ).format;
                tMipMapCount = ( tTexture as Texture2D ).mipmapCount;
            }
            if ( tTexture is Cubemap )
            {
                tFormat = ( tTexture as Cubemap ).format;
            }

            tTextureDetails.format = tFormat;
            tTextureDetails.mipMapCount = tMipMapCount;
        }

        if ( ! tTextureDetails.FoundInMaterials.Contains ( tMaterial ) )
            tTextureDetails.FoundInMaterials.Add ( tMaterial );

        foreach ( Renderer renderer in tMaterialDetails.FoundInRenderers )
            if ( ! ( renderer is SpriteRenderer ) )
                if ( ! tTextureDetails.FoundInRenderers.Contains ( renderer ) )
                    tTextureDetails.FoundInRenderers.Add ( renderer );

        return tTextureDetails;
    }
    void CheckResources()
    {
        ActiveTextures.Clear();
        ActiveMaterials.Clear();
        ActiveMeshDetails.Clear();

        Renderer[] renderers = (Renderer[])FindObjectsOfType(typeof(Renderer));
        //Debug.Log("Total renderers "+renderers.Length);
        foreach (Renderer renderer in renderers)
        {
            //Debug.Log("Renderer is "+renderer.name);
            foreach (Material material in renderer.sharedMaterials)
            {
                MaterialDetails tMaterialDetails = FindMaterialDetails(material);
                if (tMaterialDetails == null)
                {
                    tMaterialDetails          = new MaterialDetails();
                    tMaterialDetails.material = material;
                    ActiveMaterials.Add(tMaterialDetails);
                }
                tMaterialDetails.FoundInRenderers.Add(renderer);
            }
        }

        foreach (MaterialDetails tMaterialDetails in ActiveMaterials)
        {
            Material tMaterial = tMaterialDetails.material;
            foreach (Object obj in EditorUtility.CollectDependencies(new UnityEngine.Object[] { tMaterial }))
            {
                if (obj is Texture)
                {
                    Texture        tTexture        = obj as Texture;
                    TextureDetails tTextureDetails = FindTextureDetails(tTexture);
                    if (tTextureDetails == null)
                    {
                        tTextureDetails           = new TextureDetails();
                        tTextureDetails.texture   = tTexture;
                        tTextureDetails.isCubeMap = tTexture is Cubemap;

                        int memSize = CalculateTextureSizeBytes(tTexture);

                        tTextureDetails.memSizeKB = memSize / 1024;
                        TextureFormat tFormat      = TextureFormat.RGBA32;
                        int           tMipMapCount = 1;
                        if (tTexture is Texture2D)
                        {
                            tFormat      = (tTexture as Texture2D).format;
                            tMipMapCount = (tTexture as Texture2D).mipmapCount;
                        }
                        if (tTexture is Cubemap)
                        {
                            tFormat = (tTexture as Cubemap).format;
                        }

                        tTextureDetails.format      = tFormat;
                        tTextureDetails.mipMapCount = tMipMapCount;
                        ActiveTextures.Add(tTextureDetails);
                    }
                    tTextureDetails.FoundInMaterials.Add(tMaterial);
                    foreach (Renderer renderer in tMaterialDetails.FoundInRenderers)
                    {
                        if (!tTextureDetails.FoundInRenderers.Contains(renderer))
                        {
                            tTextureDetails.FoundInRenderers.Add(renderer);
                        }
                    }
                }
            }
        }


        MeshFilter[] meshFilters = (MeshFilter[])FindObjectsOfType(typeof(MeshFilter));

        foreach (MeshFilter tMeshFilter in meshFilters)
        {
            Mesh tMesh = tMeshFilter.sharedMesh;
            if (tMesh != null)
            {
                MeshDetails tMeshDetails = FindMeshDetails(tMesh);
                if (tMeshDetails == null)
                {
                    tMeshDetails      = new MeshDetails();
                    tMeshDetails.mesh = tMesh;
                    ActiveMeshDetails.Add(tMeshDetails);
                }
                tMeshDetails.FoundInMeshFilters.Add(tMeshFilter);
            }
        }

        SkinnedMeshRenderer[] skinnedMeshRenderers = (SkinnedMeshRenderer[])FindObjectsOfType(typeof(SkinnedMeshRenderer));

        foreach (SkinnedMeshRenderer tSkinnedMeshRenderer in skinnedMeshRenderers)
        {
            Mesh tMesh = tSkinnedMeshRenderer.sharedMesh;
            if (tMesh != null)
            {
                MeshDetails tMeshDetails = FindMeshDetails(tMesh);
                if (tMeshDetails == null)
                {
                    tMeshDetails      = new MeshDetails();
                    tMeshDetails.mesh = tMesh;
                    ActiveMeshDetails.Add(tMeshDetails);
                }
                tMeshDetails.FoundInSkinnedMeshRenderer.Add(tSkinnedMeshRenderer);
            }
        }


        TotalTextureMemory = 0;
        foreach (TextureDetails tTextureDetails in ActiveTextures)
        {
            TotalTextureMemory += tTextureDetails.memSizeKB;
        }

        TotalMeshVertices = 0;
        foreach (MeshDetails tMeshDetails in ActiveMeshDetails)
        {
            TotalMeshVertices += tMeshDetails.mesh.vertexCount;
        }

        // Sort by size, descending
        ActiveTextures.Sort(delegate(TextureDetails details1, TextureDetails details2) { return(details2.memSizeKB - details1.memSizeKB); });
        ActiveMeshDetails.Sort(delegate(MeshDetails details1, MeshDetails details2) { return(details2.mesh.vertexCount - details1.mesh.vertexCount); });
    }
Esempio n. 16
0
    void CheckResources()
    {
        //Debug.Log("CheckResources");

        ActiveTextures.Clear();
        ActiveMaterials.Clear();
        ActiveMeshDetails.Clear();
        ActiveShaderDetails.Clear();
        ActiveSoundDetails.Clear();

        foreach (LightmapData lightmap in LightmapSettings.lightmaps)
        {
            TryAddActiveTextures(lightmap.lightmapNear);
            TryAddActiveTextures(lightmap.lightmapFar);
        }

        Renderer[] renderers = (Renderer[])FindObjectsOfType(typeof(Renderer));
        foreach (Renderer renderer in renderers)
        {
            //Debug.Log("Renderer is "+renderer.name);
            foreach (Material material in renderer.sharedMaterials)
            {
                MaterialDetails tMaterialDetails = TryAddActiveMaterial(material);
                if (tMaterialDetails != null)
                {
                    tMaterialDetails.FoundInGameObjects.Add(renderer.gameObject);
                }

                ShaderDetails tShaderDetails = TryAddActiveShader(material.shader);
                if (tShaderDetails != null)
                {
                    if (!tShaderDetails.FoundInGameObjects.Contains(renderer.gameObject))
                    {
                        tShaderDetails.FoundInGameObjects.Add(renderer.gameObject);
                    }
                }
            }

            // add the lightmap reference to the renderer
            if (renderer.lightmapIndex >= 0 && renderer.lightmapIndex < LightmapSettings.lightmaps.Length)
            {
                LightmapData   lightmap = LightmapSettings.lightmaps[renderer.lightmapIndex];
                TextureDetails lmNear   = FindTextureDetails(lightmap.lightmapNear);
                if (lmNear != null && !lmNear.FoundInRenderers.Contains(renderer))
                {
                    lmNear.FoundInRenderers.Add(renderer);
                }

                TextureDetails lmFar = FindTextureDetails(lightmap.lightmapFar);
                if (lmFar != null && !lmFar.FoundInRenderers.Contains(renderer))
                {
                    lmFar.FoundInRenderers.Add(renderer);
                }
            }
        }

        foreach (MaterialDetails tMaterialDetails in ActiveMaterials)
        {
            Material tMaterial = tMaterialDetails.material;
            foreach (Object obj in EditorUtility.CollectDependencies(new UnityEngine.Object[] { tMaterial }))
            {
                if (obj is Texture)
                {
                    Texture        tTexture        = obj as Texture;
                    TextureDetails tTextureDetails = TryAddActiveTextures(tTexture);
                    tTextureDetails.FoundInMaterials.Add(tMaterial);
                }
                if (obj is Shader)
                {
                    Shader        shader        = obj as Shader;
                    ShaderDetails shaderDetails = TryAddActiveShader(shader);
                    if (!shaderDetails.FoundInMaterials.Contains(tMaterial))
                    {
                        shaderDetails.FoundInMaterials.Add(tMaterial);
                    }
                }
            }
        }

        MeshFilter[] meshFilters = (MeshFilter[])FindObjectsOfType(typeof(MeshFilter));
        foreach (MeshFilter tMeshFilter in meshFilters)
        {
            Mesh tMesh = tMeshFilter.sharedMesh;
            if (tMesh != null)
            {
                MeshDetails details = TryAddActiveMesh(tMesh);
                if (!details.FoundInGameObjects.Contains(tMeshFilter.gameObject))
                {
                    details.FoundInGameObjects.Add(tMeshFilter.gameObject);
                }
            }
        }

        Light[] lights = (Light[])FindObjectsOfType(typeof(Light));
        foreach (Light light in lights)
        {
            if (light.cookie)
            {
                TextureDetails details = TryAddActiveTextures(light.cookie);
                if (!details.FoundInLights.Contains(light))
                {
                    details.FoundInLights.Add(light);
                }
            }
        }

        GameObject[] gameObjs = (GameObject[])FindObjectsOfType(typeof(GameObject));
        foreach (GameObject obj in gameObjs)
        {
            foreach (Object o in EditorUtility.CollectDependencies(new UnityEngine.Object[] { obj }))
            {
                if (o is AudioClip)
                {
                    AudioClip    clip    = o as AudioClip;
                    SoundDetails details = TryAddAudioClip(clip);
                    if (!details.FoundInGameObjects.Contains(obj))
                    {
                        details.FoundInGameObjects.Add(obj);
                    }
                }
                if (o is MonoScript)
                {
                    MonoScript    script  = o as MonoScript;
                    ScriptDetails details = TryAddScript(script);
                    if (!details.FoundInGameObjects.Contains(obj))
                    {
                        details.FoundInGameObjects.Add(obj);
                    }
                }
            }
        }

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

        TotalMeshVertices = 0;
        foreach (MeshDetails tMeshDetails in ActiveMeshDetails)
        {
            TotalMeshVertices += tMeshDetails.mesh.vertexCount;
        }

        // Sort by size, descending
        ActiveTextures.Sort(delegate(TextureDetails details1, TextureDetails details2) { return(details2.memSizeBytes - details1.memSizeBytes); });
        ActiveMeshDetails.Sort(delegate(MeshDetails details1, MeshDetails details2) { return(details2.mesh.vertexCount - details1.mesh.vertexCount); });
    }
 TextureDetails TryAddActiveTextures( Texture tex )
 {
     if ( tex != null )
     {
         TextureDetails details = FindTextureDetails( tex );
         if (details==null)
         {
             details = new TextureDetails( tex );
             ActiveTextures.Add( details );
         }
         return details;
     }
     return null;
 }
    void CheckResources()
    {
        ActiveTextures.Clear();
        ActiveMaterials.Clear();
        ActiveMeshDetails.Clear();

        Renderer[] renderers = (Renderer[]) FindObjectsOfType(typeof(Renderer));
        //Debug.Log("Total renderers "+renderers.Length);
        foreach (Renderer renderer in renderers)
        {
            //Debug.Log("Renderer is "+renderer.name);
            foreach (Material material in renderer.sharedMaterials)
            {

                MaterialDetails tMaterialDetails=FindMaterialDetails(material);
                if (tMaterialDetails==null)
                {
                    tMaterialDetails=new MaterialDetails();
                    tMaterialDetails.material=material;
                    ActiveMaterials.Add(tMaterialDetails);
                }
                tMaterialDetails.FoundInRenderers.Add(renderer);
            }
        }

        foreach (MaterialDetails tMaterialDetails in ActiveMaterials)
        {
            Material tMaterial=tMaterialDetails.material;
            foreach (Object obj in EditorUtility.CollectDependencies(new UnityEngine.Object[] {tMaterial}))
            {
                if (obj is Texture)
                {
                    Texture tTexture=obj as Texture;
                    TextureDetails tTextureDetails=FindTextureDetails(tTexture);
                    if (tTextureDetails==null)
                    {
                        tTextureDetails=new TextureDetails();
                        tTextureDetails.texture=tTexture;
                        tTextureDetails.isCubeMap=tTexture is Cubemap;

                        int memSize=CalculateTextureSizeBytes(tTexture);

                        tTextureDetails.memSizeKB=memSize/1024;
                        TextureFormat tFormat=TextureFormat.RGBA32;
                        int tMipMapCount=1;
                        if (tTexture is Texture2D)
                        {
                            tFormat=(tTexture as Texture2D).format;
                            tMipMapCount=(tTexture as Texture2D).mipmapCount;
                        }
                        if (tTexture is Cubemap)
                        {
                            tFormat=(tTexture as Cubemap).format;
                        }

                        tTextureDetails.format=tFormat;
                        tTextureDetails.mipMapCount=tMipMapCount;
                        ActiveTextures.Add(tTextureDetails);
                    }
                    tTextureDetails.FoundInMaterials.Add(tMaterial);
                    foreach (Renderer renderer in tMaterialDetails.FoundInRenderers)
                    {
                        if (!tTextureDetails.FoundInRenderers.Contains(	renderer)) tTextureDetails.FoundInRenderers.Add(renderer);
                    }
                }
            }
        }

        MeshFilter[] meshFilters = (MeshFilter[]) FindObjectsOfType(typeof(MeshFilter));

        foreach (MeshFilter tMeshFilter in meshFilters)
        {
            Mesh tMesh=tMeshFilter.sharedMesh;
            if (tMesh!=null)
            {
                MeshDetails tMeshDetails=FindMeshDetails(tMesh);
                if (tMeshDetails==null)
                {
                    tMeshDetails=new MeshDetails();
                    tMeshDetails.mesh=tMesh;
                    ActiveMeshDetails.Add(tMeshDetails);
                }
                tMeshDetails.FoundInMeshFilters.Add(tMeshFilter);
            }
        }

        SkinnedMeshRenderer[] skinnedMeshRenderers = (SkinnedMeshRenderer[]) FindObjectsOfType(typeof(SkinnedMeshRenderer));

        foreach (SkinnedMeshRenderer tSkinnedMeshRenderer in skinnedMeshRenderers)
        {
            Mesh tMesh=tSkinnedMeshRenderer.sharedMesh;
            if (tMesh!=null)
            {
                MeshDetails tMeshDetails=FindMeshDetails(tMesh);
                if (tMeshDetails==null)
                {
                    tMeshDetails=new MeshDetails();
                    tMeshDetails.mesh=tMesh;
                    ActiveMeshDetails.Add(tMeshDetails);
                }
                tMeshDetails.FoundInSkinnedMeshRenderer.Add(tSkinnedMeshRenderer);
            }
        }

        TotalTextureMemory=0;
        foreach (TextureDetails tTextureDetails in ActiveTextures) TotalTextureMemory+=tTextureDetails.memSizeKB;

        TotalMeshVertices=0;
        foreach (MeshDetails tMeshDetails in ActiveMeshDetails) TotalMeshVertices+=tMeshDetails.mesh.vertexCount;

        // Sort by size, descending
        ActiveTextures.Sort(delegate(TextureDetails details1, TextureDetails details2) {return details2.memSizeKB-details1.memSizeKB;});
        ActiveMeshDetails.Sort(delegate(MeshDetails details1, MeshDetails details2) {return details2.mesh.vertexCount-details1.mesh.vertexCount;});
    }
Esempio n. 19
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;
        }
    }