125 lines
5.5 KiB
C#
125 lines
5.5 KiB
C#
// WL785_Tune.cs — #785 리본 룩 실시간 튜닝 (Play 중 사용 · 에셋 인스턴스 메모리 수정)
|
|
// unity command run_script --file AgentScripts/WL785_Tune.cs --entry WL785_Tune.Set \
|
|
// --args '[intensity, headAlpha, midAlpha, edgeSoft, tailSoft, life, hold]'
|
|
// unity command run_script --file AgentScripts/WL785_Tune.cs --entry WL785_Tune.Show
|
|
//
|
|
// 왜 별도 스크립트인가: WL785_Setup 은 Play 중이면 중단하도록 막아 뒀다(에셋 집행용).
|
|
// 이건 "보면서 값을 고르는" 용도라 Play 중에만 의미가 있다. 고른 값은 Play 를 멈춘 뒤
|
|
// WL785_Setup.ApplySettings 의 기본값에 반영해 디스크에 굽는다(SOT 는 에셋 · C45).
|
|
using System.Text;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
public static class WL785_Tune
|
|
{
|
|
const string MatPath = "Assets/WL/Combat/Materials/M_WL_BladeRibbon.mat";
|
|
|
|
public static object Set(float intensity, float headAlpha, float midAlpha,
|
|
float edgeSoft, float tailSoft, float life, float hold)
|
|
{
|
|
var s = WL.Combat.SlashTrailSettings.Instance;
|
|
if (s == null) return "SlashTrailSettings.Instance null (Play 중이어야 한다)";
|
|
|
|
s.colorIntensity = intensity;
|
|
s.fadeSeconds = life;
|
|
s.fadeHoldRatio = hold;
|
|
|
|
var g = new Gradient();
|
|
g.SetKeys(
|
|
new[]
|
|
{
|
|
new GradientColorKey(new Color(0.42f, 0.16f, 0.90f), 0.00f),
|
|
new GradientColorKey(new Color(0.20f, 0.45f, 1.00f), 0.32f),
|
|
new GradientColorKey(new Color(1.00f, 0.52f, 0.14f), 0.72f),
|
|
new GradientColorKey(new Color(1.00f, 0.85f, 0.42f), 1.00f),
|
|
},
|
|
new[]
|
|
{
|
|
new GradientAlphaKey(0.00f, 0.00f),
|
|
new GradientAlphaKey(midAlpha, 0.28f),
|
|
new GradientAlphaKey(headAlpha, 0.70f),
|
|
new GradientAlphaKey(headAlpha, 1.00f),
|
|
});
|
|
s.gradientAlongSwing = g;
|
|
|
|
var mat = s.materialAdditive != null ? s.materialAdditive : AssetDatabase.LoadAssetAtPath<Material>(MatPath);
|
|
if (mat != null)
|
|
{
|
|
mat.SetFloat("_EdgeSoftness", edgeSoft);
|
|
mat.SetFloat("_TailSoftness", tailSoft);
|
|
}
|
|
return Show();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 색 축 비중과 알파 곡선을 함께 조정한다.
|
|
/// bladeW 가 0.5 면 잔상축(꼬리 보라)과 칼날축(안쪽 주황)을 반반 섞는데,
|
|
/// 보라와 노랑을 반반 섞으면 회색이 된다(실측 — 리본이 흰색으로 보이던 원인).
|
|
/// 그래서 칼날축을 주(0.75~1.0)로 두고 잔상축은 꼬리 색조만 얹는 쪽이 참고 이미지에 가깝다.
|
|
/// </summary>
|
|
public static object Look(float intensity, float bladeW, float aMid, float aHead,
|
|
float edgeSoft, float tailSoft, float hold)
|
|
{
|
|
var s = WL.Combat.SlashTrailSettings.Instance;
|
|
if (s == null) return "settings null";
|
|
s.colorIntensity = intensity;
|
|
s.bladeGradientWeight = bladeW;
|
|
s.fadeHoldRatio = hold;
|
|
|
|
var g = new Gradient();
|
|
g.SetKeys(
|
|
new[]
|
|
{
|
|
new GradientColorKey(new Color(0.42f, 0.16f, 0.90f), 0.00f),
|
|
new GradientColorKey(new Color(0.20f, 0.45f, 1.00f), 0.32f),
|
|
new GradientColorKey(new Color(1.00f, 0.52f, 0.14f), 0.72f),
|
|
new GradientColorKey(new Color(1.00f, 0.85f, 0.42f), 1.00f),
|
|
},
|
|
new[]
|
|
{
|
|
new GradientAlphaKey(0.00f, 0.00f),
|
|
new GradientAlphaKey(aMid, 0.18f),
|
|
new GradientAlphaKey(aHead, 0.55f),
|
|
new GradientAlphaKey(aHead, 1.00f),
|
|
});
|
|
s.gradientAlongSwing = g;
|
|
|
|
var mat = s.materialAdditive;
|
|
if (mat != null)
|
|
{
|
|
mat.SetFloat("_EdgeSoftness", edgeSoft);
|
|
mat.SetFloat("_TailSoftness", tailSoft);
|
|
mat.SetFloat("_Intensity", 1f);
|
|
}
|
|
return Show();
|
|
}
|
|
|
|
/// <summary>블렌드 모드만 바꾼다. 1/10 = 프리멀티 알파, 1/1 = 순수 가산.</summary>
|
|
public static object Blend(int src, int dst)
|
|
{
|
|
var s = WL.Combat.SlashTrailSettings.Instance;
|
|
var mat = s != null && s.materialAdditive != null ? s.materialAdditive : AssetDatabase.LoadAssetAtPath<Material>(MatPath);
|
|
if (mat == null) return "material null";
|
|
mat.SetFloat("_SrcBlend", src);
|
|
mat.SetFloat("_DstBlend", dst);
|
|
return "blend src=" + src + " dst=" + dst;
|
|
}
|
|
|
|
public static object Show()
|
|
{
|
|
var s = WL.Combat.SlashTrailSettings.Instance;
|
|
if (s == null) return "settings null";
|
|
var mat = s.materialAdditive;
|
|
var sb = new StringBuilder();
|
|
sb.AppendLine("intensity=" + s.colorIntensity + " life=" + s.fadeSeconds + " hold=" + s.fadeHoldRatio +
|
|
" bladeW=" + s.bladeGradientWeight + " width=" + s.widthScale + " tailW=" + s.tailWidthRatio);
|
|
if (mat != null)
|
|
sb.AppendLine("mat edge=" + mat.GetFloat("_EdgeSoftness") + " head=" + mat.GetFloat("_HeadSoftness") +
|
|
" tail=" + mat.GetFloat("_TailSoftness") + " intens=" + mat.GetFloat("_Intensity") +
|
|
" src=" + mat.GetFloat("_SrcBlend") + " dst=" + mat.GetFloat("_DstBlend"));
|
|
for (float t = 0f; t <= 1.001f; t += 0.25f)
|
|
sb.AppendLine(" swing t=" + t.ToString("0.00") + " -> " + s.gradientAlongSwing.Evaluate(t));
|
|
return sb.ToString();
|
|
}
|
|
}
|