72 lines
3.7 KiB
C#
72 lines
3.7 KiB
C#
|
|
// 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<UnityEngine.Terrain>();
|
||
|
|
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.Renderer>(
|
||
|
|
UnityEngine.FindObjectsInactive.Include, UnityEngine.FindObjectsSortMode.None);
|
||
|
|
var cnt = new System.Collections.Generic.Dictionary<string, int>();
|
||
|
|
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<string, string>();
|
||
|
|
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") + ")";
|
||
|
|
}
|
||
|
|
}
|