ゴールライン・障害物に触れたら、画面遷移
初めに、「IrairaController」スクリプトの緑で囲った部分を追加で入力。
【Invoke(“”, f);について】
これは、1.6秒後に、「Failureメソッド(又は、Successメソッド)」を呼び出す機能になっています。
↓
実行ボタンを押し、ゴールライン・障害物に触れてから、1.6秒後に各シーンに画面遷移できているか確認して下さい。
画面遷移しても、経過時間が保存できている状態に設定
「GameOverScene」と「GameClearScene」の「ヒエラルキーウィンドウ」に作成したテキスト「Timer」に、「GameScene」で測定した経過時間を表示させます。
作成する前に、
「何故画面遷移したら「GameScene」で測定した経過時間が表示されないのか?」について説明します。
結論から言いますと、今作業しているシーンで作成されたオブジェクトは、別のシーンに画面遷移する際、オブジェクトは破棄される為です。
(例えば、GameSceneで作成したイライラ棒は、GameOverSceneに画面遷移した際、イライラ棒は存在していない)
では、今回のように画面遷移した後もそのオブジェクトを残したい場合はどうすれば良いのか?
↓
これを解決する方法として、今回は、「Json形式」と「PlayerPrefs」でデータを保存する方法を使用します。
Json形式とPlayerPrefsとは何ぞや?
簡単にまとめると、
PlayerPrefsは、セーブ・ロードなどを行う機能。
Json形式は、異なるプログラミング言語どうしをデータをやり取りする為の方法。
これを使う事で、経過時間のオブジェクト(ヒエラルキーウィンドウに有るTimer)を、JsonUtility(Unity標準のJSONデータを扱うクラス)を使用して、変換する。
↓
変換したのを、PlayerPrefsで保存。
保存する際、()の中身は以下のようなモノが入る為、それに合った名前(キー)・数値(バリュー)を入れる。
第一引数に保存する名前(今回は、USER_DATA_KEYが第一引数)を入れる。
第二引数に保存する数値(今回は、data.GetJsonDataが第二引数)を入れる。
↓
以上の流れで保存することが可能です。
Json形式に変換して保存
新たにスクリプトを作成し、名前を「SaveData」にします。
↓
処理内容は下記のように入力します。
これにより、経過時間の値をJson形式に変換できます。
補足(緑で囲った部分について):
(いつもなら「: MonoBehaviour」付けて継承させていますが、このクラスでは継承させず独立して欲しい為、除去しています。)
次に、GameDirectorクラスに緑で囲った内容を追加します。
これにより、Json形式に変換した値を保存する仕組みは一旦完成です。
補足:
「const string USER_DATA_KEY = “UserData”;」で「const」を使用している理由は、定数に設定する事により、値が固定させる為です。
変数に設定してしまうと、値が変わってバグの元になる可能性があるので注意です!
一旦ここで、どのような流れで保存されているか整理します。
ゴールライン又は、障害物に当たる。
↓
当たった際、経過時間を止める(isPlayをfalseにする事によって止めます)。
↓
経過時間をSaveDataクラスを呼び出して、Json形式に変換。
↓
Json形式に変換した値をGameDirectorクラスに返す。
↓
返された値をSaveメソッドで保存。
では、実際にセーブ出来ているか障害物とゴールラインに触れて確認してみましょう。
触れた際、UnityのConsoleに表示されたらセーブ出来ています。
確認が取れたら、Saveメソッドの「Debug.Log($”ステージ情報保存: {data.GetJsonData()}”);」は、消しても構いません。
保存したデータを読み込んで、別画面に表示
保存したデータを読み込むスクリプトを新たに作成します。
スクリプトの名前を「TimeDirector」とします。
処理内容は下記のを入力します。
次に、GameClearSceneを開いて、ヒエラルキーウィンドウを右クリックしてCreate Emptyをクリック。
↓
名前を「TimeDirector」に変更。
↓
ヒエラルキーウィンドウにあるTimeDirectorに、「TimeDirector」スクリプトをドラッグ&ドロップ。
↓
ヒエラルキーウィンドウにあるTimeDirectorを選択して、Inspectorにある緑で囲った部分の「TimerText」にヒエラルキーウィンドウにある「Timer」をドラッグ&ドロップ。
↓
実行ボタンを押して確認して下さい。
問題がなければ、GameOverSceneでも同様な手順で行いましょう。
最後に、ヒエラルキーウィンドウにある「Timer」のInspectorにあるText(New Text)を削除します。
これを、GameOverScene・GameClearScene両方で行って下さい。
ここまで問題なければ、上書き保存をして下さい。
以上で、「画面遷移の調整をしよう!」の作業は完了です。
お疲れ様でした。
興味のある方は、おまけの「[おまけ①]他のシーンを作ろう!」をやってみましょう!。