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.

Player 場景與輸入事件

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

到左上角 Scene 功能表點擊 New Scene 建立新場景。

../../_images/new_scene.webp

點擊 Other Node 並選擇 CharacterBody3D 節點型別,建立 CharacterBody3D 作為根節點。

../../_images/add_character_body3D.webp

CharacterBody3D 重新命名為 Player。角色身體與 2D 教學中的 Area 與 RigidBody 互相對應。和剛體一樣,它能移動並與環境碰撞,但移動不是由物理引擎主導,而是由 來控制。之後在實作跳躍與踩扁機制時,你會看到此節點的獨特特性如何派上用場。

也參考

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

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

新增一個 Node3D 作為 Player 的子節點。在 Scene 樹選取 Player,點擊「+」新增子節點,並命名為 Pivot

../../_images/adding_node3D.webp

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

../../_images/instantiating_the_model.webp

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

../../_images/scene_structure.webp

備註

.glb 檔案包含基於開放原始碼 glTF 2.0 規格的 3D 場景資料。它們是現代且強大的替代方案,可取代像 FBX 這樣的專有格式,而 Godot 也支援 FBX。為了產生這些檔案,我們在 Blender 3D 中設計模型,並將其匯出為 glTF。

與所有物理相關節點相同,我們需要碰撞形狀讓角色能與環境碰撞。再次選取 Player,新增子節點 CollisionShape3D。在 InspectorShape 屬性加入新的 SphereShape3D

../../_images/add_capsuleshape3d.webp

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

../../_images/sphere_shape.png

這將會是物理引擎用來與環境碰撞的形狀,所以我們希望它能更貼合 3D 模型。在視埠中拖曳橘色圓點,將它稍微放大一點。我的球體的半徑大約是 0.8 公尺。

然後,將碰撞形狀向上移動,使其底部大致對齊格線平面。

../../_images/moving_the_sphere_up.png

為了更容易移動形狀,你可以點擊 CharacterPivot 節點旁的 眼睛圖示 來切換模型可見度。

../../_images/toggling_visibility.webp

將場景儲存為 player.tscn

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

建立圖示

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

這個系統稱為 Input Map。要開啟其編輯器,請到 Project 功能表並選擇 Project Settings...

../../_images/project_settings.webp

上方有多個分頁。點選 Input Map。此視窗允許你在上方新增動作,下方則可為動作綁定按鍵或按鈕。

../../_images/input_map_tab.webp

Godot 專案內含一些為使用者介面設計而預先定義的動作(見上方截圖)。啟用 Show Built-in Actions 即可顯示。我們也可以直接使用它們,但這裡為了支援手把,將自訂動作。請保持 Show Built-in Actions 關閉。

我們將把我們的動作命名為 move_leftmove_rightmove_forwardmove_backjump

要新增動作,請在上方輸入名稱後按 Enter,或點擊 Add

../../_images/adding_action.webp

有下列事項需注意:

../../_images/actions_list_empty.webp

要將按鍵或按鈕綁定到動作,點擊其右側的「+」按鈕。以 move_left 為例,按左方向鍵後點擊 OK

../../_images/left_inputmap.webp

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

../../_images/keyboard_keys.webp

接著加入手把左搖桿的支援。再次點擊「+」,這次請在輸入樹中自行選擇,於 Joypad Axes 底下選擇左搖桿的負 X 軸。

../../_images/joystick_axis_input.webp

其餘值維持預設,按 OK

備註

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

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

../../_images/move_inputs_mapped.webp

最後設定 jump 動作。請綁定空白鍵與 Joypad Buttons 下的手把 A 鈕。

../../_images/joy_button_option.webp

你的跳躍輸入動作應該會像這樣。

../../_images/jump_input_action.webp

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

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