Project_WL/AgentScripts/WL816f_Probe.cs

114 lines
6.3 KiB
C#

// 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<UnityEngine.Camera>(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<UnityEngine.Rendering.Universal.UniversalAdditionalCameraData>() != null
? ("post=" + c.GetComponent<UnityEngine.Rendering.Universal.UniversalAdditionalCameraData>().renderPostProcessing
+ " volMask=0x" + c.GetComponent<UnityEngine.Rendering.Universal.UniversalAdditionalCameraData>().volumeLayerMask.value.ToString("X")
+ " type=" + c.GetComponent<UnityEngine.Rendering.Universal.UniversalAdditionalCameraData>().renderType)
: "없음"));
// 라이트
foreach (var r in roots)
foreach (var l in r.GetComponentsInChildren<UnityEngine.Light>(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<UnityEngine.Rendering.Volume>(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<UnityEngine.MonoBehaviour>(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;
}
}