一、前言
在昨天完成主選單的成就列表、格狀排版與灰階視覺化後,今天我們要進一步處理遊戲內部的觸發機制與即時彈窗通知。當玩家在遊戲中達成特定條件(例如拿到關鍵道具、觸發特定事件)時,系統不僅要記錄成就,還要能在畫面右上角跳出即時的解鎖通知,提升遊戲的互動回饋感!
二、成就彈窗 UI 與 Prefab 設計
為了讓玩家在遊戲進行中獲得即時回饋,我們建立了一個輕量化的彈窗通知介面:

三、核心程式實作:AchievementPopup & 觸發管理
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using System.Collections;
public class AchievementPopup : MonoBehaviour {
[Header("UI 元件參考")]
[SerializeField] private Image iconImage;
[SerializeField] private TextMeshProUGUI titleText;
[SerializeField] private TextMeshProUGUI descText;
[SerializeField] private GameObject popupPanel;
// 顯示成就秒數
[Header("顯示設定")]
[SerializeField] private float displayDuration = 10f;
private void Start() {
if (popupPanel != null) popupPanel.SetActive(false);
}
// 顯示成就解鎖彈窗
public void ShowPopup(AchievementData data) {
StopAllCoroutines();
StartCoroutine(PopupRoutine(data));
}
private IEnumerator PopupRoutine(AchievementData data) {
iconImage.sprite = data.iconSprite;
titleText.text = "解鎖成就:" + data.achievementName;
descText.text = data.description;
popupPanel.SetActive(true);
// 等待指定秒數後關閉
yield return new WaitForSeconds(displayDuration);
popupPanel.SetActive(false);
}
}
public void UnlockAchievement(string achievementID) {
AchievementData target = achievement.Find(a => a.achievementID == achievementID
if(target != null && !target.isUnlocked) {
target.isUnlocked = true ;
//觸發彈窗通知
if (popupUI !=null) {
popupUI.Showpopup(target);
}
SaveAchievementData();
}
}
[System.Serializable]
public class DialogueSegment {
[TextArea(2, 5)] public string text;
public AudioClip segmentSFX;
public Sprite characterSprite;
[Header"成就解鎖設定"]
public string unlockAchievementID; //填入對應的成就ID
pubilc void ShowSegmentText(DialogueSegment segment) {
dialogueText.text = segment.text;
//播放語音、切換圖片等邏輯...
//如果該段落設定了成就ID,則直接觸發解鎖
if (!string.IsNullOrEmpty(segment.unlockAchievementID)) {
AchievementManager.Instance.UnlockAchievement(segment.unlockAchievementID);
}
}
四、Unity Editor 與事件串接步驟(以第12幕--「兒子的禮物」成就為例)
為了讓成就系統與遊戲內容完整串接,我們需要在 Unity Editor 進行以下設定:
1. 建立並配置彈窗 Prefab:

3. 在對話管理器中掛載成就 ID:

五、開發實戰經驗:踩坑與架構反思

六、今日成果與小結


圖六、成就解完DAY24所做的成就列表皆會顯現
今天的內容主要是實作「成就彈窗通知(AchievementPopup)」與「對話系統成就觸發串接(整合進 StoryFlowManager 與 DialogueSegment)」,讓遊戲內事件能夠即時回饋並解鎖成就。因為它依然是成就系統功能擴充的一環,所以它同樣屬於feature/achievement-system:
1.檢查目前修改狀態
git status
2.加入暫存區並提交 Commit:
git add .
git commit -m "feat: 實作 AchievementPopup 彈窗通知與對話系統成就觸發整合,完成成就系統即時回饋與互動"
4.將分支推送到遠端倉庫:
git push origin feature/achievement-system