Project_WL/AgentScripts/WL816k_Build.cs

84 lines
4.3 KiB
C#

// WL-816k — ① 데모 물 셰이더(Water.shadergraph) 복사본 생성 + 셰이더 속성 전수 실측
// 원본 Assets/3DPixelArtEnvironment/** 는 0줄 수정. 복사본만 만든다.
using UnityEngine;
using UnityEditor;
using System.Text;
public static class WL816k_Build
{
const string SRC = "Assets/3DPixelArtEnvironment/Materials/Water.mat";
const string DST = "Assets/WL/Look/Farm/Materials/Farm_Water_Demo.mat";
const string SO = "Assets/WL/Look/Farm/Resources/WL/WLIslandLookSettings.asset";
public static void Run()
{
var sb = new StringBuilder();
sb.AppendLine("=== WL-816k ① 데모 물 복사본 + 셰이더 속성 실측 ===");
var src = AssetDatabase.LoadAssetAtPath<Material>(SRC);
sb.AppendLine("원본 = " + (src == null ? "🔴 없음" : src.name + " · shader " + src.shader.name));
if (src == null) { Done(sb); return; }
if (AssetDatabase.LoadAssetAtPath<Material>(DST) == null)
{
bool ok = AssetDatabase.CopyAsset(SRC, DST);
sb.AppendLine("복사 " + (ok ? "성공" : "🔴 실패") + " → " + DST);
AssetDatabase.Refresh();
}
else sb.AppendLine("복사본 이미 있음 → " + DST);
var dst = AssetDatabase.LoadAssetAtPath<Material>(DST);
if (dst == null) { sb.AppendLine("🔴 복사본 로드 실패"); Done(sb); return; }
sb.AppendLine("복사본 = " + dst.name + " · shader " + (dst.shader == null ? "null" : dst.shader.name)
+ " · renderQueue " + dst.renderQueue + " · GUID " + AssetDatabase.AssetPathToGUID(DST));
// ── 셰이더 속성 전수 ────────────────────────────────────
var sh = dst.shader;
sb.AppendLine("");
sb.AppendLine("[셰이더 속성 " + ShaderUtil.GetPropertyCount(sh) + "개]");
for (int i = 0; i < ShaderUtil.GetPropertyCount(sh); i++)
{
string n = ShaderUtil.GetPropertyName(sh, i);
var t = ShaderUtil.GetPropertyType(sh, i);
string v = "?";
if (t == ShaderUtil.ShaderPropertyType.Color) v = dst.GetColor(n).ToString("F3");
else if (t == ShaderUtil.ShaderPropertyType.Vector) v = dst.GetVector(n).ToString("F3");
else if (t == ShaderUtil.ShaderPropertyType.Float || t == ShaderUtil.ShaderPropertyType.Range) v = dst.GetFloat(n).ToString("F4");
else if (t == ShaderUtil.ShaderPropertyType.TexEnv) { var tx = dst.GetTexture(n); v = tx == null ? "(없음)" : tx.name + " " + tx.width + "x" + tx.height; }
if (ShaderUtil.IsShaderPropertyHidden(sh, i)) continue;
sb.AppendLine(" " + n + " [" + t + "] = " + v);
}
sb.AppendLine("");
sb.AppendLine("[키워드] " + string.Join(" · ", dst.shaderKeywords));
// ── 지금 SO ────────────────────────────────────────────
var so = AssetDatabase.LoadAssetAtPath<ScriptableObject>(SO) as WL.Look.Farm.WLIslandLookSettings;
if (so != null)
{
sb.AppendLine("");
sb.AppendLine("[SO 지금] waterMode=" + so.waterMode
+ " · waterTo=" + (so.waterTo == null ? "null" : so.waterTo.name)
+ " · waterFrom=" + (so.waterFrom == null ? "null" : so.waterFrom.name)
+ " · shoreFoamEnabled=" + so.shoreFoamEnabled
+ " · shoreFoamWidth=" + so.shoreFoamWidth);
}
else sb.AppendLine("🔴 SO 로드 실패");
// ── 섬 물 평면 vs 데모 평면 크기 ───────────────────────
var pf = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/3DPixelArtEnvironment/Prefabs/Water_Plane.prefab");
if (pf != null)
{
var mf = pf.GetComponentInChildren<MeshFilter>();
sb.AppendLine("데모 Water_Plane: scale " + pf.transform.localScale.ToString("F2")
+ " · mesh " + (mf == null ? "?" : mf.sharedMesh.name + " bounds " + mf.sharedMesh.bounds.size.ToString("F1")));
}
Done(sb);
}
static void Done(StringBuilder sb)
{
System.IO.File.WriteAllText("AgentScripts/WL816k_BUILD.txt", sb.ToString());
Debug.Log("[816k build]\n" + sb);
}
}