二代目備忘録

適当に勉強した事を忘れないように講座風に書き留めたりするブログ。

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

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

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

 

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