プレイヤーシーンと入力アクション

次の2つのレッスンでは、プレイヤーのシーンをデザインし、カスタム入力アクションを登録し、プレイヤーの動きをコーディングします。最後には、8方向に動くプレイ可能なキャラクターが完成します。

左上のシーンメニューからNew Scene(新規シーン)をクリックし、新しいシーンを作成します。ルートとしてKinematicBodyノードを作成し、Playerという名前を付けます。

image0

キネマティックボディは、2D ゲームのチュートリアルで使用したエリアとリジッドボディを補完するものです。リジッドボディと同じように、移動して環境と衝突することができますが、物理エンジンによって制御されるのではなく、あなたがその動きを指示します。このノードのユニークな機能を、ジャンプとスクワッシュの動作のコーディングで見ていきます。

参考

さまざまな物理ノードの種類についての詳細は、 物理の紹介 を参照してください。

とりあえず、キャラクタの3D モデルに対して基本的なリグを作成します。これによって、後でアニメーションを再生しながら、コードを使用してモデルを回転させることができます。

Spatialノードを Playerの子として追加し、Pivotという名前に変更します。次に、ファイルシステム(FileSystem) ドックで、art/フォルダをダブルクリックして展開し、player.glbPivotノードにドラッグ アンド ドロップしてください。

image1

これで、Pivotの子としてモデルがインスタンス化されるはずです。これをCharacterにリネームすることができます。

image2

注釈

.glbファイルは、オープンソースの GLTF 2.0 仕様に基づく 3D シーン データを含んでいます。これは、FBX のような独自のフォーマットに代わる、現代的で強力なフォーマットで、Godot もこれをサポートしています。これらのファイルを作成するために、Blender 3Dでモデルを設計し、それを GLTF にエクスポートしました。

あらゆる種類の物理ノードと同様に、キャラクターが環境と衝突するためのコリジョン形状が必要です。Playerノードを再度選択し、CollisionShapeを追加してください。インスペクター(Inspector)で、SphereShapeShapeのプロパティに代入します。球体のワイヤーフレームが、キャラクターの下に表示されます。

image3

これは、物理エンジンが環境と衝突するときに使用する形状になります。なので、3D モデルにうまくフィットするようにします。ビューポートでオレンジ色のドットをドラッグして、少し縮小してください。私の球体の半径は、0.8メートルほどです。

次に、この形状を上に移動して、その底がグリッドの平面とほぼ一致するようにします。

image4

モデルの可視性を切り替えるには、CharacterノードまたはPivotノードの横にある目のアイコンをクリックします。

image5

Player.tscnという名前でシーンを保存します。

ノードの準備ができたので、ほとんどコーディングできるようになりました。しかしその前に、いくつかの入力アクションを定義する必要があります。

Creating input actions

To move the character, we will listen to the player's input, like pressing the arrow keys. In Godot, while we could write all the key bindings in code, there's a powerful system that allows you to assign a label to a set of keys and buttons. This simplifies our scripts and makes them more readable.

This system is the Input Map. To access its editor, head to the Project menu and select Project Settings….

\ image6

At the top, there are multiple tabs. Click on Input Map. This window allows you to add new actions at the top; they are your labels. In the bottom part, you can bind keys to these actions.

\ image7

Godot projects come with some predefined actions designed for user interface design, which we could use here. But we're defining our own to support gamepads.

We're going to name our actions move_left, move_right, move_forward, move_back, and jump.

To add an action, write its name in the bar at the top and press Enter.

\ image8

Create the five actions. Your window should have them all listed at the bottom.

\ image9

To bind a key or button to an action, click the "+" button to its right. Do this for move_left and in the drop-down menu, click Key.

\ image10

This option allows you to add a keyboard input. A popup appears and waits for you to press a key. Press the left arrow key and click OK.

\ image11

Do the same for the A key.

\ image12

Let's now add support for a gamepad's left joystick. Click the "+" button again but this time, select Joy Axis.

\ image13

The popup gives you two drop-down menus. On the left, you can select a gamepad by index. Device 0 corresponds to the first plugged gamepad, Device 1 corresponds to the second, and so on. You can select the joystick and direction you want to bind to the input action on the right. Leave the default values and press the Add button.

image14

Do the same for the other input actions. For example, bind the right arrow, D, and the left joystick's right axis to move_right. After binding all keys, your interface should look like this.

image15

We have the jump action left to set up. Bind the Space key and the gamepad's A button. To bind a gamepad's button, select the Joy Button option in the menu.

image16

Leave the default values and click the Add button.

image17

Your jump input action should look like this.

image18

That's all the actions we need for this game. You can use this menu to label any groups of keys and buttons in your projects.

In the next part, we'll code and test the player's movement.