diff --git a/Assets/Scripts/MyUI/SkillCardSlot.cs b/Assets/Scripts/MyUI/SkillCardSlot.cs index f31693b..2d62acb 100644 --- a/Assets/Scripts/MyUI/SkillCardSlot.cs +++ b/Assets/Scripts/MyUI/SkillCardSlot.cs @@ -52,11 +52,30 @@ namespace EerieVillage.MyUI // 2. 카드 이름 (DisplayName — SkillDataAsset base PascalCase) if (_nameText != null) _nameText.text = card.DisplayName; - // 3. 아이콘 (sprite null 시 image enable=false) + // PD 지시 2026-05-13 — 3. 아이콘 (card.Icon null 시 속성별 색상 동적 원 sprite fallback) if (_icon != null) { - _icon.sprite = card.Icon; - _icon.enabled = card.Icon != null; + if (card.Icon != null) + { + _icon.sprite = card.Icon; + _icon.color = Color.white; + } + else + { + _icon.sprite = GetFallbackIconSprite(); + _icon.color = GetColorByAttribute(card.AttributeTags); + } + _icon.enabled = true; + } + + // PD 지시 2026-05-13 — 동심원 빛 효과 — fallback sprite·낮은 alpha (속성 색상 정합) + if (_glowEffect != null) + { + _glowEffect.sprite = GetFallbackIconSprite(); + var glowCol = GetColorByAttribute(card.AttributeTags); + glowCol.a = 0.3f; + _glowEffect.color = glowCol; + _glowEffect.enabled = true; } // 5. 효과 설명 @@ -86,5 +105,42 @@ namespace EerieVillage.MyUI { if (_highlightFrame != null) _highlightFrame.SetActive(active); } + + // PD 지시 2026-05-13 — 아이콘 fallback (정적 캐싱·16×16 원 알파 sprite) + static Sprite _fallbackIconSprite; + static Sprite GetFallbackIconSprite() + { + if (_fallbackIconSprite != null) return _fallbackIconSprite; + const int size = 32; + var tex = new Texture2D(size, size, TextureFormat.RGBA32, false); + tex.wrapMode = TextureWrapMode.Clamp; + tex.filterMode = FilterMode.Bilinear; + float r = size * 0.5f; + for (int y = 0; y < size; y++) + { + for (int x = 0; x < size; x++) + { + float dx = x - r + 0.5f; + float dy = y - r + 0.5f; + float dist = Mathf.Sqrt(dx * dx + dy * dy); + float alpha = Mathf.Clamp01(1f - (dist - (r - 2.5f))); + tex.SetPixel(x, y, new Color(1f, 1f, 1f, alpha)); + } + } + tex.Apply(); + _fallbackIconSprite = Sprite.Create(tex, new Rect(0, 0, size, size), new Vector2(0.5f, 0.5f), size); + return _fallbackIconSprite; + } + + // PD 지시 2026-05-13 — 속성별 색상 (Fire 주황·Frost 하늘·Dark 보라·Lightning 노랑·Physical 흰) + static Color GetColorByAttribute(AttributeTag attr) + { + if ((attr & AttributeTag.Fire) != 0) return new Color(1f, 0.5f, 0.2f); + if ((attr & AttributeTag.Frost) != 0) return new Color(0.5f, 0.85f, 1f); + if ((attr & AttributeTag.Dark) != 0) return new Color(0.6f, 0.3f, 0.85f); + if ((attr & AttributeTag.Lightning) != 0) return new Color(1f, 1f, 0.4f); + if ((attr & AttributeTag.Physical) != 0) return new Color(0.95f, 0.95f, 0.95f); + return Color.white; + } } }