一、前言
在昨天完成成就系統的資料與管理器架構後,今天我們要正式進入 UI 視覺化階段。透過主選單的介面綁定、動態網格排版,以及解鎖狀態的灰階判定,讓玩家能直觀地檢視自己的冒險成就與收集進度!
二、UI 架構與 3x2 格狀網格優化
為了讓成就面板呈現美觀且好閱讀的介面,我們在 UI 排版上進行了以下優化:
三、核心程式實作:AchievementItemUI 與視覺灰階切換
我們建立了 AchievementItemUI.cs 來負責將 ScriptableObject 的資料對應到畫面上的 UI 元件,並根據解鎖狀態動態切換圖標的彩色與灰階:
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class AchievementItemUI : MonoBehaviour {
[Header("UI 元件參考")]
[SerializeField] private Image iconImage;
[SerializeField] private TextMeshProUGUI nameText;
[SerializeField] private TextMeshProUGUI descText;
[Header("視覺設定")]
[SerializeField] private Color unlockedColor = Color.white;
[SerializeField] private Color lockedColor = new Color(0.3f, 0.3f, 0.3f, 1f); // 灰階暗色
// 初始化並繫結成就資料
public void Setup(AchievementData data) {
nameText.text = data.achievementName;
descText.text = data.description;
iconImage.sprite = data.iconSprite;
// 根據是否解鎖切換顏色(灰階視覺化)
if (data.isUnlocked) {
iconImage.color = unlockedColor;
nameText.gameObject.SetActive(true);
descText.gameObject.SetActive(true);
}
else {
iconImage.color = lockedColor;
// 未解鎖時可以隱藏或顯示問號提示
}
}
}
四、Unity Editor 與面板串接步驟


圖二、AchievementContainer面板
圖三、AchievementManager面板
圖四、Button-CROSS的 OnClick() 事件
五、開發實戰經驗:踩雷坑與架構反思
六、今日成果與小結


圖五、點擊成就選單後顯示尚未收集的成就
DAY 24 的內容主要是實作「成就系統的 UI 視覺化」,包含了建立 AchievementItemUI.cs 來處理灰階/彩色狀態切換、設定 3x2 網格排版(Grid Layout Group),以及成就面板的開關與串接。因為這直接延續了昨天(Day 23)建立的成就系統架構,所以它依然屬於同一個專屬分支:
檢查修改狀態:
git status
加入暫存區並提交 Commit:
git add .
git commit -m "feat: 實作 AchievementItemUI 介面控制器與 3x2 網格排版,完成成就牆視覺化與灰階狀態切換"
將新分支推送到遠端倉庫:
git push origin feature/achievement-system