俺に解るように説明する "Godot Engine 3.x" 入門+

ゲームエンジン Godot Engine に関すること。入門とか使い方とかチュートリアルとか、あれとかこれとか。日本語解説。

Godot Engine GDScript 10 「練習、練習」... また練習

さて、change_scene() を組み込もうと思ったのだが、これだと、シーンツリーの中身を全とっかえになってしまうので、なんか都合が悪いような気がする。オプションメニューとかハイスコアとかプレイヤーの状態とかで、特に保存するものは無いのだが、もうちょっと複雑にシーンが絡んでくるゲームでも対応できるように仕組みを作りたい。

change_scene() でやると以下の図のような感じ。

f:id:ore2wakaru:20170825170358p:plain

こうじゃなくて、ゲームスタート時にメインシーンとして、いわゆる何とかマネージャーのような「神シーン」を読み込んでおき、いろいろなシーンからの情報を蓄えられるようにして、必要なシーンはこの「神シーン」に付けたり外したりしながら管理できないものかと考え中。

図で示すと以下のような感じ。

f:id:ore2wakaru:20170825170907p:plain

「シーンA」にはホッケーテーブルの画像、「シーンB」にはパック、「シーンC」にはプレイヤー用マレット、「シーンD」にはコンピューター用マレット、「シーンE」には得点画面、「シーンF」にはスタート画面、「シーンG」にはポーズメニュー、「シーンH」にはゲームオーバー画面、・・・などなど。ゲーム中の画面でも複数のシーンが重なって出来ているイメージ。

シーンをインスタンス化して、特定のノードの子として追加してやれば出来そうな感じなのだが、ちょっと苦戦中。

onready var XXXXX = preload("YYYYY")
~
instance()
add_child()
~
queue_free()

この辺がカギになりそうだ。


練習、練習でシーンを3つ

練習用に新規プロジェクトで、シーンを3つ作る。「シーンGOD」、「シーンA」、「シーンB」の3つ。「シーンGOD」はノードを3つ。また、「シーンA」には ボタンとGodot の icon.png を1つ、「シーンB」には icon.png を2つ置く。

f:id:ore2wakaru:20170902095753p:plain

f:id:ore2wakaru:20170825181921p:plain

f:id:ore2wakaru:20170825182141p:plain

流れ的には、

  1. ゲーム開始と同時に読み込む「シーンGOD」(メインシーンであり、模擬シーンマネージャー)。
  2. 「シーンGOD」がスクリプトにて「シーンA」(模擬タイトル画面)を読み込む。
  3. そして、「シーンA」のボタンが押されると、スクリプトにて「シーンA」をリムーブし「シーンB」(模擬ゲーム画面)を読み込む。

という流れを想定。


メインシーンの設定

Godot は、ゲーム開始と同時にメインシーンと呼ばれるシーンを自動的にシーンツリーに追加するようになっている。ここに「シーンGOD」を読み込ませたいので、「シーンGOD」をメインシーンにするための設定をする。

メインシーンがまだ決定されていない場合は、[シーン再生] ボタンではなく、[ゲーム再生] ボタンを押すとメインシーンをどれにするか選択できるようになる。ここで、普通に「シーンGOD」(sn_God.tscn)を選択。これだけでOK。(ゲームが再生されるが、[停止] で。)

f:id:ore2wakaru:20170825184503p:plain

f:id:ore2wakaru:20170825184655p:plain

だが、もし、間違って違うシーンをメインシーンに設定してしまったら、メニュー > [Project] > [Project Settings] から修正できる。

f:id:ore2wakaru:20170825190350p:plain

Generalタブ > [Application] > [Run] > [Main Scene] でパスを入れるか、横の [フォルダアイコン] からファイルを選んでやればいい。


スクリプトの作成

メインシーンにした「シーンGOD」のルートノードにスクリプトを貼るのだが、それはまた今度。現在苦戦中。