Skip to content

成就系統 KonadoAchievement

前言

KonadoAchievement 是一款輕量、資料驅動的成就系統插件,專為 Konado 設計,提供解鎖、進度追蹤、彈窗通知、成就面板等完整功能。它既支援與 Konado 聯動使用,也可以獨立執行。

設定檔

成就系統使用 JSON 設定檔定義成就,預設路徑為 res://addons/konado_achievement/data/default_achievements.json,也可以在 KonadoAchievements 中設定其他路徑。

設定檔結構範例:

json
{
  "achievements": [
    {
      "id": "first_blood",
      "name": "初遇篇章",
      "description": "解鎖第一條主線劇情分支。",
      "icon": "",
      "hidden": false,
      "category": "story",
      "points": 10,
      "conditions": {
        "type": "counter",
        "target_key": "story_branch_unlocked",
        "target_value": 1
      }
    }
  ]
}

設定選項(可選)

KonadoAchievements 中,您可以透過以下屬性進行設定:

  • config_path: 成就設定檔路徑
  • save_path: 成就進度儲存路徑
  • popup_duration: 成就解鎖彈出通知的顯示時長
  • popup_position: 彈出通知的位置(top_left, top_right, bottom_left, bottom_right)
  • panel_layer: 成就面板的 CanvasLayer 層級,預設為 100
  • popup_layer: 成就解鎖通知的 CanvasLayer 層級,預設為 110

核心功能

成就解鎖

成就系統支援兩種解鎖方式:

  1. 直接解鎖:透過 API 直接解鎖成就
  2. 條件解鎖:當滿足特定條件時自動解鎖成就

進度追蹤

系統支援兩種類型的進度追蹤:

  1. 計數器:累計數值達到目標值時解鎖
  2. 標誌:當標誌被設定為特定值時解鎖

通知系統

當成就解鎖時,系統會顯示一個彈出通知,包含成就名稱、描述和圖示。

成就面板

提供一個可顯示所有成就的面板,包括已解鎖和未解鎖的成就,以及解鎖進度。

成就設定詳解

成就屬性

每個成就可以包含以下屬性:

  • id: 成就唯一識別符
  • name: 成就名稱
  • description: 成就描述
  • icon: 成就圖示路徑(可選)
  • hidden: 是否隱藏(未解鎖時不顯示名稱和描述)
  • category: 成就分類(可選)
  • points: 成就點數(可選)
  • conditions: 解鎖條件

條件類型

計數器類型

json
{
  "type": "counter",
  "target_key": "counter_key",
  "target_value": 10
}

counter_key 的值達到或超過 target_value 時解鎖。

標誌類型

json
{
  "type": "flag",
  "target_key": "flag_key",
  "target_value": true
}

flag_key 的值等於 target_value 時解鎖。

使用範例

基本使用

gdscript
# 增加計數器值
KonadoAchievements.increment_progress("story_branch_unlocked", 1)

# 設定標誌
KonadoAchievements.set_flag("secret_ending_unlocked", true)

# 直接解鎖成就
KonadoAchievements.unlock_achievement("special_achievement")

# 顯示成就面板
KonadoAchievements.show_panel()

訊號監聽

gdscript
# 監聽成就解鎖事件
KonadoAchievements.achievement_unlocked.connect(_on_achievement_unlocked)

func _on_achievement_unlocked(achievement_id: String, data: Dictionary) -> void:
    print("成就解鎖: " + data.get("name"))
    # 可以在這裡加入額外的獎勵邏輯

自訂儲存/載入

gdscript
# 設定自訂儲存處理
KonadoAchievements.custom_save_handler = Callable(self, "_custom_save")
KonadoAchievements.custom_load_handler = Callable(self, "_custom_load")

func _custom_save(data: Dictionary) -> void:
    # 自訂儲存邏輯
    pass

func _custom_load() -> Dictionary:
    # 自訂載入邏輯
    return {"unlocked": {}, "progress": {}}

外部整合

gdscript
# 設定外部解鎖回呼
KonadoAchievements.on_external_unlock = Callable(self, "_on_external_unlock")

func _on_external_unlock(achievement_id: String, data: Dictionary) -> void:
    # 同步到外部後端
    pass

Released under BSD3-Clause License.