
在上一篇,我們談了「狀態機」—讓角色不再亂跑、亂跳、亂攻擊。
但當你開始寫更多角色、更多敵人、更多物件時,你會遇到另一個經典問題:
為什麼我改一個數值,整個遊戲都壞掉?
你想讓角色跑快一點,結果攻擊動畫變快;
你想讓敵人血量變高一點,結果掉落物也跟著壞掉;
你想調整跳躍高度,結果整個物理都崩潰。
這不是你不會寫程式。
這是你缺少遊戲開發裡另一個關鍵概念:
資料與行為分離(Data–Behavior Separation)。
一、什麼叫「資料」?什麼叫「行為」?
這兩個詞聽起來很抽象,但其實非常簡單。
資料(Data)=數值、設定、屬性
例如:
- 移動速度
- 跳躍高度
- 血量
- 攻擊力
- 重力
- 冷卻時間
- 掉落機率
這些都是「資料」。
行為(Behavior)=角色如何使用資料
例如:
- 移動邏輯
- 跳躍邏輯
- 攻擊邏輯
- AI 決策
- 物理反應
- 狀態轉換
這些是「行為」。
二、初學者最常犯的錯誤:把資料寫死在行為裡
例如:
```gdscript
velocity.x = 200
jump_force = -450
if health <= 0:
die()
```
這些數字看起來沒問題,但它們有一個致命缺點:
你永遠不知道哪裡用了它們,也不知道改了會影響什麼。
結果就是:
- 你改速度 → 跳躍壞掉
- 你改血量 → 敵人 AI 壞掉
- 你改攻擊力 → UI 顯示錯誤
因為資料散落在程式碼裡,行為又依賴這些資料,
你就會寫出一個「改一個地方壞三個地方」的遊戲。
三、資料與行為分離的核心:資料是資料,行為是行為
資料應該:
- 放在一個地方
- 清楚命名
- 可以被調整
- 不會影響邏輯
行為應該:
- 讀取資料
- 使用資料
- 不修改資料本身
這樣你就能:
- 改速度不會影響跳躍
- 改血量不會影響 AI
- 改攻擊力不會影響 UI
因為資料是獨立的,行為只是「使用」資料。
四、資料應該放在哪裡?
這取決於你的遊戲規模,但原則很簡單:
1. 小型遊戲:資料放在節點上(export 變數)
```gdscript
@export var move_speed = 200
@export var jump_force = -450
@export var max_health = 100
```
優點:
- Godot Inspector 可以直接調整
- 不用寫額外系統
- 清楚、直觀
2. 中型遊戲:資料放在 Script Resource
例如:
```
PlayerStats.tres
EnemyStats.tres
WeaponStats.tres
```
優點:
- 多個角色可以共用資料
- 修改一次,全遊戲更新
- 不會散落在程式碼裡
3. 大型遊戲:資料放在資料庫或 JSON
例如:
```
player.json
enemy.json
weapons.json
items.json
```
優點:
- 可以批次調整
- 可以用工具編輯
- 可以做版本控制
五、行為應該怎麼寫?
行為不應該寫死數值,而是:
- 從資料讀取
- 使用資料
- 不修改資料
例如:
```gdscript
velocity.x = input_direction * stats.move_speed
```
或:
```gdscript
if is_on_floor() and Input.is_action_just_pressed("jump"):
velocity.y = stats.jump_force
```
這樣你就能:
- 調整數值不會破壞邏輯
- 角色之間只差資料,不差程式
- 敵人可以共用同一套 AI
- 武器可以共用同一套攻擊邏輯
六、資料與行為分離的最大好處:可維護性
當你做到資料與行為分離,你會得到:
1. 角色可以快速調整
你想讓角色跑快一點?
改一個數字就好。
2. 敵人可以快速複製
你想做三種敵人?
複製資料就好。
3. 武器可以快速平衡
你想調整攻擊力?
改資料就好。
4. 程式碼不會變成屎山
因為行為不會被數值綁死。
5. 你不會害怕改東西
因為你知道改資料不會破壞邏輯。
七、資料與行為分離的常見誤區
誤區 1:把資料放在行為裡
(例如:`velocity.x = 200`)
誤區 2:把行為放在資料裡
(例如:在 JSON 裡寫 `"attack": "play_animation('slash')"`)
誤區 3:資料太分散
(角色速度在這裡,跳躍高度在那裡)
誤區 4:資料沒有命名
(`var a = 200` 這種東西會讓你未來想死)
八、今天的結論:資料與行為分離,是遊戲能不能長大的關鍵
如果你只做一個小遊戲,你可能感覺不到差別。
但只要你開始:
- 多一個角色
- 多一個敵人
- 多一個武器
- 多一個關卡
你就會發現:
資料與行為分離,是遊戲能不能維護、能不能擴充、能不能活下去的關鍵。
資料是資料。
行為是行為。
兩者分開,你的遊戲就能長大。

















