SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

速習 Unity 2Dゲーム開発

速習 Unity 2Dゲーム開発
~第11回 タイマー処理

速習 Unity 2Dゲーム開発 第11回

  • X ポスト
  • このエントリーをはてなブックマークに追加

ゲームオーバーの実装

ゲーム開始時の時刻を取得する

 ゲーム開始時、もしくはタイマー始動時に現在の時間を取得します。

 タイマーの管理は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」をクリックします。

Textを追加
Textを追加

 HierarchyウィンドウにCanvasとその下にTextが追加されますので、下画像のようにTextの文字列をcountDownTextに変更します。

TextをcountDownTextに変更
TextをcountDownTextに変更

 HierarchyウィンドウでcountDownTextInspectorを選択します。Inspectorウィンドウの「Text」の値を10に変更。Pos X、Pos Yの値が0以外の値が入っているなら0に変更します。

Inspectorウィンドウで値を変更
Inspectorウィンドウで値を変更

 デバックすると、画像のように文字が表示されているのが確認できます。

画面に文字が表示された
画面に文字が表示された

 文字が見えにくいので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になった後も数字がマイナスの値になってしまいます。

カウントダウンがマイナスの値になる
カウントダウンがマイナスの値になる

次のページ
まとめ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
速習 Unity 2Dゲーム開発連載記事一覧

もっと読む

この記事の著者

西村 誠(ニシムラ マコト)

 Microsoft MVP Windows Platform Development。 Flash、PHPの開発経験もあり国産ECサイト構築フレームワーク「EC-CUBE」の公式エバンジェリストでもある。 ブログ:眠るシーラカンスと水底のプログラマー 著書:基礎から学ぶ Windowsストアアプリ開発

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8397 2015/02/17 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング