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】リストダイアログをつくろう

