// WL-814b — Assets/3DPixelCamera/URP.unitypackage 해제(BuiltIn 은 절대 건드리지 않는다).
// 게임 코드 아님. run_script 전용.
public static class WL814b_Import
{
const string Pkg = "Assets/3DPixelCamera/URP.unitypackage";
const string Dir = "Assets/3DPixelCamera/URP";
/// 1단계 — 스냅샷을 찍고 비동기 임포트를 시작한다.
public static string Run()
{
if (!System.IO.File.Exists(Pkg)) return "FAIL 패키지 없음: " + Pkg;
var sb = new System.Text.StringBuilder();
sb.AppendLine("[WL814b-import] before: URP 폴더 존재=" + System.IO.Directory.Exists(Dir));
UnityEditor.AssetDatabase.ImportPackage(Pkg, false); // false = 대화상자 없이 전부
sb.AppendLine("[WL814b-import] ImportPackage 호출됨(비동기) — 다음 단계에서 Verify");
return sb.ToString();
}
/// 2단계 — 생긴 파일 목록·GUID 를 뱉는다.
public static string Verify()
{
UnityEditor.AssetDatabase.Refresh();
var sb = new System.Text.StringBuilder();
if (!System.IO.Directory.Exists(Dir)) { sb.AppendLine("FAIL URP 폴더 없음"); return sb.ToString(); }
var files = System.IO.Directory.GetFiles(Dir, "*", System.IO.SearchOption.AllDirectories);
System.Array.Sort(files);
int n = 0;
foreach (var f in files)
{
var rel = f.Replace('\\', '/');
int i = rel.IndexOf("Assets/");
if (i >= 0) rel = rel.Substring(i);
if (rel.EndsWith(".meta")) { sb.AppendLine(" meta " + rel); continue; }
n++;
var guid = UnityEditor.AssetDatabase.AssetPathToGUID(rel);
var t = UnityEditor.AssetDatabase.GetMainAssetTypeAtPath(rel);
sb.AppendLine(" ASSET " + rel + " | guid=" + guid + " | type=" + (t == null ? "?" : t.Name)
+ " | " + new System.IO.FileInfo(f).Length + " B");
}
sb.AppendLine("[WL814b-import] 에셋 " + n + "개(+meta) · BuiltIn 해제 0");
// 프리팹 구조 표
var pf = UnityEditor.AssetDatabase.LoadAssetAtPath(Dir + "/PixelCameraSystem.prefab");
if (pf == null) sb.AppendLine("FAIL PixelCameraSystem.prefab 로드 실패");
else { sb.AppendLine("[구조]"); Dump(pf.transform, 0, sb); }
return sb.ToString();
}
static void Dump(UnityEngine.Transform t, int depth, System.Text.StringBuilder sb)
{
sb.Append(' ', depth * 2).Append("- ").Append(t.name).Append(" layer=").Append(t.gameObject.layer);
var comps = t.GetComponents();
sb.Append(" [");
for (int i = 0; i < comps.Length; i++)
{
if (comps[i] == null) { sb.Append(" "); continue; }
sb.Append(comps[i].GetType().Name).Append(' ');
}
sb.Append("]");
var cam = t.GetComponent();
if (cam != null)
sb.Append(" cam(ortho=").Append(cam.orthographic ? 1 : 0).Append(" size=").Append(cam.orthographicSize)
.Append(" depth=").Append(cam.depth).Append(" mask=").Append(cam.cullingMask)
.Append(" clear=").Append((int)cam.clearFlags).Append(" near=").Append(cam.nearClipPlane)
.Append(" far=").Append(cam.farClipPlane).Append(")");
var ucd = t.GetComponent();
if (ucd != null) sb.Append(" urp(type=").Append(ucd.renderType).Append(" post=").Append(ucd.renderPostProcessing ? 1 : 0).Append(")");
var mr = t.GetComponent();
if (mr != null) sb.Append(" mat=").Append(mr.sharedMaterial == null ? "null" : mr.sharedMaterial.name);
var lp = t.localPosition; var ls = t.localScale;
sb.Append(" lp=(").Append(lp.x.ToString("0.####")).Append(',').Append(lp.y.ToString("0.####")).Append(',').Append(lp.z.ToString("0.####")).Append(')');
sb.Append(" ls=(").Append(ls.x.ToString("0.####")).Append(',').Append(ls.y.ToString("0.####")).Append(',').Append(ls.z.ToString("0.####")).Append(')');
sb.AppendLine();
for (int i = 0; i < t.childCount; i++) Dump(t.GetChild(i), depth + 1, sb);
}
}