SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

Godot Engine 2Dゲーム開発入門

【詳細解説】Godot Engineで始める2Dゲーム開発──公式サンプルを試してみよう

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

HUDとメインの統合

HUDをメインに接続

 続いてHUDをメインに接続します。

 画面上部のタブで「2D」を選び、2Dビューにします。そして「main」シーンを開きます。「main」シーンをすでに閉じてしまっている時は、「ファイルシステム」ドックからmain.tscnをダブルクリックします。

 「シーン」ドックの「Main」ノードを選択します。そして、「シーン」ドックの鎖アイコンをクリックして、「hud」シーンをインスタンス化して追加します。あるいは「Main」ノードを右クリックして、「子シーンをインスタンス化」を選択します。

 「Ctrl+S」で変更を保存します。

「シーンを選択」ダイアログ
「シーンを選択」ダイアログ
HUD配置後
HUD配置後

 「シーン」ドックの、「HUD」ノードを選択します。右側のサイドバーの「ノード」ドックの「シグナル」タブの「hud.gd」>「start_game()」を右クリックして、「接続」を選択します。

「接続」を選択
「接続」を選択

 「メソッドにシグナルを接続」ダイアログが開きます。「Main」ノードを選択した状態で、「受信側メソッド」の右横にある「選択」ボタンを押します。

「メソッドにシグナルを接続」ダイアログ
「メソッドにシグナルを接続」ダイアログ

 「メソッドの選択」ダイアログが開きますので、「new_game()」を選択して「OK」ボタンを押します。

「メソッドの選択」ダイアログ
「メソッドの選択」ダイアログ

 「メソッドにシグナルを接続」ダイアログに戻るので、ダイアログの下にある「接続」ボタンを押します。

「メソッドにシグナルを接続」ダイアログ2
「メソッドにシグナルを接続」ダイアログ2

 「Ctrl+S」で変更を保存します。main.gdnew_game関数と、hud.gdstart_gameシグナルが接続されました。

 これで、hud.gd内でstart_game.emit()を実行すると、main.gdnew_game関数が実行されます。

main.gd
main.gd

main.gdへのスクリプトの追加

 それではnew_game関数にスクリプトを追加しましょう。末尾に2行追加します。

# 新ゲーム開始
func new_game() -> void:
	score = 0
	$Player.start($StartPosition.position)
	$StartTimer.start()
	$HUD.update_score(score)		# 得点の更新
	$HUD.show_message("Get Ready")	# メッセージの表示

 「HUD」ノードのupdate_score関数を実行して、scoreの値(ここでは0)を設定します。

 そして、「HUD」ノードのshow_message関数を実行して、"Get Ready"のテキストを表示します。

 また、game_over関数にもスクリプトを追加します。末尾に1行追加します。

# ゲーム終了
func game_over() -> void:
	$ScoreTimer.stop()
	$MobTimer.stop()
	$HUD.show_game_over()	# ゲーム終了

 もう1ヶ所、_on_score_timer_timeout関数にもスクリプトを追加します。末尾に1行追加します。

func _on_score_timer_timeout() -> void:
	score += 1
	$HUD.update_score(score)	# 得点の更新

古い敵の削除

 続いて、古い敵を削除する機能を追加します。新しいゲームの開始時に、古い敵をまとめて削除するためです。

 まず、「シーン」ドックで、「Mob」ルートノードを選択します。そして、右側のサイドバーの「ノード」ドックを開き、「グループ」タブを選択します。そして、「グループを絞り込む」の左にある「+記号のボタン」(新規グループを追加する)を押します。

グループ
グループ

 「新規グループを作成」ダイアログが開きますので、「名前」に「mobs」と入力して「OK」ボタンを押します。

「新規グループを作成」ダイアログ
「新規グループを作成」ダイアログ

 「シーングループ」に「mobs」が追加されました。「Ctrl+S」で変更を保存します。

シーングループ
シーングループ

 これで、すべての「Mob」が「mobs」グループに含まれるようになります。この「mobs」の名前を利用して、まとめて「Mob」を操作できます。

 次に、main.gdを開きます。そしてnew_game関数の末尾にスクリプトを1行追加します。

# 新ゲーム開始
func new_game() -> void:
	score = 0
	$Player.start($StartPosition.position)
	$StartTimer.start()
	$HUD.update_score(score)		# 得点の更新
	$HUD.show_message("Get Ready")	# メッセージの表示
	get_tree().call_group("mobs", "queue_free")		# Mobをまとめて削除

 get_tree関数はすでに出てきました。シーンツリーを取得する関数です。

 このシーンツリーのcall_group関数は、第1引数のグループに対して、第2引数のメソッドを呼び出します。ここでは全ての「Mob」のインスタンスを削除します。

ゲームの実行

 画面右上の「▶ボタン」(プロジェクトを実行)をクリックして、ここまでの処理を確かめます。

ゲーム画面1
ゲーム画面1
ゲーム画面2
ゲーム画面2
ゲーム画面3
ゲーム画面3

 ここまでで一通り遊ぶことができます。次は最後の仕上げです。

次のページ
11.仕上げ

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

Godot Engine 2Dゲーム開発入門連載記事一覧

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/21370 2025/05/28 11:00

イベント

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

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

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

メールバックナンバー