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 鈕。
你的跳躍輸入動作應該會像這樣。
這些就是這個遊戲所需的所有動作了。你可以使用這個功能表來對專案中的任意按鍵和按鈕組進行標記。
在下一部分,我們將為玩家的移動進行程式設計和測試。