<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Godot on KnightLi的博客</title>
        <link>https://knightli.com/zh-tw/tags/godot/</link>
        <description>Recent content in Godot on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-tw</language>
        <lastBuildDate>Sun, 17 May 2026 12:37:30 +0800</lastBuildDate><atom:link href="https://knightli.com/zh-tw/tags/godot/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Godot 遊戲開發入門：從節點、場景到第一個 2D 小遊戲</title>
        <link>https://knightli.com/zh-tw/2026/05/17/godot-game-development-beginner-guide/</link>
        <pubDate>Sun, 17 May 2026 12:37:30 +0800</pubDate>
        
        <guid>https://knightli.com/zh-tw/2026/05/17/godot-game-development-beginner-guide/</guid>
        <description>&lt;p&gt;Godot 是一款開源遊戲引擎，適合從 2D 小遊戲、獨立遊戲原型，到中等規模的 3D 專案開發。&lt;/p&gt;
&lt;p&gt;它最大的特點是輕量、開源、啟動快，節點和場景系統非常清晰。對新手來說，Godot 的門檻通常比 Unity 低；對獨立開發者來說，它不繫結商業授權模式，也更容易做出可控的小專案。&lt;/p&gt;
&lt;p&gt;這篇文章用最少概念把 Godot 的入門路線講清楚：你先理解節點和場景，再學 GDScript，最後用一個 2D 小遊戲把輸入、物理、碰撞、UI、音效和匯出串起來。&lt;/p&gt;
&lt;h2 id=&#34;先說結論&#34;&gt;先說結論
&lt;/h2&gt;&lt;p&gt;Godot 入門不要一上來就學大而全的引擎功能。&lt;/p&gt;
&lt;p&gt;更合理的路線是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先做 2D，不急著做 3D。&lt;/li&gt;
&lt;li&gt;先理解節點和場景，不急著寫複雜架構。&lt;/li&gt;
&lt;li&gt;先學 GDScript，不急著上 C#。&lt;/li&gt;
&lt;li&gt;先做一個能跑、能失敗、能重開的小遊戲。&lt;/li&gt;
&lt;li&gt;再逐步補動畫、音效、UI、關卡和匯出。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;只要做完一個完整小專案，你對 Godot 的理解會比刷十幾個零散教程更穩。&lt;/p&gt;
&lt;h2 id=&#34;godot-適合什麼人&#34;&gt;Godot 適合什麼人
&lt;/h2&gt;&lt;p&gt;Godot 很適合這幾類人：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;想從零開始學遊戲開發。&lt;/li&gt;
&lt;li&gt;想做 2D 獨立遊戲。&lt;/li&gt;
&lt;li&gt;想快速做玩法原型。&lt;/li&gt;
&lt;li&gt;不想被複雜商業引擎工具鏈壓住。&lt;/li&gt;
&lt;li&gt;想理解遊戲引擎底層組織方式。&lt;/li&gt;
&lt;li&gt;有一點 Python / JavaScript 經驗，想快速上手指令碼。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你的目標是大型 3A 畫面、複雜商業團隊管線、現成資產商店生態，Unity 或 Unreal 可能仍然更成熟。但如果目標是學習和做自己的遊戲，Godot 非常適合起步。&lt;/p&gt;
&lt;h2 id=&#34;安裝和專案建立&#34;&gt;安裝和專案建立
&lt;/h2&gt;&lt;p&gt;Godot 的安裝很簡單。&lt;/p&gt;
&lt;p&gt;到官網下載安裝包，解壓後直接執行即可。它不像很多大型引擎那樣必須先裝完整啟動器，也不需要複雜賬號流程。&lt;/p&gt;
&lt;p&gt;新建專案時，建議先選：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Renderer：預設即可。&lt;/li&gt;
&lt;li&gt;Project Name：用英文短橫線或下劃線。&lt;/li&gt;
&lt;li&gt;路徑：不要放在中文或空格特別多的目錄裡。&lt;/li&gt;
&lt;li&gt;版本管理：建議從一開始就用 Git。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;第一個專案可以叫：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;first-godot-game
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;專案建立後，Godot 會進入編輯器。你需要先熟悉幾個區域：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Scene：當前場景的節點樹。&lt;/li&gt;
&lt;li&gt;FileSystem：專案資源目錄。&lt;/li&gt;
&lt;li&gt;Inspector：選中節點的屬性面板。&lt;/li&gt;
&lt;li&gt;Script：指令碼編輯區。&lt;/li&gt;
&lt;li&gt;2D / 3D 檢視：編輯畫面和物件位置。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;godot-的核心節點和場景&#34;&gt;Godot 的核心：節點和場景
&lt;/h2&gt;&lt;p&gt;Godot 最重要的概念只有兩個：節點和場景。&lt;/p&gt;
&lt;p&gt;節點是功能單元。比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Node2D&lt;/code&gt;：2D 物件基礎節點。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Sprite2D&lt;/code&gt;：顯示圖片。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CollisionShape2D&lt;/code&gt;：碰撞形狀。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CharacterBody2D&lt;/code&gt;：可移動角色。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Camera2D&lt;/code&gt;：2D 攝像機。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AudioStreamPlayer&lt;/code&gt;：播放音訊。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Label&lt;/code&gt;：顯示文字。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;場景是一組節點的組合。一個角色可以是一個場景，一個敵人可以是一個場景，一個關卡也可以是一個場景。&lt;/p&gt;
&lt;p&gt;比如一個玩家角色場景可能長這樣：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Player (CharacterBody2D)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── Sprite2D
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── CollisionShape2D
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── Camera2D
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;這棵樹的意思是：玩家本體負責移動，&lt;code&gt;Sprite2D&lt;/code&gt; 負責顯示角色圖片，&lt;code&gt;CollisionShape2D&lt;/code&gt; 負責碰撞，&lt;code&gt;Camera2D&lt;/code&gt; 跟隨玩家。&lt;/p&gt;
&lt;p&gt;Godot 的思路就是：把遊戲拆成很多可複用場景，再把場景組合成完整遊戲。&lt;/p&gt;
&lt;h2 id=&#34;第一個-2d-專案做什麼&#34;&gt;第一個 2D 專案做什麼
&lt;/h2&gt;&lt;p&gt;新手第一個專案不要做 RPG、開放世界、聯機遊戲或複雜平臺跳躍。&lt;/p&gt;
&lt;p&gt;建議做一個最小 2D 閃避遊戲：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;玩家可以上下左右移動。&lt;/li&gt;
&lt;li&gt;敵人從螢幕邊緣出現。&lt;/li&gt;
&lt;li&gt;玩家碰到敵人就失敗。&lt;/li&gt;
&lt;li&gt;存活時間越長分數越高。&lt;/li&gt;
&lt;li&gt;有開始按鈕、失敗介面和重新開始。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這個專案很小，但能覆蓋 Godot 入門最重要的東西：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;角色移動。&lt;/li&gt;
&lt;li&gt;輸入系統。&lt;/li&gt;
&lt;li&gt;碰撞檢測。&lt;/li&gt;
&lt;li&gt;敵人生成。&lt;/li&gt;
&lt;li&gt;UI 顯示。&lt;/li&gt;
&lt;li&gt;定時器。&lt;/li&gt;
&lt;li&gt;音效。&lt;/li&gt;
&lt;li&gt;場景切換。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;做完它，你就已經跨過了“只會看教程，不知道怎麼組織專案”的第一道坎。&lt;/p&gt;
&lt;h2 id=&#34;玩家移動怎麼寫&#34;&gt;玩家移動怎麼寫
&lt;/h2&gt;&lt;p&gt;在 Godot 裡，玩家角色通常用 &lt;code&gt;CharacterBody2D&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;給 &lt;code&gt;Player&lt;/code&gt; 節點掛一個指令碼：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript&#34; data-lang=&#34;gdscript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;CharacterBody2D&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@export&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;speed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;300.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_physics_process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;delta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Vector2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ZERO&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;get_axis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;move_left&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;move_right&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;get_axis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;move_up&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;move_down&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;normalized&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;velocity&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;speed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nf&#34;&gt;move_and_slide&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;這段程式碼做了幾件事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;讀取水平和垂直方向輸入。&lt;/li&gt;
&lt;li&gt;把方向向量歸一化，避免斜向移動更快。&lt;/li&gt;
&lt;li&gt;把方向乘以速度，得到 &lt;code&gt;velocity&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;用 &lt;code&gt;move_and_slide()&lt;/code&gt; 讓角色移動並處理碰撞。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;還需要在 Project Settings 裡設定輸入：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;move_left  -&amp;gt; A / Left
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;move_right -&amp;gt; D / Right
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;move_up    -&amp;gt; W / Up
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;move_down  -&amp;gt; S / Down
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Godot 的輸入系統建議一開始就用 action，不要在程式碼裡直接寫死鍵盤按鍵。這樣以後支援手柄、觸屏或改鍵會方便很多。&lt;/p&gt;
&lt;h2 id=&#34;碰撞和物理怎麼理解&#34;&gt;碰撞和物理怎麼理解
&lt;/h2&gt;&lt;p&gt;Godot 的碰撞不是隻靠圖片大小判斷，而是靠碰撞形狀。&lt;/p&gt;
&lt;p&gt;常用節點有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CollisionShape2D&lt;/code&gt;：給角色或敵人定義碰撞範圍。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Area2D&lt;/code&gt;：檢測進入、離開、重疊，適合觸發器。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CharacterBody2D&lt;/code&gt;：適合玩家和會移動的角色。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RigidBody2D&lt;/code&gt;：適合受物理力影響的物體。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;StaticBody2D&lt;/code&gt;：適合牆、地面、固定障礙。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;入門階段記住一個原則：&lt;/p&gt;
&lt;p&gt;如果你要自己控制角色移動，用 &lt;code&gt;CharacterBody2D&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;如果你只想檢測“玩家碰到敵人”，敵人可以用 &lt;code&gt;Area2D&lt;/code&gt;，再監聽訊號：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript&#34; data-lang=&#34;gdscript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_on_body_entered&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Player&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nf&#34;&gt;get_tree&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;reload_current_scene&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;後面專案變複雜時，可以改成傳送 &lt;code&gt;game_over&lt;/code&gt; 訊號，而不是直接過載場景。新手階段先跑通邏輯更重要。&lt;/p&gt;
&lt;h2 id=&#34;場景例項化讓敵人不斷出現&#34;&gt;場景例項化：讓敵人不斷出現
&lt;/h2&gt;&lt;p&gt;Godot 的場景可以當成“預製體”使用。&lt;/p&gt;
&lt;p&gt;假設你有一個 &lt;code&gt;Enemy.tscn&lt;/code&gt;，可以在主場景裡用指令碼生成它：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript&#34; data-lang=&#34;gdscript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@export&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;enemy_scene&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;PackedScene&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;spawn_enemy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;enemy&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;enemy_scene&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;instantiate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;enemy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;position&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Vector2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;800&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;randf_range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;550&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nf&#34;&gt;add_child&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enemy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;再配合 &lt;code&gt;Timer&lt;/code&gt; 節點，每隔一段時間呼叫一次 &lt;code&gt;spawn_enemy()&lt;/code&gt;，敵人就會不斷生成。&lt;/p&gt;
&lt;p&gt;這就是 Godot 專案常見組織方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一個場景負責一種物件。&lt;/li&gt;
&lt;li&gt;主場景負責排程和組合。&lt;/li&gt;
&lt;li&gt;需要時動態例項化子場景。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ui-和分數&#34;&gt;UI 和分數
&lt;/h2&gt;&lt;p&gt;Godot 的 UI 使用 &lt;code&gt;Control&lt;/code&gt; 系列節點。&lt;/p&gt;
&lt;p&gt;常用節點包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CanvasLayer&lt;/code&gt;：讓 UI 固定在螢幕上，不跟隨相機移動。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Label&lt;/code&gt;：顯示文字。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Button&lt;/code&gt;：按鈕。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Panel&lt;/code&gt;：面板背景。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VBoxContainer&lt;/code&gt; / &lt;code&gt;HBoxContainer&lt;/code&gt;：自動排版。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;分數可以先用存活時間來做：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript&#34; data-lang=&#34;gdscript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;score&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;delta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;score&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;delta&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;$CanvasLayer/ScoreLabel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;text&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;score&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;這樣每秒增加 1 分。後面可以改成擊敗敵人、收集金幣或完成關卡加分。&lt;/p&gt;
&lt;h2 id=&#34;音效和反饋&#34;&gt;音效和反饋
&lt;/h2&gt;&lt;p&gt;小遊戲好不好玩，很大一部分來自反饋。&lt;/p&gt;
&lt;p&gt;即使畫面很簡單，也要加：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;移動或點選音效。&lt;/li&gt;
&lt;li&gt;碰撞音效。&lt;/li&gt;
&lt;li&gt;得分音效。&lt;/li&gt;
&lt;li&gt;失敗音效。&lt;/li&gt;
&lt;li&gt;螢幕震動或閃爍。&lt;/li&gt;
&lt;li&gt;按鈕 hover / pressed 狀態。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Godot 裡可以用 &lt;code&gt;AudioStreamPlayer&lt;/code&gt; 播放音效：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript&#34; data-lang=&#34;gdscript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;$HitSound&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;play&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;新手常犯的錯誤是隻做功能，不做反饋。功能能跑只是第一步，玩家能不能感到“我做了一個動作，遊戲回應了我”，才是遊戲體驗的開始。&lt;/p&gt;
&lt;h2 id=&#34;檔案怎麼組織&#34;&gt;檔案怎麼組織
&lt;/h2&gt;&lt;p&gt;專案一開始就建議整理目錄：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;res://
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── scenes/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── Main.tscn
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── Player.tscn
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── Enemy.tscn
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── scripts/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── player.gd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── enemy.gd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── assets/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── sprites/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── audio/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── ui/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    └── GameOver.tscn
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;不要把所有資源都丟在根目錄。小遊戲階段無所謂，專案稍微大一點就會混亂。&lt;/p&gt;
&lt;p&gt;一個簡單原則是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;場景放 &lt;code&gt;scenes/&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;指令碼放 &lt;code&gt;scripts/&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;圖片和音訊放 &lt;code&gt;assets/&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;UI 單獨放 &lt;code&gt;ui/&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;godot-新手常見坑&#34;&gt;Godot 新手常見坑
&lt;/h2&gt;&lt;p&gt;第一個坑：節點選錯。&lt;/p&gt;
&lt;p&gt;能自己控制移動的角色用 &lt;code&gt;CharacterBody2D&lt;/code&gt;，不是隨便用 &lt;code&gt;Node2D&lt;/code&gt;。觸發檢測用 &lt;code&gt;Area2D&lt;/code&gt;，固定障礙用 &lt;code&gt;StaticBody2D&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;第二個坑：忘記碰撞形狀。&lt;/p&gt;
&lt;p&gt;只有圖片沒有碰撞體，遊戲不會知道它們撞上了。&lt;/p&gt;
&lt;p&gt;第三個坑：把按鍵寫死。&lt;/p&gt;
&lt;p&gt;不要直接判斷 &lt;code&gt;KEY_A&lt;/code&gt;，用輸入 action。&lt;/p&gt;
&lt;p&gt;第四個坑：場景職責混亂。&lt;/p&gt;
&lt;p&gt;不要讓一個指令碼同時管玩家、敵人、UI、音效和關卡。新手可以簡單，但不要所有東西都堆在 &lt;code&gt;Main.gd&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;第五個坑：一開始就做大專案。&lt;/p&gt;
&lt;p&gt;第一個專案越小越好。只要完整，有開始、有失敗、有重新開始，就比半途而廢的大專案更有價值。&lt;/p&gt;
&lt;h2 id=&#34;推薦學習路線&#34;&gt;推薦學習路線
&lt;/h2&gt;&lt;p&gt;可以按這個順序學：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;編輯器基本操作。&lt;/li&gt;
&lt;li&gt;節點和場景。&lt;/li&gt;
&lt;li&gt;GDScript 基礎。&lt;/li&gt;
&lt;li&gt;輸入系統。&lt;/li&gt;
&lt;li&gt;2D 角色移動。&lt;/li&gt;
&lt;li&gt;碰撞和 Area2D。&lt;/li&gt;
&lt;li&gt;Timer 和動態生成。&lt;/li&gt;
&lt;li&gt;UI 和分數。&lt;/li&gt;
&lt;li&gt;音效和動畫。&lt;/li&gt;
&lt;li&gt;匯出桌面或 Web 版本。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;不要一開始就鑽原始碼，也不要馬上學渲染管線、Shader、多人聯機、複雜 AI。先把一個小專案做完，很多概念自然會有位置。&lt;/p&gt;
&lt;h2 id=&#34;godot-和-unity-怎麼選&#34;&gt;Godot 和 Unity 怎麼選
&lt;/h2&gt;&lt;p&gt;如果你主要做 2D 獨立遊戲、教學專案、個人原型，Godot 非常舒服。&lt;/p&gt;
&lt;p&gt;如果你需要龐大的資產商店、成熟商業外掛、移動廣告和商業化 SDK、成熟團隊經驗，Unity 生態仍然更強。&lt;/p&gt;
&lt;p&gt;如果你要做高規格 3D、複雜渲染、影視級畫面，Unreal 更適合。&lt;/p&gt;
&lt;p&gt;對新手來說，不要把選引擎變成拖延。Godot 足夠你做出大量完整小遊戲。你真正需要先學會的是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;遊戲迴圈。&lt;/li&gt;
&lt;li&gt;輸入響應。&lt;/li&gt;
&lt;li&gt;碰撞和反饋。&lt;/li&gt;
&lt;li&gt;場景組織。&lt;/li&gt;
&lt;li&gt;狀態管理。&lt;/li&gt;
&lt;li&gt;資源和版本管理。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這些能力換到其他引擎也能用。&lt;/p&gt;
&lt;h2 id=&#34;第一個專案的完成標準&#34;&gt;第一個專案的完成標準
&lt;/h2&gt;&lt;p&gt;你可以用這個清單判斷自己是否真的入門：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;玩家能移動。&lt;/li&gt;
&lt;li&gt;有敵人或障礙。&lt;/li&gt;
&lt;li&gt;有碰撞失敗。&lt;/li&gt;
&lt;li&gt;有分數或目標。&lt;/li&gt;
&lt;li&gt;有開始介面。&lt;/li&gt;
&lt;li&gt;有失敗介面。&lt;/li&gt;
&lt;li&gt;能重新開始。&lt;/li&gt;
&lt;li&gt;有至少兩個音效。&lt;/li&gt;
&lt;li&gt;有簡單動畫或視覺反饋。&lt;/li&gt;
&lt;li&gt;能匯出一個可執行版本。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;做到這裡，你就不是“開啟過 Godot”，而是真的完成了一個遊戲閉環。&lt;/p&gt;
&lt;h2 id=&#34;總結&#34;&gt;總結
&lt;/h2&gt;&lt;p&gt;Godot 入門的關鍵，不是把所有功能看一遍，而是先理解它的組織方式：節點組成場景，場景組成遊戲，指令碼驅動行為，訊號連線事件，資源透過目錄管理。&lt;/p&gt;
&lt;p&gt;第一個專案建議從 2D 小遊戲開始。玩家移動、敵人生成、碰撞失敗、UI 分數、音效反饋、重新開始，這幾個環節跑通之後，再去學動畫樹、TileMap、存檔、狀態機、3D、Shader 和匯出最佳化。&lt;/p&gt;
&lt;p&gt;遊戲開發不是先學完引擎再開始做，而是在做小專案的過程中反覆補概念。Godot 的優勢正好在這裡：它足夠輕，能讓你很快從“想做遊戲”走到“真的跑起來”。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>DeepSeek V4 Flash 做 Godot 遊戲 Demo：幾毛錢能跑通到什麼程度？</title>
        <link>https://knightli.com/zh-tw/2026/05/06/deepseek-v4-flash-godot-game-demo/</link>
        <pubDate>Wed, 06 May 2026 09:22:18 +0800</pubDate>
        
        <guid>https://knightli.com/zh-tw/2026/05/06/deepseek-v4-flash-godot-game-demo/</guid>
        <description>&lt;p&gt;&lt;code&gt;DeepSeek V4 Flash&lt;/code&gt; 用來開發 Godot 遊戲 Demo，到底能不能打？&lt;/p&gt;
