#if UNITY_EDITOR using System; using System.IO; using System.Linq; using Newtonsoft.Json; using UnityEditor; using UnityEngine; public static class InspectLmGirlMaterials { static string PathOf(UnityEngine.Object obj)=>obj?AssetDatabase.GetAssetPath(obj):null; static object MaterialInfo(Material material)=>material?new{name=material.name,path=PathOf(material),shader=material.shader?material.shader.name:null, textures=material.GetTexturePropertyNames().Select(p=>new{property=p,texture=PathOf(material.GetTexture(p))}).ToArray()}:null; static object Renderers(GameObject obj)=>obj.GetComponentsInChildren(true).Select(r=>new{r.name, mesh=r is SkinnedMeshRenderer skin&&skin.sharedMesh?new{name=skin.sharedMesh.name,vertices=skin.sharedMesh.vertexCount,uv=skin.sharedMesh.HasVertexAttribute(UnityEngine.Rendering.VertexAttribute.TexCoord0)}:null, materials=r.sharedMaterials.Select(MaterialInfo).ToArray()}).ToArray(); public static string Inspect() { const string path="Assets/Bundles/Characters/Human/test/girl/LmGirlTpose.fbx"; var importer=(ModelImporter)AssetImporter.GetAtPath(path); var model=AssetDatabase.LoadAssetAtPath(path); var prefab=AssetDatabase.LoadAssetAtPath("Assets/Bundles/Characters/Human/test/girl/Girl.prefab"); var report=new{importer=new{importer.materialImportMode,importer.materialLocation,importer.materialSearch, remaps=importer.GetExternalObjectMap().Select(p=>new{p.Key.name,path=PathOf(p.Value)}).ToArray()}, fbx=Renderers(model),prefab=prefab?Renderers(prefab):null, embeddedMaterials=AssetDatabase.LoadAllAssetsAtPath(path).OfType().Select(MaterialInfo).ToArray(), availableReviewMaterial=MaterialInfo(AssetDatabase.LoadAssetAtPath("Assets/Review/CharacterAnimationLab/LmGirl/Generated/LmGirlTextured.mat")), scene=UnityEngine.Object.FindObjectsOfType(true).Where(a=>a.name.IndexOf("LmGirl",StringComparison.OrdinalIgnoreCase)>=0).Select(a=>new{a.name,renderers=Renderers(a.gameObject)}).ToArray()}; var json=JsonConvert.SerializeObject(report,Formatting.Indented); var directory=System.IO.Path.Combine(Directory.GetParent(Application.dataPath).Parent.FullName,"Tools/output/lmgirl_tpose_studio/material_audit"); Directory.CreateDirectory(directory);File.WriteAllText(System.IO.Path.Combine(directory,"unity_materials.json"),json);return json; } } #endif