気ままなUnityエンジニアブログ

新米Unityエンジニアが送る解説アウトプットブログです。Twitter : @UjinUnity

MENU

【Unity ゲーム制作】神経衰弱ゲームを作ろう!〜その9 ( タイマーを作成しよう!)

スポンサーリンク

前回はカード配置のアニメーションを作成しました。

ゲームとしての見栄えも良くなったので、次はゲーム内部のレベルアップを行なっていきましょう!

まずは、神経衰弱をやる上で重要な「タイマー」機能を実装します!

1 . CanvasにTimerAreaを作成する

まずはHierarchy のCanvasにTimer用のAreaを作成しましょう。

f:id:Wojtek:20191012202333p:plain



2 . TimerAreaにTextを作成する


次は先ほど作ったTimerAreaにTextオブジェクトを作成しましょう。
「UI → Text」で作成します


f:id:Wojtek:20191012202743p:plain


コンポーネントはこのような状態です


f:id:Wojtek:20191012203013p:plain


次はタイマー用のスクリプトを作成します。

3. 「TimerManager」を作成しよう!


TimerManager.csを作成し、以下のコードを記述してください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TimerManager : MonoBehaviour {

    // 時間表示
    public Text TimerText;

    /// <summary>
    /// タイマーのテキストの設定
    /// </summary>
    public void SetText (int time) {

        this.TimerText.text = "Time : " + time;
    }
}


こちらは先ほど実装したTextをアタッチして使用します。


では、実際にゲーム中にタイマーが起動するようにGameSceneManager にタイマー機能を追加しましょう!。

4 . 「GameSceneManager.cs」にタイマー機能を実装する

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameSceneManager : MonoBehaviour {

    // 一致したカードIDリスト
    private List<int> mContainCardIdList = new List<int> ();

    // カード生成マネージャクラス
    public CardCreateManager CardCreate;

    // 時間管理クラス
    public TimerManager timerManager;

    // 経過時間
    private float mElapsedTime;

    void Start () {

        // 一致したカードIDリストを初期化
        this.mContainCardIdList.Clear ();

        // カードリストを生成する
        this.CardCreate.CreateCard ();

        // 時間を初期化
        this.mElapsedTime = 0f;
    }

    void Update () {

        this.mElapsedTime += Time.deltaTime;

        this.timerManager.SetText ((int) this.mElapsedTime);

        // 選択したカードが2枚以上になったら
        if (GameStateController.Instance.SelectedCardIdList.Count >= 2) {

            // 最初に選択したCardIDを取得する
            int selectedId = GameStateController.Instance.SelectedCardIdList[0];

            // 2枚目にあったカードと一緒だったら
            if (selectedId == GameStateController.Instance.SelectedCardIdList[1]) {

                Debug.Log ($"Contains! {selectedId}");
                // 一致したカードIDを保存する
                this.mContainCardIdList.Add (selectedId);
            }

            // カードの表示切り替えを行う
            this.CardCreate.HideCardList (this.mContainCardIdList);

            // 選択したカードリストを初期化する
            GameStateController.Instance.SelectedCardIdList.Clear ();
        }
    }
}

まずはGameSceneManager のプロパティ に TimerManagerを追加します。
その後 Update() でTime.deltatime を使用して時間を加算していきます。
int 側にキャストしているのは、「1分」ごとの表記を表しているためです。

ここまで出来たら、実際にGameを起動してみましょう。


f:id:Wojtek:20191012203613g:plain


タイマーを作成することが出来ました!