// WL-814x 프로브 1 — 메시·머티리얼·텍스처 실측 (팔레트 아틀라스 UV 설계 근거) // run_script --file AgentScripts/WL814x_Probe.cs --entry WL814x_Probe.Run public static class WL814x_Probe { const string Out = @"E:\NerdNavis\WL_wt\gameplay\AgentScripts\WL814x_PROBE.txt"; public static string Run() { var sb = new System.Text.StringBuilder(); var prefab = UnityEditor.AssetDatabase.LoadAssetAtPath("Assets/Res_Addr/PC/LH_M05.prefab"); if (prefab == null) return "no prefab"; sb.AppendLine("=== LH_M05.prefab 렌더러 ==="); var rs = prefab.GetComponentsInChildren(true); foreach (var r in rs) { var smr = r as UnityEngine.SkinnedMeshRenderer; var mf = r.GetComponent(); UnityEngine.Mesh m = smr != null ? smr.sharedMesh : (mf != null ? mf.sharedMesh : null); sb.AppendLine("[R] " + r.name + " type=" + r.GetType().Name + " enabled=" + r.enabled + " activeSelf=" + r.gameObject.activeSelf); if (m != null) { string path = UnityEditor.AssetDatabase.GetAssetPath(m); sb.AppendLine(" mesh=" + m.name + " path=" + path + " verts=" + m.vertexCount + " sub=" + m.subMeshCount + " tris=" + (m.triangles.Length / 3) + " blendshapes=" + m.blendShapeCount + " bones=" + (smr != null && smr.bones != null ? smr.bones.Length : 0) + " bindposes=" + m.bindposes.Length + " isReadable=" + m.isReadable); var uv = m.uv; if (uv != null && uv.Length > 0) { float mnx = 9e9f, mxx = -9e9f, mny = 9e9f, mxy = -9e9f; for (int i = 0; i < uv.Length; i++) { if (uv[i].x < mnx) mnx = uv[i].x; if (uv[i].x > mxx) mxx = uv[i].x; if (uv[i].y < mny) mny = uv[i].y; if (uv[i].y > mxy) mxy = uv[i].y; } sb.AppendLine(" uv0 range x[" + mnx.ToString("F3") + "," + mxx.ToString("F3") + "] y[" + mny.ToString("F3") + "," + mxy.ToString("F3") + "]" + " uv2=" + (m.uv2 != null && m.uv2.Length > 0) + " colors=" + (m.colors != null && m.colors.Length > 0) + " tangents=" + (m.tangents != null && m.tangents.Length > 0) + " normals=" + (m.normals != null && m.normals.Length > 0)); } } var mats = r.sharedMaterials; for (int i = 0; i < mats.Length; i++) { var mt = mats[i]; if (mt == null) { sb.AppendLine(" mat[" + i + "] = null"); continue; } var tex = mt.HasProperty("_BaseMap") ? mt.GetTexture("_BaseMap") : (mt.HasProperty("_MainTex") ? mt.GetTexture("_MainTex") : null); var stex = mt.HasProperty("_ShadowBaseMap") ? mt.GetTexture("_ShadowBaseMap") : null; sb.AppendLine(" mat[" + i + "] " + mt.name + " shader=" + mt.shader.name + " path=" + UnityEditor.AssetDatabase.GetAssetPath(mt) + " base=" + (tex != null ? UnityEditor.AssetDatabase.GetAssetPath(tex) : "-") + " shadowbase=" + (stex != null ? UnityEditor.AssetDatabase.GetAssetPath(stex) : "-")); } } sb.AppendLine(); sb.AppendLine("=== 원본 텍스처 임포트 ==="); string[] texPaths = { "Assets/WL/Look/Character/Textures/M05_WL.png", "Assets/WL/Look/Character/Textures/Skin_WL.png", "Assets/WL/Look/Character/Textures/Hair05_WL.png", "Assets/WL/Look/Character/Textures/face02_WL.png", "Assets/WL/Look/Character/Textures/face02_V1.png", "Assets/WL/Look/Character/Textures/Hair05_V1.png", }; foreach (var p in texPaths) { var ti = UnityEditor.AssetImporter.GetAtPath(p) as UnityEditor.TextureImporter; var t = UnityEditor.AssetDatabase.LoadAssetAtPath(p); if (ti == null) { sb.AppendLine(p + " : 없음"); continue; } sb.AppendLine(p + " : maxSize=" + ti.maxTextureSize + " filter=" + ti.filterMode + " mip=" + ti.mipmapEnabled + " sRGB=" + ti.sRGBTexture + " readable=" + ti.isReadable + " npot=" + ti.npotScale + " actual=" + (t != null ? t.width + "x" + t.height : "?") + " fmt=" + (t != null ? t.format.ToString() : "?")); } sb.AppendLine(); sb.AppendLine("=== SO 현재값 ==="); var so = UnityEditor.AssetDatabase.LoadAssetAtPath("Assets/WL/Look/Character/Resources/WL/WLCharacterLookSettings.asset"); if (so != null) { sb.AppendLine("enabled_=" + so.enabled_ + " mode=" + so.mode + " n=" + (so.originals != null ? so.originals.Length : 0)); for (int i = 0; i < (so.originals != null ? so.originals.Length : 0); i++) sb.AppendLine(" [" + i + "] orig=" + (so.originals[i] != null ? so.originals[i].name : "-") + " m1=" + (so.mode1 != null && i < so.mode1.Length && so.mode1[i] != null ? so.mode1[i].name : "-") + " m2=" + (so.mode2 != null && i < so.mode2.Length && so.mode2[i] != null ? so.mode2[i].name : "-") + " m3=" + (so.mode3 != null && i < so.mode3.Length && so.mode3[i] != null ? so.mode3[i].name : "-")); } sb.AppendLine(); sb.AppendLine("=== 아레나 씬 카메라/캐릭터 ==="); sb.AppendLine("scene=Assets/WL/Look/Arena/Scenes/WL_ArenaProto.unity"); System.IO.File.WriteAllText(Out, sb.ToString()); return "written " + Out + " (" + sb.Length + " chars)"; } }