見出し画像

GODOT Game engineでゲームを作ってみよう!(その3)

どうも僕です。

前回は敵さんを登場させました。

今回はその2のやり忘れと、
スコアとかタイトルを追加*し、仕上げます。
*GODOT DOCSに従い、
 残りの「ヘッドアップディスプレイ」と「仕上げ」を実装します。

その2のやり忘れ

mobと主人公の接触時のシグナルと
main.gdファイルのgame_over()メソッドの紐づけを
忘れていたので設定しよう。
main.tscnをダブルクリック。

左側Mainシーン配下のArea2Dを選択し、

右側「ノード」タブをクリック。

hit()があるので右クリの接続を選択する。

Pickをぽちー。

game_over()を選択してOKぽちー。

接続ぽちー。

main.gdファイルのgame_over()メソッドの横に
緑色の接続アイコンが出ればOKっす。

ここで一度保存しよう。(Ctrl+Sキー)

ヘッドアップディスプレイ

タイトル/スコア表示用シーンを追加

メニューのシーン>新規シーンを選択する。

その他ノードを選び、

CavasLayerで検索し、「CavasLayer」を作成しよう。

シーンの名前をHUDにしよう。

HUDを右クリックし、孫ノードを追加する。

Labelを二つ追加し、それぞれ以下の名前に変更する。
・ScoreLabel
・Message

HUDを右クリックし、子ノードを追加する。
ButtonとTimerを一つずつ追加し、それぞれ以下の名前に変更する。
・StartButton
・MessageTimer

ここで一度保存しよう。(Ctrl+Sキー)

ScoreLabelを選択し、右側インスペクターから
Textに”0”を入力し、

Font Sizes(Control > Theme Overrides > Font Sizes)を64ptにする。

中央のシーン表示に
ScoreLabelの位置を示す表示がされるので
⊕アイコン(アンカーのプリセット)をクリックして中央上を選択しよう。

Messageを選択し、右側インスペクターから
Textに”スライムから逃げろゲーム”を入力し、

Font Sizes(Control > Theme Overrides > Font Sizes)を64ptにする。

中央のシーン表示に
Messageの位置を示す表示がされるので
⊕アイコン(アンカーのプリセット)をクリックして中央を選択しよう。

StartButtonを選択し、右側インスペクターから
Textに”START”を入力し、

Font Sizes(Control > Theme Overrides > Font Sizes)を64ptにする。

中央のシーン表示に
StartButtonの位置を示す表示がされるので
⊕アイコン(アンカーのプリセット)をクリックして中央下を選択しよう。

MessageTimerを選択し、右側インスペクターから
Wait Timeに2sを設定し、
One Shotにチェックを入れる。

ここで一度保存しよう。(Ctrl+Sキー)

次にHUDにGDスクリプトを追加する。
HUDを選択し、巻物アイコン+をクリックしよう。

作成をクリックしよう。

以下のように書き換える。

extends CanvasLayer

# Notifies `Main` node that the button has been pressed
signal start_game

# Called when the node enters the scene tree for the first time.
func _ready():
	pass # Replace with function body.


# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
	pass

func show_message(text):
	$Message.text = text
	$Message.show()
	$MessageTimer.start()
	
func show_game_over():
	show_message("Game Over")
	# Wait until the MessageTimer has counted down.
	await $MessageTimer.timeout

	$Message.text = "スライムから逃げろゲーム"
	$Message.show()
	# Make a one-shot timer and wait for it to finish.
	await get_tree().create_timer(1.0).timeout
	$StartButton.show()

func update_score(score):
	$ScoreLabel.text = str(score)

func _on_start_button_pressed():
	$StartButton.hide()
	start_game.emit()

func _on_message_timer_timeout():
	$Message.hide()

ここで一度保存しよう。(Ctrl+Sキー)

さらにシグナルをプログラムと紐づける。
StartButtonを選択し、右側「ノード」タブを選択する。

BaseButtonの下にpressed()があるから
右クリ「接続」を選択する。

そのまま接続をぽちー。

MessageTimerを選択し、右側「ノード」タブを選択する。

Timerの下にtimeout()があるので
右クリ「接続」を選択する。

そのまま接続をぽちー。

hud.gdのプログラムで
以下のように、緑色の接続アイコン*が付いてることを確認しよう。
*メソッドへの接続されたことを意味してます
*メソッドとはfunc ~の事ね

ここで一度保存しよう。(Ctrl+Sキー)

MainシーンにHUDシーンを組込

main.tscnを右クリックしてOpen Sceneを選択する。

Mainシーンを右クリックし、Instantiate Child Sceneを選択する。

hud.tscnを選択し、開くをぽちー。

MainシーンにHUDシーンが組み込まれた。

MainシーンでHUDシーンからのシグナルを受け取ろう。
Mainシーンの配下のHUDシーンを選択して、

右側の「ノード」タブをクリックしてシグナル一覧を表示しよう。

hud.gdの中のstart_game()を右クリで接続を選択する。

