private TextureDetails GetTextureDetail(Texture tTexture, Graphic graphic) { TextureDetails tTextureDetails = GetTextureDetail(tTexture); tTextureDetails.FoundInGraphics.Add(graphic); 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); 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); }
private TextureDetails GetTextureDetail(Texture tTexture, Animator animator) { TextureDetails tTextureDetails = GetTextureDetail(tTexture); tTextureDetails.FoundInAnimators.Add(animator); return(tTextureDetails); }
private TextureDetails GetTextureDetail(Texture tTexture, MonoBehaviour script) { TextureDetails tTextureDetails = GetTextureDetail(tTexture); tTextureDetails.FoundInScripts.Add(script); return(tTextureDetails); }
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); }
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); }
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); }
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; } }
void AddToActiveTexture(TextureDetails td) { bool find = false; foreach (TextureDetails t in ActiveTextures) { if (t == td) { find = true; break; } } if (find == false) { ActiveTextures.Add(td); } }
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); }
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); }
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); }); }
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;}); }
// 调用时机:目录列表改变,检索模式改变 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; } }