目次
動作確認を兼ねてバランスゲームを作ってみましょう。

プロジェクトの作成
エディターを起動して、プログラムやグラフィック、Godotで作成した素材をまとめて保存しておくプロジェクトを作ります。
- インストールしたフォルダーの中の
Godot_v4.2-stable_win64.exeのような名前のファイルをダブルクリックしてエディターを起動します(vの後の数字はバージョンごとに変わるので読み替えてください)

- 左上の作成をクリックします

- プロジェクト名に
balanceと入力して、レンダラーは互換性を選んで、フォルダーを選ぶために参照ボタンをクリックします

- プロジェクトを作成したい場所を開いて、現在のフォルダーを選択を選択します

- 作成ボタンをクリックします

以上で、新規のプロジェクトbalanceが作成されて、Godotエディターが起動します。

新しく何かを作る時は、同様の手順で任意の場所に、プロジェクトを作成してください。
最初のシーン
プロジェクトには何も用意されていないので、このままでは実行できません。実行するためには、何らかのノードを追加します。
ルートノードの作成
Godotエディターの左上のシーンドックを見ると、ルートノードを生成と書かれている下に2Dシーン、3Dシーン、ユーザーインターフェース、その他のノードというボタンが並んでいます。

ゲームシーンをまとめるためのルート(根っこ)となるノードを作ります。
- その他のノードをクリックして、一覧の一番上にあるNodeを選択して、作成をクリックします

- [Ctrl]+[S]キーを押して、ノードをシーンとして保存します
- ファイル欄に、
main.tscnと入力して、保存ボタンをクリックします

ゲームをまとめるためのルートノードを作って、mainという名前でシーンとして保存しました。ノードやシーンの説明は、後ほどします。
実行
これで実行できるようになりました。実行してみましょう。
- エディター右上のプロジェクトを実行ボタンをクリックするか、F5キーを押します

- 確認ダイアログが表示されるので、現在のものを選択をクリックします

実行ウィンドウが表示されて、プロジェクトが実行されます。灰色の画面が表示されるだけですが、空のノードを作っただけなので、これでOKです。

停止
実行を確認したら、ウィンドウの右上のXボタンをクリックするか、Godotエディター右上の停止ボタンをクリックするか、F8キーを押して、実行を停止します。

Godotの4つの基本要素
ノード(Node)とシーン(Scene)という単語が出てきました。これらに加えて、シーンツリー(Scene Tree)と、シグナル(Signal)を合わせた4つの要素が、Godotの重要な概念です。それぞれ、簡単に解説します。使っているうちに腑に落ちますので、現段階ではさらっと読み流す程度で大丈夫です。
ノード(Node)
ノードは、「節点」や「結び目」などの意味の英単語です。コンピューターの世界では「個々の機能」というような意味合いで使われたりします。機能を持ったノードを線で結んで、処理やシェーダーを作ったりします。
Godotでは、ゲームを組み立てるための最小の部品をノードと呼びます。ノードは、機能を持ち、拡張性があり、階層化できます。
シーン(Scene)
ノードを一つ以上組み合わせて、ファイルに保存したものを、シーンと呼びます。シーンは、ノードの子供にしたり、他のシーンの中に配置したり、スクリプトで生成したりできます。
似たものとしては、Unityのシーンやプレハブが挙げられます。Godotでは、プレハブとシーンの区別がなく、なんでもシーンとして開くことができます。
シーンツリー(Scene Tree)
実行されているシーンの構造を、シーンツリーと呼びます。Godotエディターのシーンドックに表示されます。
Godotは、シーンツリーとして読み込んだ何らかのシーンを実行します。いきなり実行できないのはそのためです。実行するためには、シーンツリーとして開くためのシーンが必要です。
シグナル(Signal)
ノードに何かが起きた時に、実行したい処理を外部から登録する機能です。特定のことが起きたら、ノードは、登録された処理を呼び出します。
衝突したり、ダメージを受けたりした時の処理を、外部から登録できるので、ノードの再利用性が高まります。
まとめると
- 様々な機能を持ったノードを組み合わせて開発します
- シーンは、ノードを編集したり、ツリー構造にしたものを保存したものです
- シーンツリーは、実行時にメモリに展開しているシーン構造です
- シグナルで、ノードやスクリプト間のやりとりができます
というような感じです。
詳しくは公式マニュアルを参照してください。
バランスゲームのシーンを作る
今回は動作確認がしたいだけなので、1つのシーンで手軽に作ります。作成したNodeの子供に以下のものを追加します。
- 操作するための球体
Player - カメラ
- 平行光
- バランスを取るカプセル状のオブジェクト
Capsule
操作するための球体Playerの作成
まずはPlayerを作成します。
- シーンドックに作成したNodeを右クリックして、子ノードを追加を選択します

- 球体はRigidBody3Dで制御したいので、検索欄に
riと入力します。すると、RigidBody3Dが表示されるので、選択して作成ボタンをクリックします

- シーンドックにRigidBody3Dが作成されるので、クリックして、名前を
Playerに変更します

