{
  "schemaVersion": "1.0",
  "item": {
    "slug": "godot-dev-guide",
    "name": "Godot Dev Guide",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/IsonaEi/godot-dev-guide",
    "canonicalUrl": "https://clawhub.ai/IsonaEi/godot-dev-guide",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/godot-dev-guide",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=godot-dev-guide",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "BUILD_REPORT.md",
      "REVIEW_REPORT.md",
      "SKILL.md",
      "references/01-project-structure.md",
      "references/02-gdscript-patterns.md",
      "references/03-file-formats.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "slug": "godot-dev-guide",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-03T20:38:53.073Z",
      "expiresAt": "2026-05-10T20:38:53.073Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=godot-dev-guide",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=godot-dev-guide",
        "contentDisposition": "attachment; filename=\"godot-dev-guide-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "godot-dev-guide"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/godot-dev-guide"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/godot-dev-guide",
    "agentPageUrl": "https://openagent3.xyz/skills/godot-dev-guide/agent",
    "manifestUrl": "https://openagent3.xyz/skills/godot-dev-guide/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/godot-dev-guide/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Godot Dev Guide Skill",
        "body": "Godot 4.x 遊戲開發完整指南，專為 AI 輔助開發設計。"
      },
      {
        "title": "1. 文件格式差異（最重要！）",
        "body": ".gd  → GDScript 程式碼（完整語言）\n.tscn → 場景序列化（嚴格格式，非 GDScript）\n.tres → 資源序列化（嚴格格式，非 GDScript）\n\n⚠️ AI PITFALL：混淆 GDScript 與資源格式\n\n# ❌ WRONG in .tres/.tscn\nscript = preload(\"res://script.gd\")\nvar items = [1, 2, 3]\n\n# ✅ CORRECT in .tres/.tscn\n[ext_resource type=\"Script\" path=\"res://script.gd\" id=\"1\"]\nscript = ExtResource(\"1\")\nitems = Array[int]([1, 2, 3])"
      },
      {
        "title": "2. 類型系統（永遠使用）",
        "body": "# 變數類型\nvar health: int = 100\nvar speed: float = 200.0\nvar items: Array[Item] = []\nvar stats: Dictionary = {}\n\n# 函數簽名\nfunc calculate_damage(base: int, multiplier: float) -> int:\n    return int(base * multiplier)"
      },
      {
        "title": "3. 架構模式",
        "body": "組合優先於繼承\n信號用於解耦通信\n資源用於數據配置\n自動載入用於全局系統"
      },
      {
        "title": "項目結構",
        "body": "res://\n├── project.godot\n├── scenes/           # .tscn 場景\n│   ├── player/\n│   ├── enemies/\n│   └── ui/\n├── scripts/          # .gd 腳本\n├── assets/           # 資源文件\n├── autoload/         # 單例腳本\n├── resources/        # .tres 資源\n└── test/             # 測試"
      },
      {
        "title": "常用節點",
        "body": "2D3D用途CharacterBody2DCharacterBody3D玩家/NPC 移動RigidBody2DRigidBody3D物理模擬Area2DArea3D碰撞檢測（無物理）Sprite2DMeshInstance3D視覺渲染"
      },
      {
        "title": "Export 變數",
        "body": "@export var speed: float = 5.0\n@export_range(0, 100, 1) var health: int = 100\n@export_file(\"*.tscn\") var next_level: String\n@export_group(\"Combat\")\n@export var damage: int = 10"
      },
      {
        "title": "信號模式",
        "body": "signal health_changed(current: int, maximum: int)\nsignal died\n\nfunc take_damage(amount: int) -> void:\n    health -= amount\n    health_changed.emit(health, max_health)\n    if health <= 0:\n        died.emit()"
      },
      {
        "title": "節點引用",
        "body": "@onready var sprite: Sprite2D = $Sprite2D\n@onready var anim: AnimationPlayer = $AnimationPlayer"
      },
      {
        "title": "關鍵陷阱清單",
        "body": "陷阱錯誤寫法正確寫法.tres 使用 preloadpreload(\"res://x.gd\")ExtResource(\"id\").tres 使用 varvar x = 5x = 5未類型化陣列[1, 2, 3] in .tresArray[int]([1, 2, 3])缺少 ext_resource直接使用 id先宣告 ext_resource@onready 初始化在宣告時存取其他節點等到 _ready()直接修改資源resource.value = xresource.duplicate()輸入處理UI 和遊戲混用 _inputUI 用 _gui_input"
      },
      {
        "title": "參考文件",
        "body": "主題路徑項目結構references/01-project-structure.mdGDScript 模式references/02-gdscript-patterns.md文件格式references/03-file-formats.md場景與節點references/04-scenes-nodes.mdUI 與輸入references/05-ui-input.md物理系統references/06-physics.md音效與動畫references/07-audio-animation.md性能優化references/08-performance.md導出平台references/09-export.md測試指南references/10-testing.md"
      },
      {
        "title": "CLI 快速命令",
        "body": "# 運行遊戲\ngodot --path .\n\n# 驗證腳本\ngodot --path . --check-only --script path/to/script.gd\n\n# 無頭測試\ngodot --path . --headless --quit\n\n# 導出\ngodot --path . --export-release \"Preset Name\" builds/game.exe\n\nVersion: 1.0.0 | Last Updated: 2026-02-17"
      }
    ],
    "body": "Godot Dev Guide Skill\n\nGodot 4.x 遊戲開發完整指南，專為 AI 輔助開發設計。\n\n核心原則\n1. 文件格式差異（最重要！）\n.gd  → GDScript 程式碼（完整語言）\n.tscn → 場景序列化（嚴格格式，非 GDScript）\n.tres → 資源序列化（嚴格格式，非 GDScript）\n\n\n⚠️ AI PITFALL：混淆 GDScript 與資源格式\n\n# ❌ WRONG in .tres/.tscn\nscript = preload(\"res://script.gd\")\nvar items = [1, 2, 3]\n\n# ✅ CORRECT in .tres/.tscn\n[ext_resource type=\"Script\" path=\"res://script.gd\" id=\"1\"]\nscript = ExtResource(\"1\")\nitems = Array[int]([1, 2, 3])\n\n2. 類型系統（永遠使用）\n# 變數類型\nvar health: int = 100\nvar speed: float = 200.0\nvar items: Array[Item] = []\nvar stats: Dictionary = {}\n\n# 函數簽名\nfunc calculate_damage(base: int, multiplier: float) -> int:\n    return int(base * multiplier)\n\n3. 架構模式\n組合優先於繼承\n信號用於解耦通信\n資源用於數據配置\n自動載入用於全局系統\n\n快速參考\n項目結構\nres://\n├── project.godot\n├── scenes/           # .tscn 場景\n│   ├── player/\n│   ├── enemies/\n│   └── ui/\n├── scripts/          # .gd 腳本\n├── assets/           # 資源文件\n├── autoload/         # 單例腳本\n├── resources/        # .tres 資源\n└── test/             # 測試\n\n常用節點\n2D\t3D\t用途\nCharacterBody2D\tCharacterBody3D\t玩家/NPC 移動\nRigidBody2D\tRigidBody3D\t物理模擬\nArea2D\tArea3D\t碰撞檢測（無物理）\nSprite2D\tMeshInstance3D\t視覺渲染\nExport 變數\n@export var speed: float = 5.0\n@export_range(0, 100, 1) var health: int = 100\n@export_file(\"*.tscn\") var next_level: String\n@export_group(\"Combat\")\n@export var damage: int = 10\n\n信號模式\nsignal health_changed(current: int, maximum: int)\nsignal died\n\nfunc take_damage(amount: int) -> void:\n    health -= amount\n    health_changed.emit(health, max_health)\n    if health <= 0:\n        died.emit()\n\n節點引用\n@onready var sprite: Sprite2D = $Sprite2D\n@onready var anim: AnimationPlayer = $AnimationPlayer\n\n關鍵陷阱清單\n陷阱\t錯誤寫法\t正確寫法\n.tres 使用 preload\tpreload(\"res://x.gd\")\tExtResource(\"id\")\n.tres 使用 var\tvar x = 5\tx = 5\n未類型化陣列\t[1, 2, 3] in .tres\tArray[int]([1, 2, 3])\n缺少 ext_resource\t直接使用 id\t先宣告 ext_resource\n@onready 初始化\t在宣告時存取其他節點\t等到 _ready()\n直接修改資源\tresource.value = x\tresource.duplicate()\n輸入處理\tUI 和遊戲混用 _input\tUI 用 _gui_input\n參考文件\n主題\t路徑\n項目結構\treferences/01-project-structure.md\nGDScript 模式\treferences/02-gdscript-patterns.md\n文件格式\treferences/03-file-formats.md\n場景與節點\treferences/04-scenes-nodes.md\nUI 與輸入\treferences/05-ui-input.md\n物理系統\treferences/06-physics.md\n音效與動畫\treferences/07-audio-animation.md\n性能優化\treferences/08-performance.md\n導出平台\treferences/09-export.md\n測試指南\treferences/10-testing.md\nCLI 快速命令\n# 運行遊戲\ngodot --path .\n\n# 驗證腳本\ngodot --path . --check-only --script path/to/script.gd\n\n# 無頭測試\ngodot --path . --headless --quit\n\n# 導出\ngodot --path . --export-release \"Preset Name\" builds/game.exe\n\n\nVersion: 1.0.0 | Last Updated: 2026-02-17"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/IsonaEi/godot-dev-guide",
    "publisherUrl": "https://clawhub.ai/IsonaEi/godot-dev-guide",
    "owner": "IsonaEi",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/godot-dev-guide",
    "downloadUrl": "https://openagent3.xyz/downloads/godot-dev-guide",
    "agentUrl": "https://openagent3.xyz/skills/godot-dev-guide/agent",
    "manifestUrl": "https://openagent3.xyz/skills/godot-dev-guide/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/godot-dev-guide/agent.md"
  }
}