mieki256's diary



2020/10/28(水) [n年前の日記]

#3 [godot] Godot EngineでHUDシーンにスクリプトを追加

Godot Enigne 3.2.3 x64 の勉強を兼ねて、Apple Catcher っぽいゲームを作成中。

今回は、スコア、ゲームタイトル、スタートボタンの表示を担当するHUDシーンにスクリプトを追加する。後々、メインシーンから「スコア表示を更新しろ」だの「GAME OVERを表示しろ」だの色々指示されるはずなので、そういった処理を書く。

スクリプトファイルを追加。 :

Hudノードを選んでおいて、右上のスクリプトをアタッチするボタンをクリック。

godot_tuto13_hud_script_ss01.png


res://scripts/ 以下に Hud.gd というファイル名でスクリプトファイルを作成。

godot_tuto13_hud_script_ss02.png


スクリプトを記述するエディタ画面が開かれた。

godot_tuto13_hud_script_ss03.png

スタートボタンを押したときのメソッドを用意する。 :

スタートボタンが押された時に、ゲーム開始処理を行わないといけない。そのあたりの処理を行うメソッドを用意する。

StartButtonノードを選択。

godot_tuto13_hud_script_ss04.png


Buttonノードがマウスクリックされると、pressed() というシグナルが発行される。このシグナルにメソッドを接続する。ノードタブをクリックして、pressed() を選択して「接続」。

godot_tuto13_hud_script_ss05.png


Hudノードを選択して「接続」。

godot_tuto13_hud_script_ss06.png


Hud.gd 内に _on_StartButton_pressed() というメソッドが用意された。このメソッドの中にスタートボタンが押されたときに必要な処理を書いていけばいい。

godot_tuto13_hud_script_ss07.png

スクリプト内容を記述。 :

Hud.gd にスクリプトを記述していく。

godot_tuto13_hud_script_ss08.png

記述内容は以下。

_Hud.gd
extends CanvasLayer

signal new_game

func _ready():
    pass # Replace with function body.

#func _process(delta):
#   pass

func _on_StartButton_pressed():
    $Message.hide()
    $StartButton.hide()
    emit_signal("new_game")

func update_score(score):
    $Score.text = "SCORE: " + str(score)

func show_message(text):
    $Message.text = text
    $Message.show()
    
func hide_message():
    $Message.hide()

func show_startbutton():
    $StartButton.show()

内容を簡単に説明すると…。
  • _on_StartButton_pressed() : スタートボタンが押されたときの処理。
  • update_score(score) : スコア表示更新処理。score には整数が入ってくる。
  • show_message(text) : ゲームタイトルや「GAME OVER」等のメッセージ(?)を表示する。text には文字列が入ってくる。
  • hide_messsage() : メッセージ表示を隠す。
  • show_startbutton() : スタートボタンを表示する。

  • $ノード名.show() で、そのノードを表示状態にできる。
  • $ノード名.hide() で、そのノードを非表示状態にできる。

  • signal new_game で、カスタムシグナルを作っている。
  • emit_signal("new_game") でカスタムシグナルを発行。

カスタムシグナルについては少し説明が必要かもしれない。各ノードはあらかじめ色々なシグナルを持っているけれど、スクリプトファイルの最初のあたりに「signal hoge」と書いておけば、hogeシグナルを新規に用意することができる。

この hogeシグナルに何かメソッドを接続しておいて、どこかで「emit_signal("hoge")」を呼んでhogeシグナルを発行してやれば、そのタイミングで接続されているメソッドが実行される。

今回は、スタートボタンが押されたタイミングで、メインシーンに対して「スタートボタンが押されたよ」と知らせてゲーム開始処理を行いたいので、new_game というカスタムシグナルを用意した。後々、この new_game シグナルに、Main.gd 内のメソッドを接続する予定。

スクリプトを書けたので、F6キーを押して実行してみる。

godot_tuto13_hud_script_ss09.gif

スタートボタンが押された時に _on_StartButton_pressed() が呼ばれるけれど、そこでは「MessageノードとStartButtonノードを非表示にせよ」と書いてあるので…。スタートボタンをクリックするとその2つのノードが画面内で非表示になった。ちゃんとスクリプトは動いてる。

次回は、このHudシーンをメインシーンに合体させる。

以上です。

過去ログ表示

Prev - 2020/10 - Next
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project