// WL-816f — ① PD 실행 경로(로그인 → Load_Map(900) → Level01 Additive) 구조 실측 // 에디트 모드 전용. InGame 씬이 섬 위에 무엇을 얹는지(조명·Volume·카메라)를 본다. public static class WL816f_Probe { public static void Run() { var sb = new System.Text.StringBuilder(); // 1) InGame 씬(= PD 경로의 활성 씬)을 연다 var sc = UnityEditor.SceneManagement.EditorSceneManager.OpenScene( "Assets/Scenes/InGame.unity", UnityEditor.SceneManagement.OpenSceneMode.Single); sb.AppendLine("=== InGame.unity (PD 경로의 ACTIVE 씬) ==="); Dump(sb, sc); // 2) Level01 을 Additive 로 얹는다 (= Load_Map(900) 과 같은 구조) var sc2 = UnityEditor.SceneManagement.EditorSceneManager.OpenScene( "Assets/FarmingIsland/Scenes/Level01.unity", UnityEditor.SceneManagement.OpenSceneMode.Additive); sb.AppendLine(); sb.AppendLine("=== Level01.unity (Additive) ==="); Dump(sb, sc2); sb.AppendLine(); sb.AppendLine("active scene = " + UnityEngine.SceneManagement.SceneManager.GetActiveScene().name); sb.AppendLine("RenderSettings(활성 씬 기준) ambient=" + UnityEngine.RenderSettings.ambientMode + " light=" + UnityEngine.RenderSettings.ambientLight + " sky=" + UnityEngine.RenderSettings.ambientSkyColor + " skyboxMat=" + (UnityEngine.RenderSettings.skybox ? UnityEngine.RenderSettings.skybox.name : "없음") + " fog=" + UnityEngine.RenderSettings.fog); // 3) 레이어 이름 확인 (풀은 Default 레이어에 그려진다) sb.AppendLine("layer Default=" + UnityEngine.LayerMask.NameToLayer("Default")); for (int i = 0; i < 32; i++) { string n = UnityEngine.LayerMask.LayerToName(i); if (!string.IsNullOrEmpty(n)) sb.Append(i + ":" + n + " "); } sb.AppendLine(); System.IO.File.WriteAllText("AgentScripts/WL816f_PROBE.txt", sb.ToString()); UnityEngine.Debug.Log(sb.ToString()); } static void Dump(System.Text.StringBuilder sb, UnityEngine.SceneManagement.Scene sc) { var roots = sc.GetRootGameObjects(); sb.AppendLine("roots=" + roots.Length); for (int i = 0; i < roots.Length; i++) sb.Append(roots[i].name + (roots[i].activeSelf ? "" : "(off)") + " · "); sb.AppendLine(); // 카메라 foreach (var r in roots) foreach (var c in r.GetComponentsInChildren(true)) sb.AppendLine(" CAM " + Path(c.transform) + " active=" + c.gameObject.activeInHierarchy + "/" + c.enabled + " depth=" + c.depth + " mask=0x" + c.cullingMask.ToString("X") + " clear=" + c.clearFlags + " ortho=" + c.orthographic + " fov=" + c.fieldOfView + " far=" + c.farClipPlane + " urp=" + (c.GetComponent() != null ? ("post=" + c.GetComponent().renderPostProcessing + " volMask=0x" + c.GetComponent().volumeLayerMask.value.ToString("X") + " type=" + c.GetComponent().renderType) : "없음")); // 라이트 foreach (var r in roots) foreach (var l in r.GetComponentsInChildren(true)) sb.AppendLine(" LIGHT " + Path(l.transform) + " active=" + l.gameObject.activeInHierarchy + "/" + l.enabled + " " + l.type + " col=" + l.color + " I=" + l.intensity + " sh=" + l.shadows + " rot=" + l.transform.eulerAngles); // Volume (포스트) foreach (var r in roots) foreach (var v in r.GetComponentsInChildren(true)) sb.AppendLine(" VOL " + Path(v.transform) + " active=" + v.gameObject.activeInHierarchy + "/" + v.enabled + " global=" + v.isGlobal + " prio=" + v.priority + " weight=" + v.weight + " profile=" + (v.sharedProfile ? v.sharedProfile.name + " [" + Comps(v.sharedProfile) + "]" : "없음") + " layer=" + v.gameObject.layer); // RenderSettings 는 씬별이다 — 씬을 활성으로 만들고 읽는다 var prev = UnityEngine.SceneManagement.SceneManager.GetActiveScene(); UnityEngine.SceneManagement.SceneManager.SetActiveScene(sc); sb.AppendLine(" RS ambient=" + UnityEngine.RenderSettings.ambientMode + " light=" + UnityEngine.RenderSettings.ambientLight + " sky=" + UnityEngine.RenderSettings.ambientSkyColor + " I=" + UnityEngine.RenderSettings.ambientIntensity + " skyboxMat=" + (UnityEngine.RenderSettings.skybox ? UnityEngine.RenderSettings.skybox.name : "없음") + " fog=" + UnityEngine.RenderSettings.fog + " sun=" + (UnityEngine.RenderSettings.sun ? UnityEngine.RenderSettings.sun.name : "없음")); if (prev.IsValid() && prev != sc) UnityEngine.SceneManagement.SceneManager.SetActiveScene(prev); // MapData / GlobalVolumeMgr / CheckShadow 같은 룩 관여 컴포넌트 foreach (var r in roots) foreach (var m in r.GetComponentsInChildren(true)) { if (m == null) continue; string t = m.GetType().Name; if (t == "MapData" || t == "GlobalVolumeMgr" || t == "CheckShadow" || t == "SetSkybox" || t == "GraphicsManager" || t == "UniversalRenderPipelineAsset") sb.AppendLine(" COMP " + t + " @ " + Path(m.transform) + " active=" + m.gameObject.activeInHierarchy + "/" + m.enabled); } } static string Comps(UnityEngine.Rendering.VolumeProfile p) { var s = ""; for (int i = 0; i < p.components.Count; i++) s += p.components[i].GetType().Name + (p.components[i].active ? "" : "(off)") + ","; return s; } static string Path(UnityEngine.Transform t) { string s = t.name; while (t.parent != null) { t = t.parent; s = t.name + "/" + s; } return s; } }