&lt;p&gt;重點很直接：它能不能做出一個可執行、可觀察、帶物理效果的 Godot 小 Demo。&lt;/p&gt;
&lt;p&gt;結論先說：可以跑通，效果不算商業級，但已經足夠作為玩法原型和物理互動 Demo 使用。更重要的是，成本非常低，適合快速驗證想法。&lt;/p&gt;
&lt;h2 id=&#34;demo-表現&#34;&gt;Demo 表現
&lt;/h2&gt;&lt;p&gt;這個 Demo 的重點是物理互動。&lt;/p&gt;
&lt;p&gt;幾個比較直觀的效果包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;繩子可以被切斷。&lt;/li&gt;
&lt;li&gt;箱子會掉到地上。&lt;/li&gt;
&lt;li&gt;調大質量後，箱子碰撞會更猛烈。&lt;/li&gt;
&lt;li&gt;繩子表現出比較明顯的彈性。&lt;/li&gt;
&lt;li&gt;調整摩擦力和彈性後，箱子會出現明顯的滑動和反彈。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;從呈現效果看，它已經不是「只生成幾段 Godot 腳本」那麼簡單，而是一個能執行、能觀察物理表現的小型原型。&lt;/p&gt;
&lt;h2 id=&#34;可用程度&#34;&gt;可用程度
&lt;/h2&gt;&lt;p&gt;這個 Demo 的價值在於「能跑、能看、能改」。它不是完整遊戲，也不是可以直接商業化的工程，但已經能說明幾個問題：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DeepSeek V4 Flash&lt;/code&gt; 能理解 Godot Demo 的基本目標。&lt;/li&gt;
&lt;li&gt;AI Agent 可以把需求轉成可執行工程。&lt;/li&gt;
&lt;li&gt;Godot 物理互動這種非網頁類任務，已經可以進入低成本原型階段。&lt;/li&gt;
&lt;li&gt;對個人開發者來說，它能把「想法」快速變成「能看的東西」。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果目標是做一個正式遊戲，它當然還不夠；但如果目標是驗證「這個玩法有沒有意思」「物理效果大概能不能做出來」，這個 Demo 已經可用。&lt;/p&gt;
&lt;h2 id=&#34;成本意義&#34;&gt;成本意義
&lt;/h2&gt;&lt;p&gt;最值得關注的不是畫面有多精緻，而是成本。&lt;/p&gt;
&lt;p&gt;如果一個 Godot 物理 Demo 只需要幾毛錢級別的模型成本，就能得到一個可執行版本，那麼它的意義就不是替代專業遊戲開發，而是大幅降低原型試錯成本。&lt;/p&gt;
&lt;p&gt;以前想驗證一個小遊戲想法，至少需要自己熟悉 Godot、寫腳本、調場景、調物理參數。現在可以先讓 AI Agent 生成一個可執行版本，再由人判斷方向對不對。&lt;/p&gt;
&lt;p&gt;對獨立開發者來說，這類低成本試錯很有用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;快速驗證玩法概念。&lt;/li&gt;
&lt;li&gt;生成臨時 Demo 給別人看。&lt;/li&gt;
&lt;li&gt;探索 Godot API 和物理系統。&lt;/li&gt;
&lt;li&gt;把想法轉成能跑的初版工程。&lt;/li&gt;
&lt;li&gt;在不確定方向前減少手寫程式碼成本。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;deepseek-v4-flash-的表現&#34;&gt;DeepSeek V4 Flash 的表現
&lt;/h2&gt;&lt;p&gt;比較值得注意的是，使用的是 &lt;code&gt;DeepSeek V4 Flash&lt;/code&gt;，而不是更貴、更重的旗艦模型。&lt;/p&gt;
&lt;p&gt;它在「低成本原型」這個定位上表現不錯。它不是最強、最穩、最適合交付生產工程的模型，但在預算敏感、想快速試一下方向的場景裡，很有吸引力。&lt;/p&gt;
&lt;h2 id=&#34;適合什麼場景&#34;&gt;適合什麼場景
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;DeepSeek V4 Flash + Agent + Godot&lt;/code&gt; 更適合下面這些任務：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;小型玩法原型。&lt;/li&gt;
&lt;li&gt;物理效果 Demo。&lt;/li&gt;
&lt;li&gt;UI 或互動概念驗證。&lt;/li&gt;
&lt;li&gt;教學示例。&lt;/li&gt;
&lt;li&gt;輔助理解 Godot 專案結構。&lt;/li&gt;
&lt;li&gt;生成第一版可執行工程。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不太適合直接承擔這些任務：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;大型遊戲架構。&lt;/li&gt;
&lt;li&gt;複雜角色控制器。&lt;/li&gt;
&lt;li&gt;網路同步。&lt;/li&gt;
&lt;li&gt;商業專案核心程式碼。&lt;/li&gt;
&lt;li&gt;高精度物理模擬。&lt;/li&gt;
&lt;li&gt;不經過人工測試的自動提交。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;換句話說，它適合做「第一稿」和「試驗場」，不適合當生產工程負責人。&lt;/p&gt;
&lt;h2 id=&#34;這說明了什麼&#34;&gt;這說明了什麼
&lt;/h2&gt;&lt;p&gt;這說明，AI 程式設計正在從網頁、腳本、後端介面，繼續向遊戲開發和互動原型擴展。&lt;/p&gt;
&lt;p&gt;過去遊戲開發的門檻很高，尤其是引擎、腳本、資源管理和物理系統混在一起時，新手很容易卡住。現在模型加 Agent 工具，可以先把工程搭起來，讓開發者把注意力放在玩法判斷和效果調優上。&lt;/p&gt;
&lt;p&gt;它帶來的變化可能有三點：&lt;/p&gt;
&lt;p&gt;第一，遊戲原型會更便宜。很多想法不用等到完整開發階段才驗證，可以先得到可執行 Demo。&lt;/p&gt;
&lt;p&gt;第二，獨立開發者會更敢嘗試。不會 Godot 的人，也可以借助 AI 先摸到專案結構和基本流程。&lt;/p&gt;
&lt;p&gt;第三，模型穩定性會變得更重要。遊戲開發不是只要程式碼能跑，還要效果合理、手感正常、參數可控。未來誰能更好地結合實際畫面和執行狀態，誰就更適合做這類任務。&lt;/p&gt;
&lt;h2 id=&#34;小結&#34;&gt;小結
&lt;/h2&gt;&lt;p&gt;DeepSeek V4 Flash 做 Godot Demo，可以概括成一句話：&lt;strong&gt;效果不完美，但足夠便宜、足夠快，也足夠適合做原型。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;它離商業遊戲還很遠，但如果目標是用極低成本驗證一個小遊戲想法，它已經很有價值。&lt;/p&gt;
&lt;p&gt;對個人開發者來說，最現實的用法不是把遊戲全交給 AI，而是讓 AI 先給出能跑的工程，再由人負責判斷、取捨和打磨。這樣用，DeepSeek V4 Flash 這類低成本模型反而會很香。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