Pickボタンを押して、

new_game()メソッドを選択し、OKぽちー。

受信側メソッドに
new_gameが記入されていることを確認して
接続ぽちー。

main.gdファイルのnew_game()メソッドの横に
緑色の接続アイコンがあればOKっす。

main.gdファイルの_ready()メソッドは

Mainシーンのテスト用だったので削除しよう。

new_game()メソッドに以下を追記しよう。

	$HUD.update_score(score)
	$HUD.show_message("Get Ready")

game_over()メソッドに以下を追記しよう。

	$HUD.show_game_over()

_on_score_timer_timeout()メソッドに以下を追記しよう。

	$HUD.update_score(score)

ここで一度保存しよう。(Ctrl+Sキー)

スタート時の敵さん掃除

mob.tscnを右クリックしてOpen Sceneを選択する。

Mobを選択し、

右側「ノード」タブの「グループ」をクリックする。

グループの管理に"mobs"って入力して、追加ぽちー。

Mobシーンたち(敵さんたち)がmobsグループで括られた。

Mainシーンで上記mobsグループに対してクリーン命令を出す。
(=スタート時の敵さん掃除)
main.gdをダブルクリック。

main.gdファイルのnew_game()メソッドに以下を追記する。

get_tree().call_group("mobs", "queue_free")

ここで一度保存しよう。(Ctrl+Sキー)

仕上げ

背景画像の設定

ここからフリー素材をダウンロードしよう。
作者様に感謝!(素材を拡散するか、フォローしよう)

ドキュメントフォルダのGODOTプロジェクトのフォルダの中に
textureフォルダでも作成して、ダウンロードした背景画像を格納しよう。

すぐにGODOTが取り込むので、ファイルシステムに現れる。

Mainシーンを表示し、

子ノード「TextureRect」を追加しよう。

TextureRectを選択し、

右側インスペクターの
TextureRectのTextureの<空>をクリックして

読み込みを選択しよう。

背景画像を選択し、開くぽちー。

背景画像を最背面に持ってくるため、
Mainノードの直下にTextureRectを移動しよう。
(ドラッグアンドドロップね!)

サイズを調整しよう。
右側インスペクターのExpand ModeをIgnore Sizeにして

Mainノードのプレビューで背景画像を右下端を掴んで
サイズを合うように調整。

ここで一度保存しよう。(Ctrl+Sキー)

BGMと効果音の設定

BGMはここからありがたく
ダウンロード
させていただきました。

効果音はここからありがたく
ダウンロード
させていただきました。

*ここに効果音の製作者様を表示しておきます!
 効果音 by「風人」様

ドキュメントフォルダのGODOTプロジェクトのフォルダの中に
soundフォルダでも作成して、
ダウンロードしたBGMと効果音を格納しよう。

すぐにGODOTが取り込むので、ファイルシステムに現れる。

Mainシーンを表示し、

Mainの下に2つ子ノードとしてAudioStreamPlayerを追加し、

それぞれ以下の名前に修正する。
・Music
・DeathSound

Musicを選択して
右側インスペクターのSteamの<空>をクリックし、
読み込みをクリック。

BGMファイルを選択して開くぽちー。

SteamにBGMファイルが設定されたことを確認。

ファイルシステムのBGMファイルをダブルクリック。

ループの有効にチェックを入れて、再インポートぽちー。

DeathSoundを選択して
右側インスペクターのSteamの<空>をクリックし、
読み込みをクリック。

効果音ファイルを選択して開くぽちー。

Steamに効果音ファイルが設定されたことを確認。

main.gdファイルを開き
new_game()メソッドに以下を追記し、

$Music.play()

game_over()メソッドに以下を追記する。

$Music.stop()
$DeathSound.play()

ここで一度保存しよう。(Ctrl+Sキー)

キーボードショートカット

Enterキーでゲームがスタートできるようにします。
メニューのプロジェクト>プロジェクト設定

"start_game"と入力し、追加ぽちー。

+をクリックし、

キーボードのキーのEnterを選択し、OKぽちー。

閉じるぽちー。

hud.tscnをダブルクリックで開き、シーンのStartButtonを選択する。

右側インスペクターのShortcutの<空>をクリックし、

新規Shortcutを選択する。

<空>からShortcutに置き換わるので
そのShortcutをクリックし、
さらにArray[InputEvent](サイズ0)をクリックする。

「要素を追加」をクリックしてから
<空>をクリックし、新規InputEventActionを選択する。

さらにInputEventActionをクリックし、
Actionに"start_game"と入力する。

ここで一度保存しよう。(Ctrl+Sキー)

以上で完成です!!!

では、遊んでみよう!
右上の再生アイコン▶で実行!

おぉ、雰囲気出てるね!
ここまで、およそ8時間くらいかな?

次回は3Dゲームのチュートリアルをやってみようと思います。

今回は以上です。
では、また!


この記事が気に入ったらサポートをしてみませんか?