Work in progress

The content of this page was not yet updated for Godot 4.2 and may be outdated. If you know how to improve this page or you can confirm that it's up to date, feel free to open a pull request.

Player 場景與輸入事件

在接下來的兩節課程中,我們將會設計玩家場景、註冊自訂輸入動作、編寫玩家移動程式碼。在最後,你將會得到一個可以八方向移動的可遊玩角色。

在左上角的*場景*功能表中按一下*新建場景*來建立一個新場景。

image0

建立一個 CharacterBody3D 節點來當根節點

../../_images/add_character_body3D.webp

CharacterBody3D 命名為``Player``。角色身體(Character body)對應的是 2D 遊戲教學中的區域(Area)和剛體(Rigid Body)。與剛體類似,它可以移動並與環境發生碰撞,但它的運動並不是由物理引擎控制的,而是由*你*支配。當我們編寫跳躍和踩踏機制時,你就會看到我們是如何使用這一該節點獨有的功能的。

也參考

要學習更多關於不同物理節點型別的內容,請參閱 物理介紹

現在,我們將為角色的 3D 模型建立一個基本的裝備。稍後我們將在播放動畫時通過程式碼旋轉模型。

新建一個 Node3D 節點作為 Player 的子節點,並將其命名為 Pivot

../../_images/adding_node3D.webp

然後在檔案系統面板中,按兩下展開 art/ 資料夾,將 player.glb 拖放到 Pivot 節點上。

image1

這樣應該就會把這個模型產生實體為 Pivot 的子項。你可以將其重命名為 Character

image2

備註

.glb 檔包含基於開源的 GLTF 2.0 規範的 3D 場景資料。它是一種現代的、強大的並替代 FBX 等專有格式的檔,Godot 也支援這種格式。為了製作這些檔,我們在 Blender 3D 中設計了模型,並將其匯出為 GLTF。

與所有型別的物理節點一樣,我們的角色需要一個碰撞形狀才能與環境相碰撞。再次選中 Player 節點並新增 CollisionShape3D 子節點。在*屬性面板*中,為 Shape 屬性新建一個 SphereShape3D

../../_images/add_capsuleshape3d.webp

球體的線框出現在角色的下面。

image3

它將是物理引擎用來與環境碰撞的形狀,因此我們希望它更適合 3D 模型。通過拖動視口中的橙色點將其縮小一點。我的球體半徑約為 0.8 米。

然後,向上移動形狀,使其底部與網格平面大致對齊。

image4

您可以通過按一下 CharacterPivot 節點旁邊的眼睛圖示來切換模型的可見性。

image5

最後,保存場景為 sayhello.tscn 之類的名稱。

節點準備就緒後,我們開始編寫程式。但首先,我們需要定義一些輸入動作。

建立圖示

要移動角色,我們就要監聽玩家的輸入,比如按下方向鍵。在 Godot 中,我們能夠使用程式碼來綁定按鍵,但還有一個非常強大的系統,可以讓你為一系列按鍵和按鈕設定標籤。這樣可以簡化我們的腳本,讓它們更易讀。

這個系統是“按鍵對應”。可以在*專案*功能表中選擇*專案設定*來打開編輯器。

image6

頂部有許多標籤。點擊*按鍵對應*。你可以在這個視窗頂部新增新的動作;即標籤。下半部分可以為這些動作綁定按鍵。

image7

Godot 專案針對使用者介面設計提供了一些預定義的動作,我們這裡可以直接使用。不過為了支援手柄,我們還是自己來定義。

我們要把這些動作命名為 move_leftmove_rightmove_forwardmove_back``jump``(向左移動、向右移動、向前移動、向後移動、跳躍)。

要新增動作,可以在頂部的框中輸入名稱然後按確認鍵。

image8

有下列事項需注意:

image9

要為動作綁定按鍵或按鈕,請點擊右側的“+”按鈕。對 move_left 執行此操作,按下左方向鍵,然後按一下*確定*。

../../_images/left_inputmap.webp

A 鍵也綁定在動作 move_left 上面。

image12

現在讓我們為手柄左搖桿新增支援。再次點擊“+”按鈕,但是這一次選擇*手動選擇 -> 搖桿軸*。

../../_images/joystick_axis_input.webp

選擇左邊遙感的負 X 軸。

../../_images/left_joystick_select.webp

將其它值保持為預設,然後點擊 確定

備註

如果你想讓多個手柄有不同的輸入動作,你需要在額外選項中使用裝置選項。裝置 0 對應的是第一個插入的手柄,裝置 1 對應的是第二個插入的手柄,以此類推。

為其他輸入動作也執行同樣的操作。比如將右方向鍵、D、左搖桿的正軸綁定給 move_right。全部綁定完後,你的介面應該類似這樣。

image1

最後一個動作是設定 jump 動作。綁定空白鍵和手柄的 A 鍵。

image1

現在場景看起來會這樣:

image1

這些就是這個遊戲所需的所有動作了。你可以使用這個功能表來對專案中的任意按鍵和按鈕組進行標記。

在下一部分,我們將為玩家的移動進行程式設計和測試。