Project_WL/AgentScripts/WL814q_Probe.cs

79 lines
4.3 KiB
C#
Raw Normal View History

public static class WL814q_Probe
{
static string V(UnityEngine.Vector3 v)
{
return string.Format("({0:F3},{1:F3},{2:F3})", v.x, v.y, v.z);
}
public static string Run()
{
var sb = new System.Text.StringBuilder();
string[] names = { "Arch_Large", "Arch_Small", "House", "Light_Post", "Slab", "Stone_1", "Stone_2", "Tree", "Water_Plane", "Windmill" };
sb.AppendLine("prefab | worldSize(x,y,z) m @scale1 | center | tris | mats | renderers | colliders");
foreach (var n in names)
{
string path = "Assets/3DPixelArtEnvironment/Prefabs/" + n + ".prefab";
var go = UnityEditor.AssetDatabase.LoadAssetAtPath<UnityEngine.GameObject>(path);
if (go == null) { sb.AppendLine(n + " | NOT FOUND"); continue; }
var inst = (UnityEngine.GameObject)UnityEditor.PrefabUtility.InstantiatePrefab(go);
inst.transform.position = UnityEngine.Vector3.zero;
inst.transform.rotation = UnityEngine.Quaternion.identity;
var rs = inst.GetComponentsInChildren<UnityEngine.Renderer>(true);
var b = new UnityEngine.Bounds(inst.transform.position, UnityEngine.Vector3.zero);
bool first = true;
int tris = 0;
var mats = new System.Collections.Generic.HashSet<string>();
foreach (var r in rs)
{
if (first) { b = r.bounds; first = false; } else b.Encapsulate(r.bounds);
foreach (var m in r.sharedMaterials) if (m != null) mats.Add(m.name);
var mf = r.GetComponent<UnityEngine.MeshFilter>();
if (mf != null && mf.sharedMesh != null) tris += mf.sharedMesh.triangles.Length / 3;
}
var cols = inst.GetComponentsInChildren<UnityEngine.Collider>(true);
string ctxt = "";
foreach (var c in cols) ctxt += c.GetType().Name + ",";
sb.AppendLine(string.Format("{0} | {1} | c={2} | tris={3} | mats={4} | rend={5} | col=[{6}]",
n, V(b.size), V(b.center), tris, string.Join("/", System.Linq.Enumerable.ToArray(mats)), rs.Length, ctxt));
UnityEngine.Object.DestroyImmediate(inst);
}
// Terrain data
var td = UnityEditor.AssetDatabase.LoadAssetAtPath<UnityEngine.TerrainData>("Assets/3DPixelArtEnvironment/Demo/Demo_Terrain.asset");
if (td != null)
sb.AppendLine(string.Format("TerrainData size={0} heightmapRes={1} layers={2} detailW={3}",
V(td.size), td.heightmapResolution, td.terrainLayers.Length, td.detailWidth));
// Character prefab
var pc = UnityEditor.AssetDatabase.LoadAssetAtPath<UnityEngine.GameObject>("Assets/Res_Addr/PC/LH_M05.prefab");
if (pc != null)
{
var pi = (UnityEngine.GameObject)UnityEditor.PrefabUtility.InstantiatePrefab(pc);
pi.transform.position = UnityEngine.Vector3.zero;
var rs = pi.GetComponentsInChildren<UnityEngine.Renderer>(true);
var b = new UnityEngine.Bounds(UnityEngine.Vector3.zero, UnityEngine.Vector3.zero);
bool f = true; int tris = 0;
foreach (var r in rs)
{
if (f) { b = r.bounds; f = false; } else b.Encapsulate(r.bounds);
var smr = r as UnityEngine.SkinnedMeshRenderer;
if (smr != null && smr.sharedMesh != null) tris += smr.sharedMesh.triangles.Length / 3;
var mf = r.GetComponent<UnityEngine.MeshFilter>();
if (mf != null && mf.sharedMesh != null) tris += mf.sharedMesh.triangles.Length / 3;
}
sb.AppendLine(string.Format("LH_M05 prefabScale={0} worldSize={1} min.y={2:F4} max.y={3:F4} tris={4} rend={5}",
V(pi.transform.localScale), V(b.size), b.min.y, b.max.y, tris, rs.Length));
UnityEngine.Object.DestroyImmediate(pi);
}
else sb.AppendLine("LH_M05 NOT FOUND");
// Stage table
var st = UnityEditor.AssetDatabase.FindAssets("WLStageTable");
foreach (var g in st) sb.AppendLine("StageTable: " + UnityEditor.AssetDatabase.GUIDToAssetPath(g));
var ls = UnityEditor.AssetDatabase.FindAssets("WLLookModeSettings");
foreach (var g in ls) sb.AppendLine("LookModeSettings: " + UnityEditor.AssetDatabase.GUIDToAssetPath(g));
return sb.ToString();
}
}