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

江上宿六です。

 

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

早速GameDirectorをFindし、そのスコアを基にUIを切り替えてやりましょう。

f:id:y6yegami:20180723103647p:plain

GameDirector君がいません。

 

そりゃそうです、GameOverシーンにはGameDirectorは作っていませんから。

でもゲームシーンで作ったGameDirectorは何処へ行ったのか、使えないのか。

それはシーンの移動と同時に破棄されました。 なので使う事が出来ません。

 

ではどうすれば良いのか。 方法はいくつかあるようでしたが、自分が選んだのは

DontDestroyOnLoadを使う方法です。

f:id:y6yegami:20180723104650p:plain

ゲームシーンのGameDirectorのStart内です。 こうする事でこのオブジェクトは

シーンの移動によって破棄されなくなります。 実行して確かめてみましょう。

f:id:y6yegami:20180723105227p:plain

DontDestroyOnLoadの中にGameDirectorを発見できました。 これでFindを使い

スコアを取得といきたい所ですが、凄い勢いでエラーが吐かれています。

これはGameDirectorのUpdate内で、既に破棄されたオブジェクトにアクセスを

しようとしているからですね。 それを無視して画面をクリックすると

f:id:y6yegami:20180723105605p:plain

GameDirectorが増殖しました。 どうみてもこれは駄目なやつですね。

ではどうすれば良いのかという事ですが、自分はこんな風にやってみました。

f:id:y6yegami:20180723110108p:plain

8行目、GameDirector用とスコア表示用のGameObjectを宣言しています。

次の行ではスコアを入れる変数を宣言しました。

 

Start内の12行目、GameDirectorを探して代入し、次の行でGameDirectorの

GetScoreを呼んでスコアを取得、gameScoreに代入しています。

f:id:y6yegami:20180723110653p:plain

出し忘れてましたけどGetScoreはこんな感じです、GameDirector内です。

14行目はスコア表示用のやつを探して代入しています。

 

スコアが取得出来、自らのgameScoreを使ってスコアを表示出来るように

なったので、16行目でgameDirectorを破棄しています。 非情ですが用済みです。

f:id:y6yegami:20180723111208p:plain

あとはUpdate内でUIを書き換えてやれば良いですね。 実行しましょう。

f:id:y6yegami:20180723111508p:plain

正しく表示されているハズです。 繰り返しゲームを遊んでも特におかしな点は

見つからない、見つからないという事にして、これでゲームは完成とします。

 

今回はここまでです。 次回は、番外編で反省会ですかね。