GDScriptチートシート
今さらですが、GDScriptの簡単な文法をまとめておきます。
まずはクラスの基本的な仕様です。
-
1ファイル、1クラス
-
トップレベルに
extends ~
と記述することで継承 - トップレベルに書いた変数はメンバー変数になる
-
トップレベルで
class_name MyClass
のように書けば、グローバルからクラス名でファイルを利用可能 -
static
を付けた変数や関数は、インスタンス化しなくても利用可能
-
トップレベルに
変数や定数の書き方と、主な型を示します。
# 変数 var a = 5 var s = "Hello" var arr = [1, 2, 3] var dict = {"key": "value", 2: 3} var other_dict = {key = "value", other_key = 2} var typed_var: int var inferred_type := "String" var v2 = Vector2(1, 2) var v3 = Vector3(1, 2, 3) # 定数 const ANSWER = 42 const THE_NAME = "Charly" # 列挙型 enum {UNIT_NEUTRAL, UNIT_ENEMY, UNIT_ALLY} enum Named {THING_1, THING_2, ANOTHER_THING = -1}
関数と制御構文です。
func some_function(param1, param2, param3): const local_const = 5 if param1 < local_const: print(param1) elif param2 > 5: print(param2) else: print("Fail!") for i in range(20): print(i) while param2 != 0: param2 -= 1 match param3: 3: print("param3 is 3!") _: print("param3 is not 3!") var local_var = param1 + 3 return local_var
例外処理はありません。可能な限り、落ちないように実行し続けようとします。
頻出する特殊な短縮構文です。
$NodePath # get_node("NodePath") の短縮形 %UniqueNode # get_node("%UniqueNode") の短縮形
get_node
関数は、引数にノードのパスを書くことで選択する関数です。$NodePath
はその短縮形で、get_node("Sword")
を$Sword
のように書けます。
%UniqueNode
を利用するには、「シーン」ドックで、利用したいノードを右クリックして「固有名でアクセス」を選択しておく必要があります。この機能を使えば、ツリーの深いところにあるノードを簡単に選択して利用できます。

Pythonのように、末尾に\
を書くことで行の継続も行えます。
var a = 1 + \ 2
型ヒントは使ってもよいですし、使わなくてもよいです。書き方はPythonとほぼ同じです。この記事を書いている時点では、配列などのネストは型ヒントで表現できません。
継承関係のキャストは、次のようにできます。
var my_node2D: Node2D my_node2D = $Sprite2D as Node2D
ラムダ関数もあります。次のように書きます。戻り値を返すにはreturn
が必要です。
var lambda = func (x): print(x) return x * 2 var res = lambda.call(42) print(res)
GDScriptでは、次のようにfor
文を書くことができます。下の2つは同じ出力になります。
for i in range(20): print(i) for i in 20: print(i)
Pythonのようなenumerate
関数を使った処理はありません。次のようにsize
関数を使って書きます。
var array = [10, 20, 30] for i in array.size(): print("%s %s" % [i, array[i]])
クラスコンストラクターは_init
です。親はsuper
で呼べます。静的コンストラクターは_static_init
です。
load
関数は、ファイルをクラスとして読み込みます。preload
関数は、コンパイル時に一度だけ読み込みます。読み込んだクラスはnew
関数でインスタンス化できます。
load
やpreload
はシーンも読み込めます。シーン(PackedScene)から実際のノードを作成するにはinstantiate
関数を利用します。
詳しい文法は、公式のページにまとまっています。こちらも参考にしてください。
まとめ
オリジナルの迷路ゲームの作成に関して、今回は次のような作業をしました。
- プロジェクトの作成
- リソースの配置
- 「Player」シーンの作成
- 「Maze」シーンの作成(途中)
- 「Clear」シーンの作成
今回も、いろいろと新しい内容が出てきました。
-
CharacterBody2D
- マウスによる操作
- 自動移動
- カメラの追随
- Tween
次回以降は、次のように進む予定です。
- 第4回 【Godot Engine 2Dゲーム制作 Part2】迷路をつくろう
- 第5回 【Godot Engine 2Dゲーム制作 Part3】複数の画面を移動しよう
- 第6回 【Godot Engine 2Dゲーム制作 Part4】リストダイアログをつくろう