シーンドックのPlayerの右に警告マークが表示されますが、無視して先に進みます。
球体に見えるようにメッシュを子供に追加します。Godotは、球体やカプセルといった基本的な形状を作る機能を持っています。
- シーンドックのPlayerを右クリックして、子ノードを追加をクリックします

- 検索欄に
meshと入力します。MeshInstance3Dを見つけて選択したら、作成ボタンをクリックします

MeshInstance3Dノードを使うと、3Dモデルを表示できます。簡単な形状なら、Godotで作成できます。球体を作ってみましょう。
- エディター右にあるインスペクタードックのMesh欄をクリックします

- 球体を作りたいので、SphereMeshをクリックします

球体のメッシュが作成されて、編集画面とMesh欄に球体が表示されました。

先ほど無視したPlayerの警告を解決します。Playerは、RigidBody3Dノードで作成しましたが、このノードには、当たり判定の形状を持たせる必要があります。そのための警告でした。見た目と同じ、球体の当たり判定を作ります。
- シーンドックでPlayerを右クリックして、子ノードを追加をクリックします
- 検索欄に
shape3と入力して、CollisionShape3Dを選択して、作成ボタンをクリックします

これで、Playerの警告は消えます。今度は、ColliderShape3Dに、当たり判定の形状がないと警告が表示されます。メッシュと同様に、インスペクターで形状を作成します。
- インスペクターのShape欄をクリックして、SphereShape3Dをクリックします

球体の当たり判定が作成できました。シーンドックの警告が全て消えます。
Playerに必要なノードは揃いました。あとでスクリプトをアタッチします。
[Ctrl]+[S]キーを押して保存したら、F5キーを押して実行してみてください。

開始しても、先ほどと同じ灰色の画面で、作成した球体が見えません。球体を映すためのカメラがないからです。
カメラを作る
カメラを作って、作成した球体を見えるようにします。
- シーンドックのNodeを右クリックして、子ノードを追加をクリックします
- 検索欄に
cam3と入力して、Camera3Dを選択したら、作成ボタンをクリックします

カメラができました。このままでは重なっていて、Playerが映らないので、座標を少し手前に移動させます。
- シーンドックのCamera3Dを選択します
- インスペクターのTransform欄を探して、クリックして開きます
- Positionの
zに、10を入力して、Enterキーを押します。Position欄が見つからない場合は、インスペクタードックを下にスクロールさせてください

カメラが10m手前に移動しました。Godotの3Dは、1が1mを表します。X軸の正方向が右、Y軸の正方向が上、Z軸の正方向が手前です。
カメラを選択した状態だと、ビューポートの左上にプレビューのチェックボックスが表示されます。これをクリックして、チェックしてみてください。

プレビューを有効にすると、カメラからの視点で表示できます。薄い黄色の線が画面の表示範囲を表しています。
[Ctrl]+[S]キーで保存したら、F5キーで実行してください。球体が落下するのが見えるようになります。

動きを確認したら停止してください。
画面が暗いのでライトを追加してみましょう。
平行光を作成する
ライトにはいくつか種類があります。太陽光としてよく用いられる平行光のディレクショナルライトを追加します。
- シーンドックのNodeを右クリックして、子ノードを追加をクリックします
- 検索欄に
dire3と入力して、DirectionalLight3Dを選択して、作成をクリックします
以上で平行光の作成が完了です。保存したら実行してみてください。球体が明るくなりました。

カプセルを作成する
バランスを取るためのカプセルを作成します。手順は、Playerとほぼ同じです。
- シーンドックのNodeを右クリックして、子ノードを追加をクリックします
-
rigid3と入力して、RigidBody3Dを選択して、作成をクリックします - 作成されたノードの名前を、RigidBody3Dから
Capsuleに変更します
バランスを取るためのカプセルを制御するノードができました。表示するためのメッシュを子に追加します。
- シーンドックのCapsuleを右クリックして、子ノードを追加をクリックします
-
mesh3で検索して、MeshInstance3Dを選択して、作成をクリックします - インスペクターのMesh欄をクリックして、CapsuleMeshをクリックします
カプセルが画面に表示されます。

Playerの球体と被っているので、上から落ちてくるように、座標を変更します。
- シーンドックのCapsuleをクリックして選択します
- インスペクターのTransform欄を探して、クリックして開きます
- Positionの
yに数字を入力したり、マウスで数字をドラッグして移動させて、良さそうな高さにしてください。5mぐらいでよさそうです

当たり判定を作成します。
- シーンドックのCapsuleを右クリックして、子ノードを追加をクリックします
-
shape3で検索して、CollisionShape3Dを選択して、作成をクリックします - インスペクターのShape欄をクリックして、CapsuleShape3Dをクリックします
以上で、できあがりです。

[Ctrl]+[S]キーを押して保存してから、[F5]キーで実行してみてください。プレイヤーとカプセルが落下するのが確認できます。確認したら停止してください。

