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ゲームのチュートリアルをやってみようと思います。
今回は以上です。
では、また!
この記事が気に入ったらサポートをしてみませんか?