47 lines
3.3 KiB
C#
47 lines
3.3 KiB
C#
// WL761_SlashPrefab.cs — PD 지시 #761 실측 도구 (에디트 모드 · Assets 무수정)
|
|
// unity command run_script --file AgentScripts/WL761_SlashPrefab.cs --entry WL761_SlashPrefab.Dump --args '["Effect_Slash_10101_1"]'
|
|
// unity command run_script --file AgentScripts/WL761_SlashPrefab.cs --entry WL761_SlashPrefab.DumpMany --args '["Effect_Slash_10101_1,Effect_Slash_10101_3,Effect_Slash_10102_1,Effect_Slash_10501_1,Effect_Slash_10502_1"]'
|
|
// 슬래시 이펙트 프리팹의 이미터별 로컬 자세(오일러) · 렌더 모드 · 메시 · 셰이프 · 시뮬레이션 공간 · 머티리얼/텍스처를 덤프한다.
|
|
// "무기 방향에 맞게 배치" 를 위해 프리팹의 크레센트가 어느 로컬 평면/축에 그려지는지 파악하는 용도.
|
|
using System.Linq;
|
|
using System.Text;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
public static class WL761_SlashPrefab
|
|
{
|
|
public static object DumpMany(string csv)
|
|
{
|
|
var sb = new StringBuilder();
|
|
foreach (var n in csv.Split(',')) sb.AppendLine(Dump(n.Trim()).ToString());
|
|
return sb.ToString();
|
|
}
|
|
|
|
public static object Dump(string prefabName)
|
|
{
|
|
var guids = AssetDatabase.FindAssets(prefabName + " t:Prefab");
|
|
string path = guids.Select(AssetDatabase.GUIDToAssetPath).FirstOrDefault(p => System.IO.Path.GetFileNameWithoutExtension(p) == prefabName);
|
|
if (path == null) return "prefab not found: " + prefabName;
|
|
var go = AssetDatabase.LoadAssetAtPath<GameObject>(path);
|
|
var sb = new StringBuilder();
|
|
sb.AppendLine("== " + prefabName + " (" + path + ") root euler=" + go.transform.localEulerAngles.ToString("F0") + " scale=" + go.transform.localScale.ToString("F2"));
|
|
foreach (var ps in go.GetComponentsInChildren<ParticleSystem>(true))
|
|
{
|
|
var t = ps.transform; var r = ps.GetComponent<ParticleSystemRenderer>();
|
|
var main = ps.main; var shape = ps.shape; var vel = ps.velocityOverLifetime;
|
|
string mat = r != null && r.sharedMaterial != null ? r.sharedMaterial.name : "-";
|
|
string tex = r != null && r.sharedMaterial != null && r.sharedMaterial.mainTexture != null ? r.sharedMaterial.mainTexture.name : "-";
|
|
string mesh = r != null && r.renderMode == ParticleSystemRenderMode.Mesh && r.mesh != null ? r.mesh.name : "";
|
|
sb.AppendLine(string.Format(" {0,-18} on={1} depth={2} localEuler={3} localPos={4} scale={5} sim={6} render={7}{8} align={9} startRot3D={10} startSize={11:F2} life={12:F2} loop={13} shape={14}{15} mat={16} tex={17}",
|
|
t.name, r != null && r.enabled, Depth(t, go.transform), t.localEulerAngles.ToString("F0"), t.localPosition.ToString("F2"), t.localScale.ToString("F1"),
|
|
main.simulationSpace, r != null ? r.renderMode.ToString() : "-", mesh != "" ? "(" + mesh + ")" : "", r != null ? r.alignment.ToString() : "-",
|
|
main.startRotation3D, main.startSize.constantMax, main.startLifetime.constantMax, main.loop,
|
|
shape.enabled ? shape.shapeType.ToString() : "off", shape.enabled ? " shapeRot=" + shape.rotation.ToString("F0") : "",
|
|
mat, tex));
|
|
}
|
|
return sb.ToString();
|
|
}
|
|
|
|
static int Depth(Transform t, Transform root) { int d = 0; while (t != null && t != root) { d++; t = t.parent; } return d; }
|
|
}
|