Project_WL/AgentScripts/WL813y_Apply.cs

118 lines
6.4 KiB
C#

// WL-813y 적용 — 설정 에셋 값 갱신(C8/C45 · 코드 상수 0). 프리팹은 건드리지 않는다.
// run_script --file AgentScripts/WL813y_Apply.cs --entry WL813y_Apply.Assets
using System.Text;
using UnityEngine;
using UnityEditor;
using WL.UI;
public static class WL813y_Apply
{
public static string Assets()
{
var sb = new StringBuilder();
// ── ① 전투 패드 원점 복귀 + 하단 메뉴 숨김 (발주서 §1-6) ─────────────
var hud = Resources.Load<WLHudLayoutSettings>(WLHudLayoutSettings.ResourcesPath);
if (hud == null) sb.AppendLine("WLHudLayoutSettings 없음");
else
{
sb.AppendLine("[hud] 전 fanOrigin" + hud.fanOriginPx + " attackCenter" + hud.attackCenterPx);
hud.fanOriginPx = new Vector2(0f, 0f); // Q3 D-5: Lead 핫픽스 260 → 0
hud.attackCenterPx = new Vector2(100f, 100f); // 360 → 100
hud.idleFanOriginPx = new Vector2(0f, 260f); // 메뉴가 보이는 동안만 쓰던 자리
hud.idleAttackCenterPx = new Vector2(100f, 360f);
hud.combatHideBottomMenu = true;
hud.bottomMenuPath = "IngameUIs/WL_HUD/HUD_BottomMenu"; // 813y 실측 경로
hud.bottomMenuUseCanvasGroup = true;
hud.bottomMenuFadeSeconds = 0.18f;
hud.combatExitSeconds = 6f;
hud.combatEnterDelaySeconds = 0f;
hud.combatUseTargetAsSignal = true;
hud.bottomMenuRestoreButton = true;
hud.restoreButtonCenterPx = new Vector2(-380f, 62f);
hud.restoreButtonDiameterPx = 88f;
hud.restoreButtonLabel = "≡";
hud.restoreButtonFontPx = 46f;
hud.restoreHoldSeconds = 8f;
hud.bossBarBindExisting = true; // Q3 D-3
EditorUtility.SetDirty(hud);
sb.AppendLine("[hud] 후 fanOrigin" + hud.fanOriginPx + " attackCenter" + hud.attackCenterPx +
" idleFanOrigin" + hud.idleFanOriginPx + " idleAttack" + hud.idleAttackCenterPx +
" menu=" + hud.bottomMenuPath + " exit=" + hud.combatExitSeconds + "s");
}
// ── ② 토스트 가시성 + 텍스트 아웃라인 (발주서 §1-3 · §1-4) ───────────
var txt = Resources.Load<WLCombatTextSettings>(WLCombatTextSettings.ResourcesPath);
if (txt == null) sb.AppendLine("WLCombatTextSettings 없음");
else
{
sb.AppendLine("[text] 전 toast(sec=" + txt.lootToastSeconds + " font=" + txt.lootToastFontPx +
" w=" + txt.lootToastWidthPx + " lh=" + txt.lootToastLineHeightPx +
" centerOff=" + txt.lootToastCenterOffsetPx + ")");
txt.lootToastSeconds = 2.0f; // 발주서 §1-3: 1.2 → 2.0 s
txt.lootToastFontPx = 52f; // Q3 D-6 ②: 40 px 는 세로 캡처에서 육안 실패
txt.lootToastLineHeightPx = 68f; // 폰트 + 패널 여백이 들어갈 줄 간격
txt.lootToastWidthPx = 560f;
txt.lootToastCenterOffsetPx = -120f; // 스탯 팝업(+180) · 연쇄 문구(+520) 대역을 피한다
txt.lootToastRightMarginPx = 40f;
txt.lootToastPanelEnabled = true;
txt.lootToastPanelColor = new Color(0.03f, 0.03f, 0.05f, 0.68f);
txt.lootToastPanelPadXPx = 18f;
txt.lootToastPanelPadYPx = 6f;
txt.lootToastMinBrightness = 0.72f; // 등급 1 회색(#a6a6a7 · V 0.65)을 끌어올린다
txt.lootToastMinBrightColor = new Color(0.95f, 0.96f, 0.98f, 1f);
txt.textEdgeEnabled = true;
txt.killChainEdge = new WLTextEdge
{
enabled = true, outlineWidth = 0.30f, outlineColor = new Color(0.05f, 0.03f, 0.02f, 1f),
shadowOffset = new Vector2(0.55f, -0.55f), shadowColor = new Color(0f, 0f, 0f, 0.8f),
shadowSoftness = 0.25f, faceDilate = 0.1f,
};
txt.statPopupEdge = new WLTextEdge
{
enabled = true, outlineWidth = 0.26f, outlineColor = new Color(0.05f, 0.03f, 0.02f, 1f),
shadowOffset = new Vector2(0.45f, -0.45f), shadowColor = new Color(0f, 0f, 0f, 0.75f),
shadowSoftness = 0.2f, faceDilate = 0.08f,
};
txt.damageEdge = new WLTextEdge
{
enabled = true, outlineWidth = 0.22f, outlineColor = new Color(0.03f, 0.02f, 0.02f, 1f),
shadowOffset = new Vector2(0.35f, -0.35f), shadowColor = new Color(0f, 0f, 0f, 0.7f),
shadowSoftness = 0.15f, faceDilate = 0.05f,
};
txt.lootToastEdge = new WLTextEdge
{
enabled = true, outlineWidth = 0.24f, outlineColor = new Color(0.03f, 0.02f, 0.02f, 1f),
shadowOffset = new Vector2(0.4f, -0.4f), shadowColor = new Color(0f, 0f, 0f, 0.7f),
shadowSoftness = 0.18f, faceDilate = 0.06f,
};
txt.statPopupUseGrowthEvents = true; // 발주서 §1-2 · 813k 축
txt.statPopupPointFormat = "+5 포인트 <size=70%>(보유 {0})</size>";
txt.statPopupMergeMultiLevel = true;
EditorUtility.SetDirty(txt);
sb.AppendLine("[text] 후 toast(sec=" + txt.lootToastSeconds + " font=" + txt.lootToastFontPx +
" w=" + txt.lootToastWidthPx + " lh=" + txt.lootToastLineHeightPx +
" centerOff=" + txt.lootToastCenterOffsetPx + " panel=" + txt.lootToastPanelEnabled + ")");
sb.AppendLine("[text] edge kill=" + txt.killChainEdge + " / stat=" + txt.statPopupEdge +
" / dmg=" + txt.damageEdge + " / loot=" + txt.lootToastEdge);
}
// ── ③ 보스 배너 늦은 구독 (발주서 §1-5) ──────────────────────────────
var boss = Resources.Load<WLBossUiSettings>(WLBossUiSettings.ResourcesPath);
if (boss == null) sb.AppendLine("WLBossUiSettings 없음");
else
{
boss.bannerTriggerExisting = true;
EditorUtility.SetDirty(boss);
sb.AppendLine("[boss] bannerTriggerExisting=" + boss.bannerTriggerExisting);
}
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
return sb.ToString();
}
}