SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Godot Engine 2Dゲーム開発入門

【Godot Engine 2Dゲーム制作 Part1】キャラクターを出して動かそう!

Godot Engine 2Dゲーム開発入門 第3回

  • X ポスト
  • このエントリーをはてなブックマークに追加

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関数でインスタンス化できます。

 loadpreloadはシーンも読み込めます。シーン(PackedScene)から実際のノードを作成するにはinstantiate関数を利用します。

 詳しい文法は、公式のページにまとまっています。こちらも参考にしてください。

まとめ

 オリジナルの迷路ゲームの作成に関して、今回は次のような作業をしました。

  • プロジェクトの作成
  • リソースの配置
  • 「Player」シーンの作成
  • 「Maze」シーンの作成(途中)
  • 「Clear」シーンの作成

 今回も、いろいろと新しい内容が出てきました。

  • CharacterBody2D
    • マウスによる操作
    • 自動移動
  • カメラの追随
  • Tween

 次回以降は、次のように進む予定です。

  • 第4回 【Godot Engine 2Dゲーム制作 Part2】迷路をつくろう
  • 第5回 【Godot Engine 2Dゲーム制作 Part3】複数の画面を移動しよう
  • 第6回 【Godot Engine 2Dゲーム制作 Part4】リストダイアログをつくろう

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Godot Engine 2Dゲーム開発入門連載記事一覧

もっと読む

この記事の著者

柳井 政和(ヤナイ マサカズ)

クロノス・クラウン合同会社 代表社員http://crocro.com/オンラインソフトを多数公開。プログラムを書いたり、ゲームを作ったり、記事を執筆したり、マンガを描いたり、小説を書いたりしています。「めもりーくりーなー」でオンラインソフト大賞に入賞。最近は、小説家デビューして小説も書いています(『裏切りのプログラム』他)。面白いことなら何でもOKのさすらいの企画屋です。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/21371 2025/06/19 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング