feat: SongSelect UI polish — marquee title, button states, font

- MarqueeText: scrolling title for long song names (RectMask2D clipped)
- SongDetailPanel: difficulty selected = green (img.color direct set)
- SongSelectManager: ALL/OWNED tab active state via img.color
- Card layout: DestroyImmediate + correct rebuild order to fix zero-size title bug
- NanumGothic SDF fallback configured on LiberationSans for Korean support

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-22 13:31:04 +09:00
parent 1f1100bbd8
commit 64ef3d64ec
7 changed files with 3478 additions and 3415 deletions
+13 -6
View File
@@ -33,8 +33,8 @@ public class SongDetailPanel : MonoBehaviour
[Header("씬 이름")]
[SerializeField] private string gameSceneName = "Game";
private static readonly Color SelectedColor = new Color(0.2f, 0.78f, 0.4f);
private static readonly Color DeselectedColor = Color.white;
private static readonly Color SelectedColor = new Color(0.2f, 0.78f, 0.4f);
private static readonly Color DeselectedImgColor = new Color(1f, 1f, 1f, 0.12f); // original button alpha
private SongInfo currentSong;
private string selectedDifficulty;
@@ -122,10 +122,17 @@ public class SongDetailPanel : MonoBehaviour
{
foreach (var (key, getBtn) in diffSlots)
{
Button btn = getBtn(this);
var colors = btn.colors;
colors.normalColor = (key == selectedDifficulty) ? SelectedColor : DeselectedColor;
btn.colors = colors;
Button btn = getBtn(this);
bool selected = key == selectedDifficulty;
if (btn.targetGraphic is Image img)
img.color = selected ? SelectedColor : DeselectedImgColor;
var cb = btn.colors;
cb.normalColor = Color.white;
cb.highlightedColor = selected ? new Color(0.3f, 0.95f, 0.55f) : new Color(1f, 1f, 1f, 0.25f);
cb.pressedColor = selected ? new Color(0.15f, 0.6f, 0.3f) : new Color(1f, 1f, 1f, 0.35f);
btn.colors = cb;
}
}