Godot4 ビッグカツブロック崩し12 クリックでシーンを切り替える実装例

※この連載の全ての記事は、タグ「ビッグカツ」の検索一覧から探すことができます。
※この連載で作ったゲームは「BigBreakOut(ゲームの作り方の記事付き) | フリーゲーム投稿サイト GodotPlayer」でプレイできます。

昔から人気の駄菓子「ビッグカツ」フリー素材画像が公開されたので、無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 を使って、ビッグカツ画像を使ったブロック崩しを作成します。

「ビッグカツブロック崩し」作成の第12回では、シンプルなタイトル画面のシーンを作成して、そのタイトル画面でクリックされたら、設定してある別のシーン(例ではブロック崩しのステージ)に切り替えるスクリプト例とテスト結果を紹介します。

※ GodotEngine 4.3 を使用しています。.NET 版ではありません。
※スクリプトは自己責任でご使用ください。

前回の記事

前回は、テキストを表示する Label クラスのノードをゲーム画面の右上に配置して、時間経過を計測して画面の表示を更新するスクリプトを割り当ててテストしました。

簡素なタイトルシーンの作成

簡素なタイトルシーンを作成します。

Godot4 ビッグカツブロック崩し シンプルなタイトルシーンの構成

メニュー「シーン」→「新規シーン」を選択した後、シーンドックで「ユーザインターフェース」を選択して Control クラスのルートノードを作成します。

Godot4 ビッグカツブロック崩し クリックすると次のシーンに切り替わるタイトルシーンの作成1
Godot4 ビッグカツブロック崩し クリックすると次のシーンに切り替わるタイトルシーンの作成2

Control クラスは、四角形の範囲を持つユーザインターフェイス (UI) 関連ノードの基本クラスです。

Base class for all UI-related nodes. Control features a bounding rectangle that defines its extents, an anchor position relative to its parent control or the current viewport, and offsets relative to the anchor. The offsets update automatically when the node, any of its parents, or the screen size change.

すべての UI 関連ノードの基本クラス。コントロールには、その範囲、親コントロールまたは現在のビューポートを基準としたアンカーの位置、およびアンカーを基準としたオフセットを定義する境界四角形が含まれます。ノード、その親、または画面サイズが変更されると、オフセットは自動的に更新されます。
Control — Godot Engine (4.x)の日本語のドキュメント と Google 翻訳

作成した Control ルートノードは、TitleScene に名前を変更して、上部の 2D ワークスペースを選択して、そのノードの範囲をゲーム画面全体を覆うように、オレンジ色の丸いハンドルをマウスドラッグして位置とサイズを調整します。
※名前の変更は、ノードを右クリックして表示されるメニュー「名前を変更」などで行います。

Godot4 ビッグカツブロック崩し クリックすると次のシーンに切り替わるタイトルシーンの作成3

子ノードに Label ノードを追加して、ゲーム画面中央に配置して、「 Click to Start 」と操作方法を説明するメッセージを表示するようにしましたが、これは、特に今回の実装で必要ではありません。

Godot4 ビッグカツブロック崩し クリックすると次のシーンに切り替わるタイトルシーンの作成4

スクリプトの設定

クリックしたら設定したシーンに切り替えるスクリプトをルートノードに割り当てます。

シーンドックで TitleScene ルートノードを選択して、右上の+のついたアイコンの「選択したノードに新規または既存のスクリプトをアタッチする。」ボタンを押します。

Godot4 ビッグカツブロック崩し タイトルシーンにスクリプトを割り当てます.

表示されたダイアログで、ファイルパスなどを確認して TitleScene ルートノードに割り当てる GD スクリプトを作成します。
※例では title_scene.gd を作成しました。

Godot4 ビッグカツブロック崩し クリックすると次のシーンに切り替わるタイトルシーンの作成6

Script ワークスペースに切り替わり、作成されたスクリプトのスケルトンコード(最初から用意されているテンプレート)が表示されるので、以下のスクリプト上書きします。
※処理の詳細は、スクリプト内のコメントを参照してください。

extends Control

## 左クリックまたはタップされた際に切り替えるシーンの tscn ファイルを設定してください。
@export var next_scene: PackedScene = null

# Called when the node enters the scene tree for the first time.
func _ready():
	# 設定を確認します。
	if next_scene == null:
		printerr("TitleScene ノードの next_scene プロパティに切り替え先のシーン (tscn) を設定してください。")
	return


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

func _input(event):
	# 左クリックまたはタップされた場合
	if (event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT) or (event is InputEventScreenTouch):
		# シーンを設定されたものに切り替えます。
		change_next_scene()

## [member next_scene] に設定されたシーン (tscn) に切り替えます。		
func change_next_scene():
	get_tree().change_scene_to_packed(next_scene)
	return

タイトルのシーンを作成したら Ctrl + S キーなどでシーンを保存します。
※例では title_scene.tscn に保存しました。

Godot4 ビッグカツブロック崩し クリックすると次のシーンに切り替わるタイトルシーンの作成8

切り替え先のシーンの設定

前述のスクリプトの4行目で定義した PackedScene 型の next_scene プロパティは、@export アノテーションによってエディタのインスペクタードックで編集できます。
これにより、切り替える先のシーンをインスペクタードックで設定します。

シーンドックで TitleScene ルートノード選択すると、インスペクタードックに先ほどのスクリプトで定義した next_scene プロパティが Next Scene という名前のシーンを設定する項目が追加されています。
Next Scene 項目に、ファイルシステムドックの stage.tscn (ステージのシーンのファイル)をドラッグ&ドロップして、タイトルシーンからの切り替え先のシーンを設定します。

Godot4 ビッグカツブロック崩し タイトルシーンから切り替える先のシーンを作成したプロパティに設定します

テスト

F6 キーで開いているタイトルのシーン実行後、画面をクリックすると、 Next Scene プロパティで設定したステージのシーン切り替わりました。

Godot4 ビッグカツブロック崩し タイトルシーンでクリックすると設定したシーンに切り替わります。
Godot4 ビッグカツブロック崩し タイトルシーンから設定したシーンに切り替わりました

まとめ

「ビッグカツブロック崩し」作成の第12回では、シンプルなタイトル画面のシーンを作成して、そのタイトル画面でクリックされたら、設定してある別のシーン(例ではブロック崩しのステージ)に切り替えるスクリプト例とテスト結果を紹介しました。

参照サイト Thank You!

記事一覧 → Compota-Soft-Press

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました