85 lines
4.3 KiB
C#
85 lines
4.3 KiB
C#
|
|
// WL772_PlayCheck.cs — PD 지시 #772 M4 : Play 진입 후 맵 1개 상태 실측 (읽기 전용)
|
||
|
|
// unity command run_script --file AgentScripts/WL772_PlayCheck.cs --entry WL772_PlayCheck.Run
|
||
|
|
using System;
|
||
|
|
using System.Linq;
|
||
|
|
using System.Text;
|
||
|
|
using UnityEngine;
|
||
|
|
|
||
|
|
public static class WL772_PlayCheck
|
||
|
|
{
|
||
|
|
public static object Run()
|
||
|
|
{
|
||
|
|
if (!Application.isPlaying) return "not playing";
|
||
|
|
var sb = new StringBuilder();
|
||
|
|
|
||
|
|
// 로드된 맵 루트 = MapData 를 가진 오브젝트
|
||
|
|
var mds = UnityEngine.Object.FindObjectsByType<MapData>(FindObjectsInactive.Include, FindObjectsSortMode.None);
|
||
|
|
sb.Append("map=").Append(mds.Length > 0 ? mds[0].gameObject.name : "(none)");
|
||
|
|
|
||
|
|
var pcs = UnityEngine.Object.FindObjectsByType<MyActor>(FindObjectsInactive.Exclude, FindObjectsSortMode.None);
|
||
|
|
sb.Append(" pc=").Append(pcs.Length > 0 ? pcs[0].transform.position.ToString("F2") : "(none)");
|
||
|
|
if (pcs.Length > 0)
|
||
|
|
{
|
||
|
|
var na = pcs[0].GetComponent<UnityEngine.AI.NavMeshAgent>();
|
||
|
|
sb.Append(" onNav=").Append(na != null ? na.isOnNavMesh.ToString() : "no-agent");
|
||
|
|
}
|
||
|
|
|
||
|
|
int spawners = UnityEngine.Object.FindObjectsByType<MobControlMgr>(FindObjectsInactive.Include, FindObjectsSortMode.None).Length;
|
||
|
|
int mobsAll = UnityEngine.Object.FindObjectsByType<MobActor>(FindObjectsInactive.Include, FindObjectsSortMode.None).Length;
|
||
|
|
int mobsAct = UnityEngine.Object.FindObjectsByType<MobActor>(FindObjectsInactive.Exclude, FindObjectsSortMode.None).Length;
|
||
|
|
sb.Append(" spawners=").Append(spawners).Append(" mobsActive=").Append(mobsAct).Append("/pooled=").Append(mobsAll);
|
||
|
|
|
||
|
|
int magenta = 0, rends = 0;
|
||
|
|
foreach (var r in UnityEngine.Object.FindObjectsByType<Renderer>(FindObjectsInactive.Exclude, FindObjectsSortMode.None))
|
||
|
|
{
|
||
|
|
rends++;
|
||
|
|
foreach (var m in r.sharedMaterials)
|
||
|
|
if (m == null || m.shader == null || m.shader.name == "Hidden/InternalErrorShader") magenta++;
|
||
|
|
}
|
||
|
|
sb.Append(" renderers=").Append(rends).Append(" magenta=").Append(magenta);
|
||
|
|
|
||
|
|
var tri = UnityEngine.AI.NavMesh.CalculateTriangulation();
|
||
|
|
sb.Append(" navTris=").Append(tri.indices.Length / 3);
|
||
|
|
return sb.ToString();
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
// 마젠타(셰이더 깨짐/null 머티리얼) 렌더러를 이름·씬·머티리얼까지 열거
|
||
|
|
public static object Magenta()
|
||
|
|
{
|
||
|
|
if (!Application.isPlaying) return "not playing";
|
||
|
|
var sb = new StringBuilder();
|
||
|
|
var byKey = new System.Collections.Generic.Dictionary<string,int>();
|
||
|
|
foreach (var r in UnityEngine.Object.FindObjectsByType<Renderer>(FindObjectsInactive.Exclude, FindObjectsSortMode.None))
|
||
|
|
{
|
||
|
|
foreach (var m in r.sharedMaterials)
|
||
|
|
{
|
||
|
|
bool bad = (m == null) || (m.shader == null) || m.shader.name == "Hidden/InternalErrorShader";
|
||
|
|
if (!bad) continue;
|
||
|
|
string path = r.name; var t2 = r.transform;
|
||
|
|
int guard = 0;
|
||
|
|
while (t2.parent != null && guard++ < 6) { t2 = t2.parent; path = t2.name + "/" + path; }
|
||
|
|
string key = r.gameObject.scene.name + " | " + path + " | " + (m == null ? "(null material)" : m.name + " [" + (m.shader==null?"(null shader)":m.shader.name) + "]") + " | " + r.GetType().Name;
|
||
|
|
byKey[key] = byKey.TryGetValue(key, out var v) ? v + 1 : 1;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
foreach (var kv in byKey) sb.AppendLine(kv.Value + " x " + kv.Key);
|
||
|
|
sb.AppendLine("고유 " + byKey.Count + " · 합계 " + System.Linq.Enumerable.Sum(byKey.Values));
|
||
|
|
return sb.ToString();
|
||
|
|
}
|
||
|
|
|
||
|
|
// 카메라 각도 고정(캡처 재현용)
|
||
|
|
public static object Cam(float rotateAround)
|
||
|
|
{
|
||
|
|
if (!Application.isPlaying) return "not playing";
|
||
|
|
var cam = Camera.main;
|
||
|
|
if (cam == null) return "no camera";
|
||
|
|
var rc = cam.GetComponents<Component>().FirstOrDefault(c => c != null && c.GetType().Name == "RealCamera");
|
||
|
|
if (rc == null) return "no RealCamera";
|
||
|
|
var f = rc.GetType().GetField("rotateAround", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
|
||
|
|
if (f == null) return "no rotateAround";
|
||
|
|
f.SetValue(rc, rotateAround);
|
||
|
|
return "rotateAround=" + rotateAround;
|
||
|
|
}
|
||
|
|
}
|