これで必要なものが揃いました。
Playerの操作
Playerをマウスで操作できるようにします。Godotは、GDScriptというPythonライクな独自言語と、C#が使えます。C#はまだ対応が完了しておらず、動作しないプラットフォームがあるなど試験的な導入という位置づけです。GDExtentionを使うとC++が使えるようになったり、非公式ではありますが、他の言語も使えるようになります。
現時点での公式の推奨スクリプトであるGDScriptで実装します。
スクリプトを作成する
実際の開発では、ファイル数が大量になります。シーンやスクリプトをプロジェクトフォルダー直下に置くと、探すのが大変になるので、フォルダーで整理します。ここでは、scriptsというフォルダーを作成して、その中にスクリプトを作成してから、Playerにアタッチします。
- ファイルシステムドックのres://を右クリックして、新規作成 > フォルダーを選択します

- フォルダー名を
scriptsにして、OKをクリックします

- 作成したscriptsフォルダーを右クリックして、新規作成 > スクリプトを選択します

- 継承元の右にあるツリーリストアイコンをクリックします

-
rigid3で検索して、RigidBody3Dを選択して、継承ボタンをクリックします

- テンプレートのチェックを外して、パスのファイル名を
player.gdにして、作成ボタンをクリックします

scriptsフォルダー内に、playerスクリプトが作成されました。これを、playerにアタッチします。
- ファイルシステムドックのscriptsをクリックして、開きます
- player.gdをドラッグして、シーンドックのPlayerノードにドロップします

Playerノードに、playerスクリプトをアタッチできました。シーンドックのPlayerノードの右に、スクリプトアイコンが表示されます。
![]()
スクリプトの作成
GDScriptで、マウスカーソルの位置に、Playerを移動させる処理を作成します。
- ファイルシステムドックで、player.gdをダブルクリックします

ビューポートがスクリプトに切り替わります。以下のようなコードが予め作成されています。
extends RigidBody3D
これは、「RigidBody3Dノードの機能を利用します」という意味です。
GDScriptの書き方
スクリプトを書くにあたっての注意事項です。
- 半角英数で入力してください
- 字下げは見本通りにTabキーで入力してください
全角で入力していると、うっかり全角文字が残ってしまう場合があります。特に全角スペースは発見が難しいです。余計な問題を防ぐために、半角英数モードで入力してください。
GDScriptはC言語やC#と違い、インデント(字下げ)が意味を持ちます。インデントを省略したり、数が多かったりするとエラーになります。これがPythonライクと言われる理由です。スペースの数の違いでもエラーになるので、Tabキーで字下げをしてください。
実装
プログラムを実装します。以下のようにスクリプトを入力するか、コピペしてください。
- 大文字小文字もその通りに入力してください
-
#からはじまる行は省略して構いません
extends RigidBody3D
@onready var viewport := get_viewport()
@onready var camera := get_viewport().get_camera_3d()
func _integrate_forces(state):
# マウス座標の取得
var mouse_position = viewport.get_mouse_position()
# カメラからの距離
var z = camera.global_position.z - global_position.z
# カメラからの距離に対するマウスのワールド座標
var world_position = camera.project_position(mouse_position, z)
# 現在位置からの位置ベクトルを求める
var to = world_position - global_position
# 速度に変換して設定
state.linear_velocity = to / state.step
入力したら、[Ctrl]+[S]キーで保存して、[F5]キーで実行してください。マウスでPlayerが操作できるようになります。カプセルを落とさないように操作してみてください。

まとめ
プロジェクトを作成して、マウスで操作する簡単なバランスゲームを作ってみました。以下、やったことです。
- プロジェクトの作成
- 実行と停止
- 物理シミュレーションをさせるための球体やカプセルの作成と設定
- カメラとライトの作成
- GDScriptの作成
インストールしたGodotエディターの動作確認と、簡単なゲーム開発を試しました。インストールが完了して動作が確認できたら、公式マニュアルやYouTubeの講座がたくさんありますので色々と動かしてみてください。
Godotは、3と4でかなり仕様が違います。マニュアルやチュートリアルには、古い情報が残っている場合があります。動作しないことがあれば、古い情報の可能性があります。新しい情報を探してみてください。
この後
この後に進むと良さそうな情報をご紹介します。
- バランスゲームのGDScript解説
- 作成したスクリプトの解説ページです
- Godot公式ドキュメント
- 公式ページのドキュメントです。重要な情報が掲載されています。情報量が多いので、一気に読み切ろうとせず、少しずつ読み進めるとよいでしょう
- 全て日本語化できてはいませんが、翻訳は日々進んでいます
- PROG Inc. ゆるっとはじめる Godot Engine ゲームプログラミング 入門編
- 技術書典でPROG Inc.さんが販売している同人の技術書です
- 2024年1月時点では3冊が販売されています。公式マニュアルなどでGodotの基本操作がわかっているなら、好きなやつを選んでください。2と3は1を終えている前提なので、基本操作から学びたい場合は、1のクリッカーゲームを選ぶことをお勧めします
- GDQuest
- 英語ですが、評判のGodotのYouTubeチャンネルがGDQuestです。Godotエディター上で学べる学習素材などを公開しています。