using UnityEngine; using UnityEngine.UI; using BaseGames.Localization; namespace BaseGames.UI { /// /// 图鉴单元格视图(仿 ):肖像 + 名称 + 已发现/未发现视觉。 /// 未发现时:名称显示 "???"(BESTIARY_LOCKED 文案)、肖像剪影化、暗罩、整格暗化。 /// 由 实例化并 Bind。 /// [DisallowMultipleComponent] public class BestiaryCellView : MonoBehaviour { [SerializeField] private Image _icon; [SerializeField] private LocalizedText _label; [Tooltip("未发现时显示的暗罩 / 锁图标(可空)。")] [SerializeField] private GameObject _lockedOverlay; [Tooltip("整格暗化用(可空)。")] [SerializeField] private CanvasGroup _group; [Tooltip("点击选中此格以在详情区展示(可空)。")] [SerializeField] private Button _selectButton; private const string LockedKey = "BESTIARY_LOCKED"; private string _nameKey; public Button SelectButton => _selectButton; public void Bind(string nameKey, Sprite icon, bool discovered) { _nameKey = nameKey; if (_icon != null) { _icon.sprite = icon; _icon.enabled = icon != null; } SetDiscovered(discovered); } /// 只更新发现态(保留图标/名称)。EVT_BestiaryUpdated 刷新时调用。 public void SetDiscovered(bool discovered) { if (_label != null) _label.SetKey(discovered ? _nameKey : LockedKey); if (_lockedOverlay != null) _lockedOverlay.SetActive(!discovered); // 未发现:肖像剪影化(压暗);已发现:原色 if (_icon != null) _icon.color = discovered ? Color.white : new Color(0.04f, 0.04f, 0.06f, 1f); if (_group != null) _group.alpha = discovered ? 1f : 0.55f; } } }