
在前幾篇,我們已經把遊戲世界的「心跳」建立起來,也讓角色能夠在世界裡存在、更新、變化。
但遊戲如果只有世界自己動,玩家卻什麼都不能做,那就不是遊戲,只是動畫。
互動的誕生,就是從「輸入」開始。
今天我們要談的不是按鍵名稱、不是 API、不是「按 A 跳躍」這種教科書式的東西。
而是—玩家輸入到底是什麼?為什麼它是遊戲的靈魂?
一、輸入不是按鍵,是「意圖」
很多初學者會把「輸入」理解成:
- 玩家按下左鍵 → 角色往左
- 玩家按下空白鍵 → 跳躍
- 玩家按下滑鼠 → 攻擊
這當然沒錯,但這只是表層。
真正的輸入,是玩家的意圖。
玩家按下左鍵,不是因為他喜歡左鍵,而是因為:
- 他想移動
- 他想靠近某個東西
- 他想躲避危險
輸入是「意圖的表達」,程式只是把意圖翻譯成行為。
這個觀念很重要,因為:
遊戲的手感,就是在翻譯玩家意圖的過程中,盡量不要讓玩家覺得被背叛。
二、輸入 → 解讀 → 行為:三段式互動模型
我們把互動拆成三段:
1. 玩家輸入(Input)
玩家按下某個按鍵、移動滑鼠、觸碰螢幕。
2. 遊戲解讀(Interpret)
遊戲判斷:
「這個輸入代表什麼意圖?」
「現在能不能執行?」
「要不要忽略?」
「要不要排隊?」
3. 遊戲反應(Response)
角色移動、跳躍、攻擊、播放動畫、觸發音效。
三、輸入的第一個原則:永遠要有回饋
玩家按下按鍵後,如果遊戲沒有任何反應,玩家會覺得:
- 壞掉了
- 卡住了
- 延遲了
- 不知道自己做錯什麼
所以,即使行為不能執行,也要盡量給回饋。
例如:
- 攻擊被打斷 → 播放受傷動畫
- 互動物件太遠 → 顯示提示
這些都是「輸入被接收,但行為無法執行」的回饋。
沒有回饋的輸入,就像是壞掉的輸入。
四、輸入的第二個原則:輸入不等於行為
這是初學者最常犯的錯誤。
例如:
```gdscript
if Input.is_action_pressed("ui_right"):
position.x += 5
```
這段程式碼看起來沒問題,但它把「輸入」直接綁死在「行為」上。
結果就是:
- 想加速度?難。
- 想做滑步?難。
- 想做衝刺?難。
- 想做動畫過渡?難。
- 想做物理碰撞?更難。
因為你把「按鍵」直接等於「移動」。
正確的做法應該是:
輸入 → 設定狀態 → 狀態決定行為
例如:
```gdscript
var move_direction = 0
if Input.is_action_pressed("ui_right"):
move_direction += 1
if Input.is_action_pressed("ui_left"):
move_direction -= 1
```
然後在角色的 `_physics_process` 裡:
```gdscript
velocity.x = move_direction * speed
```
這樣你就能有機會轉換成各種可能情況:
- 加速度
- 減速度
- 滑行
- 衝刺
- 受傷硬直
- 冰面滑動
- 泥地減速
全部都能做,因為你把「輸入」和「行為」分開了。
五、輸入的第三個原則:輸入是「狀態」,不是「事件」
很多人會把輸入當成事件:
- 按下 → 做事
- 放開 → 停止
但遊戲不是事件驅動,而是狀態驅動。
玩家按著右鍵不放,這不是一個事件,而是一個持續的狀態。
遊戲每一幀都要根據這個狀態更新角色。
這就是為什麼 Godot 的輸入系統有:
- is_action_pressed()(持續按壓)
- is_action_just_pressed()(瞬間按下)
- is_action_just_released()(瞬間放開)
因為它們對應不同的「意圖」。
六、輸入的第四個原則:輸入要能被「覆蓋」
什麼意思?
例如:
- 玩家正在走路 → 按下攻擊 → 角色應該停止走路並攻擊
- 玩家正在攻擊 → 被敵人打到 → 攻擊應該被打斷
- 玩家正在跳躍 → 落地 → 自動切換成跑步
這些都是「狀態覆蓋」。
如果你把輸入直接寫死在行為裡,你就會遇到:
- 動畫卡住
- 行為互相打架
- 角色不聽話
- 手感變得奇怪
所以輸入必須進入「狀態機」,而不是直接驅動行為。
七、輸入的第五個原則:輸入要能被「忽略」
例如:
- 角色被暈眩 → 所有輸入無效
- 角色在空中 → 不能互動或是對話
- 角色在攻擊後作用力中 → 不能再攻擊
- 角色在對話 → 不能移動
忽略輸入不是壞事,而是遊戲設計的一部分。
限制,是遊戲設計的語言。
八、今天的結論:輸入是遊戲的靈魂
輸入不是按鍵。
輸入不是事件。
輸入不是行為。
輸入是:
- 玩家意圖
- 狀態變化
- 行為的觸發條件
- 遊戲手感的核心
只要你能掌握:
1. 輸入要有回饋
2. 輸入與行為分離
3. 輸入是狀態,不是事件
4. 輸入要能被覆蓋
5. 輸入要能被忽略
你就能做出「手感良好」的遊戲。

















