ゲームオーバーの実装
ゲーム開始時の時刻を取得する
ゲーム開始時、もしくはタイマー始動時に現在の時間を取得します。
タイマーの管理はGameManagerクラスに記述していくことにします。GameManagerクラスのStartメソッドを以下のように修正します。
// ゲーム開始時間を保持する private DateTime _startTime; // Use this for initialization void Start () { // キャラクターを取得する this._charactor = GameObject.Find("charactor"); // キャラクターのスクリプトを取得する this._charactorScript = this._charactor.GetComponent<CharactorManager>(); // ゲーム開始時刻を取得 this._startTime = DateTime.Now; }
DateTimeクラスのNowプロパティから現在時刻を取得できます。
経過時間の算出
続いて経過時間を取得します。経過時間はUpdateメソッド内で以下のように記述します。
void Update () { // 左右のキーで左右に移動 float horizontal = Input.GetAxis("Horizontal"); // キー入力がありジャンプ中でない場合は左右に移動 if (horizontal != 0.0f && this._charactorScript.isJumping == false) { this._moveCharactor(Vector2.right * _horizontalForce * horizontal); } // スペースキーでジャンプ // ジャンプ中はスペースキーが押されてもさらに上昇しない if (Input.GetKeyDown("space") && this._charactorScript.isJumping == false) { this._moveCharactor(Vector2.up * _upForce); } // 経過時間を取得 TimeSpan pastTime = DateTime.Now - this._startTime; // 経過時間をログとして出力する Debug.Log(pastTime.TotalSeconds); }
デバッグ実行するとConsoleウィンドウに以下のような出力を得ます。
経過時間表示をカウントダウンに変更する
経過時間を取得できたので、これをカウントダウンに変更します。以下のように制限時間を保持する変数を用意します
// ゲームの制限時間 private readonly int _limitTIme = 10;
Updateメソッドの経過時間取得処理の後を以下のように編集します。
// 経過時間を取得 TimeSpan pastTime = DateTime.Now - this._startTime; // カウントダウンを開始 var countDown = this._limitTIme - pastTime.Seconds; Debug.Log(countDown);
これで1秒ごとにカウントダウンしていく数値を取得することができました。
経過時間を画面に表示する
カウントダウンの数字を画面に表示します。
Unity 4.5まではGUI Textを用いていましたが、4.6からはGUI Textはレガシー(古い方法で利用を推奨しない)という扱いになりました。そのため今回は4.6から新しく追加されたuGUIを利用してカウントダウンの数字を表示することにします。
Textの追加
Hierarchyウィンドウの左上「Create」ボタンから「UI」→「Text」をクリックします。
HierarchyウィンドウにCanvasとその下にTextが追加されますので、下画像のようにTextの文字列をcountDownTextに変更します。
HierarchyウィンドウでcountDownTextInspectorを選択します。Inspectorウィンドウの「Text」の値を10に変更。Pos X、Pos Yの値が0以外の値が入っているなら0に変更します。
デバックすると、画像のように文字が表示されているのが確認できます。
文字が見えにくいのでInspectorウィンドウでプロパティを調整します。Font StyleをBold(太字)に、Font Sizeを25に、Colorをホワイトに変更します。
プログラムから文字の値を変更する
GameManager.csのUpdateメソッドの終わりに以下のコードを追加します。
// 文字を変更 Text countDownText = GameObject.Find("countDownText").GetComponent<Text>(); countDownText.text = countDown.ToString();
1行目で、GameObject.FindメソッドでGameObjectを取得した後に、GetComponentメソッドでTextを取得しています。2行目ではtextプロパティに文字列を代入することで値を書き替えています。
デバッグ実行して数字がカウントダウンされることを確認します。このままでは値が0になった後も数字がマイナスの値になってしまいます。