Godotを始めて最初にぶつかる壁が「スクリプト」ではないでしょうか。英語と記号だらけのコードを見て、そっとエディタを閉じたくなった——そんな経験があっても大丈夫です。ゲームを動かすのに、GDScriptのすべてを覚える必要はありません。
Godotでゲームのロジックを書く言語が GDScript です。この記事では、コードを書き始めるうえで「これだけは知っておきたい」基礎——変数と型、関数、if/for/while/match、そして配列と辞書——に絞って、実際に動く小さな例とともにひとつずつ解説します。
この記事でわかること
- 変数と型 ——値を入れておく「箱」の使い方(
var/const)- 関数 ——処理をまとめて再利用する(
func/ 引数 / 戻り値)- 制御構文 ——
if/for/while/matchの分岐と繰り返し- 配列と辞書 ——
ArrayとDictionaryで複数のデータをまとめる
変数と型
変数 とは、数値や文字列などの値を入れておく「箱」です。GDScriptでは var で箱を作り、= で値を入 れます。

箱には 型(データの種類) があります。Godotでよく使う基本の型はこちらです。
| 型 | 説明 | 例 |
|---|---|---|
int | 整数 | var score := 100 |
float | 小数 | var speed := 5.5 |
bool | 真偽値(true / false) | var is_alive := true |
String | 文字列(" で囲む) | var name := "Hero" |
Vector2 | 2D座標・方向 | var pos := Vector2(10, 20) |
型の付け方:var・型推論・const
変数の宣言にはいくつか書き方があります。 型を付けておく と、間違った値の代入を防げて安全です。
var health: int = 100 # 型を明示する書き方
var speed := 5.5 # :=(型推論): 右辺からfloatと自動で決まる
var name = "Hero" # 型なしでも動くが、型付き が安全
const MAX_HP := 999 # constは「変更できない値」。定数名は大文字が慣例
:= は 型推論つきの代入 で、右辺の値から型が自動で決まります。var speed := 5.5 は var speed: float = 5.5 と同じ意味で、短く書けるのでよく使われます。値が変わらないもの(最大HPなど)は const にしておくと、うっかり書き換える事故を防げます。型そのものをもっと深く知りたくなったら GDScriptの静的型付け が参考になります。
関数
関数 は、特定の処理をひとまとめにしたものです。一度作れば、同じ処理を何度でも呼び出して再利用できます。GDScriptでは func で定義します。

イメージは「材料(引数)を入れると、加工された結果(戻り値)が出てくる機械」です。
func _ready() -> void:
say_hello() # 関数を呼び出す
var result := add(10, 5) # 引数を渡し、戻り値を受け取る
print("10 + 5 = ", result) # → 10 + 5 = 15
# 引数も戻り値もない関数(-> void は「値を返さない」印)
func say_hello() -> void:
print("こんにちは!")
# int型の引数を2つ受け取り、int型を返す関数
func add(a: int, b: int) -> int:
return a + b # returnで値を返す
- 引数 :関数に渡す材料。
名前: 型の形で書き、複数ならカンマで区切ります - 戻り値 :
-> 型で返す値の型を書きます。何も返さないなら-> void - デフォルト引数 :
func greet(name: String = "Hero")のように 省略時の値 を決められます
_ready() や _process() も、Godotが特定のタイミングで自動的に呼ぶ特殊な関数です(ライフサイクル 参照)。
制御構文:if・for・while・match
プログラムの流れを操るのが 制御構文 です。「if は分かれ道、for/while はぐるぐる繰り返し、match は値ごとの仕分け」とイメージすると掴みやすいです。

if:条件分岐
「もし 〜なら…する」の分岐です。2つ目以降の条件は elif、どれにも当てはまらない場合は else です。
var score := 85
if score >= 80:
print("素晴らしい!")
elif score >= 60:
print("合格です")
else:
print("もう少し")
for・while:繰り返し
for は「決まった回数・要素ぶん」繰り返します。while は「条件が真の間」繰り返します。
for i in range(3): # 0, 1, 2 の3回
print("カウント: ", i)
for enemy in enemies: # 配列の要素を1つずつ(後述)
enemy.take_damage(10)
var hp := 3
while hp > 0: # hpが0より大きい間くり返す
hp -= 1
match:値ごとの仕分け
1つの値を複数のパターンと照らし合わせて分岐します。状態名などの分岐は、if/elif を並べるより読みやすくなります。
match state:
"idle":
print("待機")
"run":
print("走る")
_: # _ はどれにも一致しなかったときの受け皿
print("その他")
配列と辞書
敵が10体いるとき、enemy1・enemy2…と変数を10個作るのは大変です。 複数のデータをまとめて扱う のが配列(Array)と辞書(Dictionary)です。

配列(Array) は、値を 順番 に並べた入れ物です。0 から始まる番号(インデックス)でアクセスします。
var items := ["剣", "盾", "薬"]
print(items[0]) # → 剣(0番目)
items.append("兜") # 末尾に追加
for item in items: # 全要素をひとつずつ
print(item)
辞書(Dictionary) は、 名前(キー)と値 をペアで持つ入れ物です。番号ではなく「名前」でアクセスします。
var stats := {"hp": 100, "atk": 15}
print(stats["hp"]) # → 100(キーhpの値)
stats["def"] = 8 # キーdefで新しいペアを追加
「順番が大事なら配列、名前で引きたいなら辞書」と使い分けます。より構造化したデータを扱いたくなったら カスタムリソース も選択肢になります。
実践:敵の体力処理を書いてみる
ここまでの文法を組み合わせると、もう小さな仕組みが作れます。RPGのスライム、アクションのザコ、シューティングの敵機——どれにも通じる「HPを持ち、ダメージで減り、0になったら倒れる」処理を書いてみましょう。

extends Node
var health: int = 30 # 変数:体力を持つ
const MAX_HEALTH := 30 # 定数:最大値
# 関数:ダメージを受ける処理(引数 amount、戻り値なし)
func take_damage(amount: int) -> void:
health -= amount # 体力を減らす
print("残りHP: ", health)
if health <= 0: # 制御構文:0以下なら倒れる
die()
func die() -> void:
print("敵を倒した!")
queue_free() # 自分を消す
ポイントは2つです。
- 文法は「部品」、組み合わせて仕組みになる :
var(体力を持つ)・func(処理をまとめる)・if(条件で分ける)という基礎部品を組んだだけで、敵の振る舞いができました。どんな複雑なゲームも、この積み重ねです。 - まず動かして覚える :
print()で値を出しながら少しずつ書くと、文法が体に馴染みます。エラーが出たら デバッグ技法 の記事が助けになります。
おまけ:先に知っておくと良いこと
基礎を使い始めると、次のような「その先」に出会います。名前だけでも知っておくと道筋が見えます。
- 型を付けると安全&速い :
varは型なしでも動きますが、型を付けると間違いを早く見つけられ、実行も速くなります。詳しくは 静的型付け で解説しています。 - ノード同士の連携はシグナル :「敵が倒れた」を他へ伝えるには、
printではなく シグナル を使います。シグナルによるノード間の連携 が入口です。 - Pythonに似ているけど別物 :インデントで構造を作る・コロンを使う点はPython風ですが、GDScriptはGodot専用言語で、
Vector2やNodeが最初から組み込まれています。Pythonの知識は雰囲気を掴むのに役立ちますが、そのままでは動きません。
まとめ
- 変数 はデータを入れる箱。
varで作り、型(int/float/Stringなど)を付けると安全。変わらない値はconst - 関数 は
funcで定義する処理のまとまり。引数で材料を受け取り、-> 型で結果を返す(返さないなら-> void) - 制御構文 は
if(分岐)・for/while(繰り返し)・match(値ごとの仕分け) - 配列
[]は順番、辞書{}は名前でデータをまとめる - 文法は「部品」。組み合わせるだけで敵の体力処理のような仕組みが作れる
最初は難しく感じても、実際に短いコードを書いて動かすうちに自然と身につきます。まずはこれらを道具に、ゲームに簡単な動きやルールを加えてみてください。
さらに学ぶために
- GDScriptの静的型付け徹底解説 ——型を付けて安全・高速にする
- 「シーン」と「ノード」の基本を徹底解説 ——スクリプトを載せる土台
- シグナルによるノード間の連携 ——
printの次の一歩 - Godot公式ドキュメント:GDScript basics ——文法の一次情報