diff --git a/Assets/Scripts/OutGame/UI/HeroScreens.cs b/Assets/Scripts/OutGame/UI/HeroScreens.cs index 892f8801..300c0b95 100644 --- a/Assets/Scripts/OutGame/UI/HeroScreens.cs +++ b/Assets/Scripts/OutGame/UI/HeroScreens.cs @@ -50,8 +50,7 @@ namespace TKS.OutGame // 병과 = 단색 심볼만(배경 틀 없음 · PD 2026-11-09) var ring = UiKit.Rect("Type", t, new Vector2(0f, 1f), new Vector2(0f, 1f), new Vector2(142f, -12f), new Vector2(52f, 52f)); var cls = UiKit.Icon(ring, UiKit.TypeSymbolId(h.type), new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), Vector2.zero, 50f); - if (cls != null) UiKit.DropShadow(cls, 2f); - else UiKit.Title(UiKit.FillLabel(ring, UnitTypeInfo.Mark(h.type), 26, UiKit.White), true); + if (cls == null) UiKit.Title(UiKit.FillLabel(ring, UnitTypeInfo.Mark(h.type), 26, UiKit.White), true); if (owned) { var badge = UiKit.Icon(t, "lv_badge_s", new Vector2(0f, 1f), new Vector2(0f, 1f), new Vector2(202f, -8f), 56f); @@ -180,8 +179,7 @@ namespace TKS.OutGame // 병과 = 단색 심볼만(배경 틀 없음 · PD 2026-11-09 「심볼은 배경 프레임 없이 단색」) var role = UiKit.Rect("Role", t, new Vector2(1f, 1f), new Vector2(0.5f, 0.5f), new Vector2(-42f, -42f), new Vector2(60f, 60f)); var sym = UiKit.Icon(role, UiKit.TypeSymbolId(h.type), new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), Vector2.zero, 60f); - if (sym != null) UiKit.DropShadow(sym, 3f); - else UiKit.Title(UiKit.FillLabel(role, UnitTypeInfo.Mark(h.type), 28, UiKit.White), true); + if (sym == null) UiKit.Title(UiKit.FillLabel(role, UnitTypeInfo.Mark(h.type), 28, UiKit.White), true); if (s.CanGrowAny(h.id)) UiKit.Icon(t, "new_dot", new Vector2(0f, 0f), new Vector2(0.5f, 0.5f), new Vector2(64f, 70f), 30f); // 성장 가능 = 레벨 배지 오른쪽 위 return cell; } @@ -590,7 +588,7 @@ namespace TKS.OutGame bandImg = Spr(body, "NameBand", "card", 24f, 776f, 1032f, 114f, "white"); Spr(body, "BandLight", "band_light", 40f, 782f, 1000f, 12f, "band_light"); factionRoot = UiKit.At(body, "Faction", 44f, 789f, 88f, 88f); // 진영 원 배지 자리(PD 2026-11-09 · 구 세력 깃발) - clsIcon = Ico(body, null, 140f, 794f, 78f, 78f, 3f); // 병과 = 단색 심볼만(배경 틀 없음 · PD 2026-11-09) + clsIcon = Ico(body, null, 140f, 794f, 78f, 78f); // 병과 = 평면 심볼만(배경 틀 · 그림자 없음 · PD 2026-11-09) paraImg = Spr(body, "Grade", "para_green", 232f, 805f, 96f, 56f, "white"); gradeText = Txt(body, "", 232f, 811f, 38, "white", TextAnchor.MiddleCenter, 96f); nameText = Txt(body, "", 344f, 797f, 66, "white"); @@ -614,7 +612,7 @@ namespace TKS.OutGame skLv[i] = Txt(lc.transform, "", 0f, 9f, 26, "white", TextAnchor.MiddleCenter, 112f, true, 3f); rowImg[i] = Spr(body, "SkillRow" + i, "panel12", 44f, y, 992f, 146f, "white"); skFrame[i] = Ico(body, null, 58f, y + 10f, 126f, 126f, 4f); - skCls[i] = Ico(body, null, 80f, y + 32f, 82f, 82f, 3f); + skCls[i] = Ico(body, null, 80f, y + 32f, 82f, 82f); skName[i] = Txt(body, "", 200f, y + 18f, 42, "white"); skHanja[i] = Txt(body, "", 200f, y + 30f, 28, "white", TextAnchor.MiddleLeft, 0f, false, 0f, false); skDesc[i] = Desc(body, 200f, y + 74f, 600f); diff --git a/Assets/Scripts/OutGame/UI/OutGameRoot.cs b/Assets/Scripts/OutGame/UI/OutGameRoot.cs index 8ae3e2b4..3b6f2d1f 100644 --- a/Assets/Scripts/OutGame/UI/OutGameRoot.cs +++ b/Assets/Scripts/OutGame/UI/OutGameRoot.cs @@ -793,7 +793,6 @@ namespace TKS.OutGame float cx = ex + k * Ew + 44f; var circ = UiKit.Rect("Type" + k, field, new Vector2(0f, 1f), new Vector2(0.5f, 0.5f), new Vector2(cx, -y - 94f), new Vector2(80f, 80f)); var ti = UiKit.Icon(circ, UiKit.TypeSymbolId(ut), new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), Vector2.zero, 76f); // 병과 = 단색 심볼만(배경 틀 없음 · PD 2026-11-09) - if (ti != null) UiKit.DropShadow(ti, 2f); var n = UiKit.Title(UiKit.Label(field, "x" + counts[kinds[k]], 36, UiKit.White, TextAnchor.MiddleLeft, new Vector2(0f, 1f), new Vector2(0f, 0.5f), new Vector2(cx + 50f, -y - 94f), new Vector2(100f, 50f)), true); n.horizontalOverflow = HorizontalWrapMode.Overflow; } diff --git a/Assets/Scripts/Runtime/BattleHUD.cs b/Assets/Scripts/Runtime/BattleHUD.cs index fe06eaf7..8d710dd1 100644 --- a/Assets/Scripts/Runtime/BattleHUD.cs +++ b/Assets/Scripts/Runtime/BattleHUD.cs @@ -223,7 +223,6 @@ namespace TKS typeRing = OutGame.UiKit.Skin(OutGame.UiKit.At(unitBody, "TypeRing", 188f, 20f, 52f, 52f), "circle_frame", Color.white); typeRing.enabled = false; typeIcon = OutGame.UiKit.Icon(typeRing.transform, OutGame.UiKit.TypeSymbolId(UnitType.Infantry), new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), Vector2.zero, 52f); - if (typeIcon != null) OutGame.UiKit.DropShadow(typeIcon, 2f); nameText = OutGame.UiKit.Title(OutGame.UiKit.Label(unitBody, "", 36, Color.white, TextAnchor.MiddleLeft, new Vector2(0f, 1f), new Vector2(0f, 1f), new Vector2(250f, -18f), new Vector2(300f, 56f)), true); nameText.horizontalOverflow = HorizontalWrapMode.Overflow; stateText = OutGame.UiKit.Label(unitBody, "", 24, soft, TextAnchor.MiddleRight, new Vector2(1f, 1f), new Vector2(1f, 1f), new Vector2(-20f, -22f), new Vector2(220f, 48f), false); diff --git a/Assets/UI/Symbols/cls_sym_archer.png b/Assets/UI/Symbols/cls_sym_archer.png index 745fe695..7061ce62 100644 Binary files a/Assets/UI/Symbols/cls_sym_archer.png and b/Assets/UI/Symbols/cls_sym_archer.png differ diff --git a/Assets/UI/Symbols/cls_sym_cavalry.png b/Assets/UI/Symbols/cls_sym_cavalry.png index 099e01b8..b73cb398 100644 Binary files a/Assets/UI/Symbols/cls_sym_cavalry.png and b/Assets/UI/Symbols/cls_sym_cavalry.png differ diff --git a/Assets/UI/Symbols/cls_sym_infantry.png b/Assets/UI/Symbols/cls_sym_infantry.png index 29ef27b8..85212d3a 100644 Binary files a/Assets/UI/Symbols/cls_sym_infantry.png and b/Assets/UI/Symbols/cls_sym_infantry.png differ diff --git a/Assets/UI/Symbols/cls_sym_spear.png b/Assets/UI/Symbols/cls_sym_spear.png index d9d7aaa6..c179534f 100644 Binary files a/Assets/UI/Symbols/cls_sym_spear.png and b/Assets/UI/Symbols/cls_sym_spear.png differ diff --git a/Assets/UI/Symbols/cls_sym_strategist.png b/Assets/UI/Symbols/cls_sym_strategist.png index 0d791a93..7c3cfa32 100644 Binary files a/Assets/UI/Symbols/cls_sym_strategist.png and b/Assets/UI/Symbols/cls_sym_strategist.png differ diff --git a/Tools/class_symbols.py b/Tools/class_symbols.py index 1ceb4329..75cff9d0 100644 --- a/Tools/class_symbols.py +++ b/Tools/class_symbols.py @@ -2,7 +2,7 @@ 새로 그리지 않는다 — 확정 납품 메달 아이콘(Assets/UI/Samguk/class/cls_<병과>.png)을 만들 때 쓴 투명 바탕 사물 그림 (아트 R&D `C:/ArtRnD/samguk_ui/_work/class_symbol/rgba/cls_<병과>_s21A_rgba.png` · picked_auto.json = seed 21)의 투명도 = 형태. -기본 = 검은 선(바깥 테두리 + 원본의 진한 안쪽 선) + 그 안쪽 흰 채움(PD 2026-11-09 「배경 프레임 없이 · 검은 선 안쪽은 흰색」) · --mono = 단색(채움 한 색 · 안쪽 선 = 뚫린 선). +기본 = 검은 바깥 테두리 + 그 안쪽 흰 채움 · 안쪽 선 없음(PD 2026-11-09 「배경 프레임 없이 · 검은 선 안쪽은 흰색 · 입체감이 느껴지지 않도록」 · --inner-lum 40 = 원본 안쪽 선 남김) · --mono = 단색(채움 한 색 · 안쪽 선 = 뚫린 선). 실행: -I -B Tools/class_symbols.py [--src ] [--fill #RRGGBB] [--line #RRGGBB] [--out Assets/UI/Symbols] [--preview ] 출력 = /cls_sym_<병과>.png(256 정사각 · 투명) · --preview = 어두운 원 위 5종 확인 그림. """ @@ -22,7 +22,7 @@ def hexrgb(s): return tuple(int(s[i:i + 2], 16) for i in (0, 2, 4)) -def symbol(path, fill, line, size=256, pad=14, stroke=8, inner_lum=45, erode_passes=6, mono=True): +def symbol(path, fill, line, size=256, pad=14, stroke=8, inner_lum=0, erode_passes=6, mono=True): src = Image.open(path).convert("RGBA") bb = src.getchannel("A").point(lambda v: 255 if v > 40 else 0).getbbox() src = src.crop(bb) @@ -67,13 +67,14 @@ def main(): ap.add_argument("--line", default="#1A1A22") ap.add_argument("--out", default="Assets/UI/Symbols") ap.add_argument("--preview", default="") + ap.add_argument("--inner-lum", type=float, default=0.0, help="안쪽 선(원본의 진한 선) 밝기 기준 · 0 = 안쪽 선 없음(기본 · 입체감 없이 평면)") ap.add_argument("--mono", action="store_true", help="단색(채움 한 색 · 안쪽 선 = 뚫린 선 · 테두리 없음) · 기본 = 검은 선 + 흰 채움") a = ap.parse_args() out = os.path.join(ROOT, a.out) os.makedirs(out, exist_ok=True) tiles = [] for t in TYPES: - g = symbol(os.path.join(a.src, "cls_%s_%sA_rgba.png" % (t, a.seed)), hexrgb(a.fill), hexrgb(a.line), mono=a.mono) + g = symbol(os.path.join(a.src, "cls_%s_%sA_rgba.png" % (t, a.seed)), hexrgb(a.fill), hexrgb(a.line), inner_lum=a.inner_lum, mono=a.mono) g.save(os.path.join(out, "cls_sym_%s.png" % t)) tile = Image.new("RGBA", (300, 300), (0, 0, 0, 0)) tile.alpha_composite(g.resize((200, 200), Image.LANCZOS), (50, 50))