Unity備忘録20頁目「シーンの切り替え1」

江上宿六です。

 

ゲーム的な処理は終わったと言えど、調整する点はあったりします。

スコアの入り方を変えたり、Cubeの移動が斜めだと速いので正規化して正しい

移動速度にしたり、Sphereの乗ってる数によって更に床の落下速度を上げたり、

Sphereの発生間隔に波を持たせて後半ほど厳しくするとか、Cubeの落下処理を

まだ作っていないなど、様々です。

 

しかしそこはそれほど重要な点ではないというか、ゲームの処理的な所は

Unityの備忘録にはそれほど必要ではないわけです。 適当に調整しましょう。

関数の呼び出し方だとかはしっかり覚えておきたい所ですけども。

 

という事で今回はゲームオーバー処理としてシーンの移動を行います。

シーンの移動を行うには、もちろん移動先のシーンが必要になるので追加します。

プロジェクトビューのCreateからSceneを選択すると追加されるので

GameOverとでも名付けたら、ダブルクリックなどでシーンを開きます。

見慣れた空っぽな画面が表示されるので、UIを設置していきましょう。

f:id:y6yegami:20180723094921p:plain

これ以上無い適当なゲームオーバー画面です。 とりあえずこの状態で保存し、

シーンの移動が出来るか試しましょう。 まずはシーンをゲームに登録します。

メニューバーのFileからBuildSettingsを選択します。

f:id:y6yegami:20180723095544p:plain

ここはアプリケーションの出力の設定を行うことが出来る所で、ここにシーンを

登録することで組み込まれて使えるようになります。 AddOpenScenesで

現在開いているシーンを登録するか、アセットからドラッグ&ドロップで

登録する事が出来ます。 注意としてリストの1番上にあるシーンが最初に

呼び出されるシーンになるので、ゲーム部分を1番上にしておきましょう。

 

登録が出来たら次はシーンを移動する処理を書き込みます。 GameDirectorの

スクリプトを編集します。

f:id:y6yegami:20180723100317p:plain

UnityEngine.SceneManagementを定義する事で移動処理が行う事ができます。

f:id:y6yegami:20180723100449p:plain

SceneManager.LoadSceneにシーン名を渡してやる事でシーンが切り替わります。

今回はpublicの関数を作り、それを呼び出して移動するようにしています。

直で書いても良いとは思いますけど。

 

次にこれを呼び出す側、Planeのスクリプトを編集します。

f:id:y6yegami:20180723100825p:plain

y座標が0を下回ったらGameDirectorのMoveSceneを呼び、GameOverに行く

という風にしています。 この呼び出しをするオブジェクトがPlaneで良いのか、

GameDirectorがPlaneのy座標を取得して移動させるのが良いのか考えましたが

答えが出なかったのでこうしておきました。

 

実行してみると、多分無事にシーンが切り替わってくれたと思います。

次は逆にGameOver画面でクリックをするとゲームに戻れるようにしましょう。

空のオブジェクトとGameOverDirectorスクリプトを作り、記述します。

f:id:y6yegami:20180723101643p:plain

クリックするとシーン移動します。 結局こっちでは普通に呼び出してますね。

UnityEngine.SceneManagementは忘れないように。

 

実行してゲームオーバー画面でクリックするとゲームに戻ったと思います。

これでシーンの移動は出来ました。 あとは最終スコアを表示してやるだけです。

だけなんです。

 

という不穏な所で今回は終わりです。 次回に続きます。