またまたお久しぶりです。
いつも以上に間隔が空いてしまって申し訳ないです。
間隔が開くことは、自分自身にとってもあまり良くなくて、何を行っていたのか復習する所からスタートするので、出来る限り毎日少しでも良いので作業を進めるべきだなぁってつくづく思います。
さて、今回は的当てゲームにおけるスコア画面からの画面遷移について考えたいと思います。
スコア画面からの画面遷移について
現状、ゲームのタイマーが0になるとスコア画面に遷移して、スコアを表示するようにしています。
ここまでは問題ないのですが、この後の処理を付け加えないと、スコア画面が表示されっぱなしになり何もすることが出来ません。
基本的には、リトライやスタート画面に戻るためのボタンを設置することが多いと思います。
スタート画面のレイアウトをどうするのかまだ未定なので、まずはリトライ用のボタンを用意して、再びゲーム画面に戻るようにします。
リトライ用のボタンを用意する
ボタンを配置するのは、スコア画面なので、シーンをリザルトに切り替えて作業を行います。
リザルトシーンで、ヒエラルキーウィンドウから右クリックして「UI」→「Button」を選択。
サイズや配置する場所を調整しましょう。
私の場合はこんな感じに。割と大きめにして真ん中下に配置しています。
後で違うボタンを作った際は、その時に位置を調整したいと思います。
ボタンのテキストを変更します。Textを選択して「リトライ」などに変更しておきます。
ボタンを押したらゲームシーンに遷移するスクリプトの作成
続いて、ボタンを押したときに画面が遷移するためのスクリプトを作ります。
スクリプト名は「Rertybutton」にします。
スクリプト自体は非常に簡単ですね。
UIとシーンマネジメントを宣言して、ボタンが押されたときのイベント処理を記述しています。
22行目の「SceneManager.LoadScene(“gamescene”);」でゲームシーンに画面が遷移します。
ボタンのイベントを設定する
まずは、作成したスクリプトを「Button」にアタッチしましょう。
次に、ボタンを選択した状態で、Button(Script)内のOn Click()の「+」ボタンをクリックして「None」にボタンをドラッグ&ドロップします。
そして「No Function」を開いて「Retrybutton.OnRetry」を選択します。
これで、イベントの設定は完了です。
ゲームを実行して動作確認
ボタンをクリックしたら、ゲームシーンに戻るか確認しましょう。
ボタンがしっかりと反応していればOKなんですけど、ここで1つ問題点が出てきます。
何度もプレイしていると気づくと思いますが、スコアが引き継がれてしまうんです。
ボタンを押して一見初期化されたと思いがちですが、ボールが的に当たると前回のスコアに10点プラスされた値が表示されてしまいます。
スコアを引き継ぐことって、ゲームとしてとても重要な事だと思うんですけど、現段階の仕様だと逆に引き継がない方が良いですね。リトライって言っているぐらいですからね。
このゲームの様にstatic変数を使いスコアの初期化が必要な場合は、リセット処理を挟む必要があります。
結局ゲームのジャンル次第なんですけどね。
スコアを引き継がないようにする
ターゲットジェネレーションのスクリプトを開きます。
void Start()内にて「score = 0;」を追加しました。
これで、最初に読み込んだ際にスコアは0から始まります。