From 19413911d9f7e51624fe3f1814cabdd7c96ff0f2 Mon Sep 17 00:00:00 2001 From: xianyi Date: Fri, 29 Aug 2025 11:33:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=B4=E5=83=8F=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/TcgEngine/Scripts/UI/AvatarUI.cs | 59 +++++++++++++++++++++++++ Assets/TcgEngine/Scripts/UI/PlayerUI.cs | 24 +++++++--- 2 files changed, 76 insertions(+), 7 deletions(-) diff --git a/Assets/TcgEngine/Scripts/UI/AvatarUI.cs b/Assets/TcgEngine/Scripts/UI/AvatarUI.cs index 88e0ede..3c112b3 100644 --- a/Assets/TcgEngine/Scripts/UI/AvatarUI.cs +++ b/Assets/TcgEngine/Scripts/UI/AvatarUI.cs @@ -18,6 +18,9 @@ namespace TcgEngine.UI private Image avatar_img; private Button avatar_button; private Sprite default_icon; + + [Header("Dynamic Art Path")] + [SerializeField] private string avatar_path; private AvatarData avatar; @@ -29,6 +32,22 @@ namespace TcgEngine.UI if (avatar_button != null) avatar_button.onClick.AddListener(OnClick); + + if (!string.IsNullOrEmpty(avatar_path)) + { + LoadAvatarSprite(); + } + } + + /// + /// 在 Inspector 中修改值时自动重新加载 + /// + private void OnValidate() + { + if (Application.isPlaying && !string.IsNullOrEmpty(avatar_path)) + { + LoadAvatarSprite(); + } } public void SetAvatar(AvatarData avatar) @@ -42,6 +61,46 @@ namespace TcgEngine.UI avatar_img.sprite = avatar.GetAvatar(); } } + + /// + /// 设置头像图片,使用本地图片路径 + /// + public void SetAvatarPath(string path) + { + avatar_path = path; + LoadAvatarSprite(); + } + + /// + /// 获取当前头像路径 + /// + public string GetAvatarPath() + { + return avatar_path; + } + + /// + /// 加载头像图片 + /// + private void LoadAvatarSprite() + { + if (!string.IsNullOrEmpty(avatar_path)) + { + Sprite dynamicSprite = SpriteLoader.Get()?.LoadSprite(avatar_path); + if (dynamicSprite != null) + { + avatar_img.sprite = dynamicSprite; + } + else + { + Debug.LogWarning($"AvatarUI 头像图片加载失败: {avatar_path}"); + } + } + else + { + Debug.LogWarning($"AvatarUI avatar_path为空"); + } + } public void SetDefaultAvatar() { diff --git a/Assets/TcgEngine/Scripts/UI/PlayerUI.cs b/Assets/TcgEngine/Scripts/UI/PlayerUI.cs index d372e15..105f7af 100644 --- a/Assets/TcgEngine/Scripts/UI/PlayerUI.cs +++ b/Assets/TcgEngine/Scripts/UI/PlayerUI.cs @@ -76,13 +76,12 @@ namespace TcgEngine.UI hp_txt.text = prev_hp.ToString(); hp_max_txt.text = "/" + player.hp_max.ToString(); - AvatarData adata = AvatarData.Get(player.avatar); - if (avatar != null && adata != null && !killed) - avatar.SetAvatar(adata); - - delayed_damage_timer -= Time.deltaTime; - if (!IsDamagedDelayed()) - prev_hp = player.hp; + // 默认头像 + string avatarId = !string.IsNullOrEmpty(player.avatar) ? player.avatar : "horse"; + string avatarPath = "Avatar/" + avatarId + ".png"; + + // 设置头像路径 + SetAvatarByPath(avatarPath); } @@ -93,6 +92,17 @@ namespace TcgEngine.UI SlowUpdate(); } } + + /// + /// 通过路径设置头像 + /// + private void SetAvatarByPath(string avatarPath) + { + if (avatar != null && !killed) + { + avatar.SetAvatarPath(avatarPath); + } + } void SlowUpdate() {