Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Player 場景與輸入事件
在接下來的兩節課程中,我們將會設計玩家場景、註冊自訂輸入動作、編寫玩家移動程式碼。在最後,你將會得到一個可以八方向移動的可遊玩角色。
到左上角 Scene 功能表點擊 New Scene 建立新場景。
點擊 Other Node 並選擇 CharacterBody3D 節點型別,建立 CharacterBody3D 作為根節點。
將 CharacterBody3D 重新命名為 Player。角色身體與 2D 教學中的 Area 與 RigidBody 互相對應。和剛體一樣,它能移動並與環境碰撞,但移動不是由物理引擎主導,而是由 你 來控制。之後在實作跳躍與踩扁機制時,你會看到此節點的獨特特性如何派上用場。
也參考
要學習更多關於不同物理節點型別的內容,請參閱 物理系統簡介。
現在,我們將為角色的 3D 模型建立一個基本的裝備。稍後我們將在播放動畫時通過程式碼旋轉模型。
新增一個 Node3D 作為 Player 的子節點。在 Scene 樹選取 Player,點擊「+」新增子節點,並命名為 Pivot。
然後在檔案系統面板中,按兩下展開 art/ 資料夾,將 player.glb 拖放到 Pivot 節點上。
這樣應該就會把這個模型產生實體為 Pivot 的子項。你可以將其重命名為 Character 。
備註
.glb 檔案包含基於開放原始碼 glTF 2.0 規格的 3D 場景資料。它們是現代且強大的替代方案,可取代像 FBX 這樣的專有格式,而 Godot 也支援 FBX。為了產生這些檔案,我們在 Blender 3D 中設計模型,並將其匯出為 glTF。
與所有物理相關節點相同,我們需要碰撞形狀讓角色能與環境碰撞。再次選取 Player,新增子節點 CollisionShape3D。在 Inspector 的 Shape 屬性加入新的 SphereShape3D。
球體的線框出現在角色的下面。
這將會是物理引擎用來與環境碰撞的形狀,所以我們希望它能更貼合 3D 模型。在視埠中拖曳橘色圓點,將它稍微放大一點。我的球體的半徑大約是 0.8 公尺。
然後,將碰撞形狀向上移動,使其底部大致對齊格線平面。
為了更容易移動形狀,你可以點擊 Character 或 Pivot 節點旁的 眼睛圖示 來切換模型可見度。
將場景儲存為 player.tscn。
節點準備就緒後,我們開始編寫程式。但首先,我們需要定義一些輸入動作。
建立圖示
要移動角色,我們就要監聽玩家的輸入,比如按下方向鍵。在 Godot 中,我們能夠使用程式碼來綁定按鍵,但還有一個非常強大的系統,可以讓你為一系列按鍵和按鈕設定標籤。這樣可以簡化我們的腳本,讓它們更易讀。
這個系統稱為 Input Map。要開啟其編輯器,請到 Project 功能表並選擇 Project Settings...。
上方有多個分頁。點選 Input Map。此視窗允許你在上方新增動作,下方則可為動作綁定按鍵或按鈕。
Godot 專案內含一些為使用者介面設計而預先定義的動作(見上方截圖)。啟用 Show Built-in Actions 即可顯示。我們也可以直接使用它們,但這裡為了支援手把,將自訂動作。請保持 Show Built-in Actions 關閉。
我們將把我們的動作命名為 move_left、move_right、move_forward、move_back 和 jump。
要新增動作,請在上方輸入名稱後按 Enter,或點擊 Add。
有下列事項需注意:
要將按鍵或按鈕綁定到動作,點擊其右側的「+」按鈕。以 move_left 為例,按左方向鍵後點擊 OK。
將 A 鍵也綁定在動作 move_left 上面。
接著加入手把左搖桿的支援。再次點擊「+」,這次請在輸入樹中自行選擇,於 Joypad Axes 底下選擇左搖桿的負 X 軸。
其餘值維持預設,按 OK。
備註
如果你想讓多個手柄有不同的輸入動作,你需要在額外選項中使用裝置選項。裝置 0 對應的是第一個插入的手柄,裝置 1 對應的是第二個插入的手柄,以此類推。
為其他輸入動作也執行同樣的操作。比如將右方向鍵、D、左搖桿的正軸綁定給 move_right。全部綁定完後,你的介面應該類似這樣。
最後設定 jump 動作。請綁定空白鍵與 Joypad Buttons 下的手把 A 鈕。
你的跳躍輸入動作應該會像這樣。
這些就是這個遊戲所需的所有動作了。你可以使用這個功能表來對專案中的任意按鍵和按鈕組進行標記。
在下一部分,我們將為玩家的移動進行程式設計和測試。