// WL-816n — 던전 터레인 머티리얼 프로퍼티 + 풀 후보 오브젝트 탐색 public static class WL816n_Probe2 { public static void Run() { var sb = new System.Text.StringBuilder(); var sc = UnityEngine.SceneManagement.SceneManager.GetActiveScene(); if (sc.name != "WL_Dungeon01") sc = UnityEditor.SceneManagement.EditorSceneManager.OpenScene( "Assets/WL/Island/Scenes/WL_Dungeon01.unity", UnityEditor.SceneManagement.OpenSceneMode.Single); var t = UnityEngine.Object.FindFirstObjectByType(); var m = t != null ? t.materialTemplate : null; if (m != null) { sb.AppendLine("TERRAIN MAT " + m.name + " path=" + UnityEditor.AssetDatabase.GetAssetPath(m) + " sh=" + m.shader.name); int n = m.shader.GetPropertyCount(); for (int i = 0; i < n; i++) { var pn = m.shader.GetPropertyName(i); var ty = m.shader.GetPropertyType(i); if (ty == UnityEngine.Rendering.ShaderPropertyType.Color) sb.AppendLine(" COL " + pn + " = " + Hex(m.GetColor(pn))); else if (ty == UnityEngine.Rendering.ShaderPropertyType.Float || ty == UnityEngine.Rendering.ShaderPropertyType.Range) sb.AppendLine(" F " + pn + " = " + m.GetFloat(pn)); else if (ty == UnityEngine.Rendering.ShaderPropertyType.Vector) sb.AppendLine(" V " + pn + " = " + m.GetVector(pn)); else if (ty == UnityEngine.Rendering.ShaderPropertyType.Texture) { var tx = m.GetTexture(pn); sb.AppendLine(" TEX " + pn + " = " + (tx ? tx.name + " | " + UnityEditor.AssetDatabase.GetAssetPath(tx) : "null")); } } } sb.AppendLine("--- 풀/식생 후보 (오브젝트·메시 이름) ---"); var rs = UnityEngine.Object.FindObjectsByType( UnityEngine.FindObjectsInactive.Include, UnityEngine.FindObjectsSortMode.None); var cnt = new System.Collections.Generic.Dictionary(); foreach (var r in rs) { string mn = r.sharedMaterial ? r.sharedMaterial.name : "null"; string key = r.name + " | mat=" + mn; var lower = (r.name + " " + mn).ToLower(); if (lower.Contains("grass") || lower.Contains("plant") || lower.Contains("bush") || lower.Contains("flower") || lower.Contains("fern") || lower.Contains("weed") || lower.Contains("foliage") || lower.Contains("tree")) { if (!cnt.ContainsKey(key)) cnt[key] = 0; cnt[key]++; } } foreach (var kv in cnt) sb.AppendLine(" " + kv.Key + " x" + kv.Value); sb.AppendLine(" (총 렌더러 " + rs.Length + ")"); sb.AppendLine("--- 전체 머티리얼 목록(고유) ---"); var mats = new System.Collections.Generic.SortedDictionary(); foreach (var r in rs) foreach (var mm in r.sharedMaterials) if (mm != null && !mats.ContainsKey(mm.name)) mats[mm.name] = UnityEditor.AssetDatabase.GetAssetPath(mm); foreach (var kv in mats) sb.AppendLine(" " + kv.Key + " <- " + kv.Value); System.IO.File.WriteAllText("AgentScripts/WL816n_PROBE2.txt", sb.ToString()); UnityEngine.Debug.Log("[816n] probe2 done"); } static string Hex(UnityEngine.Color c) { return "#" + UnityEngine.ColorUtility.ToHtmlStringRGB(c) + "(" + c.r.ToString("F3") + "," + c.g.ToString("F3") + "," + c.b.ToString("F3") + ")"; } }