昔から人気の駄菓子「ビッグカツ」のフリー素材画像が公開されたので、無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 を使って、ビッグカツ画像を使ったブロック崩しを作成します。
「ビッグカツブロック崩し」作成の第19回では、ブロック崩しのボールが画面の下側に消えてしまったらゲームオーバーと判定するために、VisibleOnScreenNotifier2D ノードを使って、ボールのノードが画面外に出た際のシグナルを受け取る実装を紹介します。
![](https://compota-soft.work/wp1/wp-content/uploads/2024/09/GodotEngine4.3-公式サイトの一部-20240911.png)
※ GodotEngine 4.3 を使用しています。.NET 版ではありません。
※スクリプトは自己責任でご使用ください。
前回の記事
前回は、実際にプレイしている時間のみ計測するようにプレイ中かどうかの判定しました。
その際に、 get_node を使って、上位のノードを取得する手順も紹介しました。
シグナルによるゲームオーバー判定
ボールが下側に落ちてしまったらゲームオーバーと判定します。
その判定方法はひとつではありません。
シンプルな方法として、ボールの y 座標の値が一定よりも下側(+方向)になった場合を判定する方法があります。
しかし、ステージの位置やサイズが変わった場合に、いちいちその特定の値を変更する必要があり、見落としなどによるバグも発生しやすくなります。
シグナルならば、画面外に出たかを判定するため、ステージの位置やサイズが変わっても、 Y の値を再調整する必要がありません。
画面外に出たことを通知してくれる VisibleOnScreenNotifier2D ノードを、調べる対象のノード(例ではボールのノード)の下位につけることで、画面外にボールが出た際に screen_exited() シグナルが発せられます。
そのシグナルと関数を接続することで、ボールが画面外に出た際に呼び出される関数を定義できます。
VisibleOnScreenNotifier2D represents a rectangular region of 2D space. When any part of this region becomes visible on screen or in a viewport, it will emit a screen_entered signal, and likewise it will emit a screen_exited signal when no part of it remains visible.
If you want a node to be enabled automatically when this region is visible on screen, use VisibleOnScreenEnabler2D.
Note: VisibleOnScreenNotifier2D uses the render culling code to determine whether it’s visible on screen, so it won’t function unless CanvasItem.visible is set to
true
.VisibleOnScreenNotifier2D は、2D 空間の長方形の領域を表します。この領域の一部が画面上またはビューポートに表示されると、screen_entered 信号が発行され、同様に、表示されている部分が残っていない場合は screen_exited 信号が発行されます。 この領域が画面上に表示されているときにノードを自動的に有効にしたい場合は、VisibleOnScreenEnabler2D を使用します。 注: VisibleOnScreenNotifier2D は、レンダリング カリング コードを使用して画面上に表示されるかどうかを決定するため、CanvasItem.visible が true に設定されていない限り機能しません。VisibleOnScreenNotifier2D — Godot Engine (stable) documentation in English と Google 翻訳
画面外に出た際にシグナルと受信側の関数の接続
ノード(例ではボールのノード)が画面外に出た場合に、シグナルを発して関数を呼び出してくれる VisibleOnScreenNotifier2D ノードを、対象のノード(例ではボールのノード)の下位に追加します。
Ball シーンのタブを選択して、シーンドックで Ball ルートノードを右クリックして表示されるメニュー「子ノードを追加」を選択します。
![Godot4 ビッグカツブロック崩し 画面外に出たことをシグナルで通知するノードをボールの下位に追加1](https://compota-soft.work/wp1/wp-content/uploads/2024/12/Godot4-ビッグカツブロック崩し-画面外に出たことをシグナルで通知するノードをボールの下位に追加1.png)
検索ボックスで VisibleOnScreeNotifier2D と検索して、同名のクラスを選択してから「作成」ボタンを押します。
※派生クラスの VisibleOnScreenEnabler2D (画面外に出るとそのノードを無効にするクラス)と似ているので注意しましょう。
![Godot4 ビッグカツブロック崩し 画面外に出たことをシグナルで通知するノードをボールの下位に追加2](https://compota-soft.work/wp1/wp-content/uploads/2024/12/Godot4-ビッグカツブロック崩し-画面外に出たことをシグナルで通知するノードをボールの下位に追加2-1.png)
作成した Ball ルートノードの下位の VisibleOnScreeNotifier2D ノードを選択した状態で、ノードドックの VisibleOnScreenNotifier2D クラスのシグナル screen_exited() をダブルクリックします。
※ノードドックは、インスペクタードックに隠れているかもしれません。
![Godot4 ビッグカツブロック崩し 画面外に出たことをシグナルで通知するノードをボールの下位に追加3](https://compota-soft.work/wp1/wp-content/uploads/2024/12/Godot4-ビッグカツブロック崩し-画面外に出たことをシグナルで通知するノードをボールの下位に追加3-1.png)
ダブルクリックしたシグナルが発せられた際に、呼び出される関数(受信側メソッド)を追加します。
Ball ルートノードに割り当てた ball.gd スクリプトにその関数を追加するので、 Ball ルートノードを選択して「接続」ボタンを押します。
※追加する関数名は、「メソッドにシグナルを接続」ダイアログの下側にある「受信側メソッド」のテキストボックスで指定できます。
![Godot4 ビッグカツブロック崩し 画面外に出たことをシグナルで通知するノードをボールの下位に追加4](https://compota-soft.work/wp1/wp-content/uploads/2024/12/Godot4-ビッグカツブロック崩し-画面外に出たことをシグナルで通知するノードをボールの下位に追加4-1.png)
Script ワークスペースに切り替わり、受信側メソッドの関数が追加された ball.gd スクリプトが表示されます。
ノードドックでは、先ほどダブルクリックした screen_exited() シグナルの下位に、関数の名前が追加されていて、シグナルと関数(受信側メソッド)が接続したことが確認できます。
![Godot4 ビッグカツブロック崩し 画面外に出たことをシグナルで通知するノードをボールの下位に追加5](https://compota-soft.work/wp1/wp-content/uploads/2024/12/Godot4-ビッグカツブロック崩し-画面外に出たことをシグナルで通知するノードをボールの下位に追加5-1-1024x534.png)
画面外に出た際に発せられるシグナル screen_exited() で、この関数が呼び出されることを確認するために、以下のように print 文を追加しました。
## $VisibleOnScreenNotifer2D ノードの screen_exited シグナルの受信メソッドです。
## ボールが画面外に出た際に呼び出されます。
func _on_visible_on_screen_notifier_2d_screen_exited():
print("Game Over")
return
テスト
F6 キーで開いているステージのシーンを実行します。
ボールが画面下に飛び出した瞬間に、シグナルが発せられ、そのシグナルに接続している受信側メソッドの関数が呼び出され、その関数内の print 文のメッセージ Game Over が出力されました。
![Godot4 ビッグカツブロック崩し 画面外に出たことをシグナルで通知するノードをボールの下位に追加6](https://compota-soft.work/wp1/wp-content/uploads/2024/12/Godot4-ビッグカツブロック崩し-画面外に出たことをシグナルで通知するノードをボールの下位に追加6-1-1024x935.png)
まとめ
「ビッグカツブロック崩し」作成の第19回では、ブロック崩しのボールが画面の下側に消えてしまったらゲームオーバーと判定するために、VisibleOnScreenNotifier2D ノードを使って、ボールのノードが画面外に出た際のシグナルを受け取る実装を紹介しました。
参照サイト Thank You!
- Godot Engine – Free and open source 2D and 3D game engine
- Xユーザーのビッグカツといか姿フライのすぐる【公式】さん: 「使いどころは思いつきませんが、フリー素材としてどうぞご自由にお使いくださいませ! https://t.co/8F9q3hS02b」 / X
- しょかきうたげ【フリーフォント版あり】 – ぼんのう堂 – BOOTH
- VisibleOnScreenNotifier2D — Godot Engine (stable) documentation in English
記事一覧 → Compota-Soft-Press
コメント