blog

プログラミングとひとりごと。

あるタイミングで繰り返し使えるカウントダウンを設定する(Unity)

Unityで

左からキャラ(Prefab)が出てきて

ある地点で止まって、そこでプレイヤーが操作をする。

プレイヤーが操作できる時間は1キャラにつき10秒以内にしたい。

 

そして1キャラに対する操作が終わったら

また次のキャラに対する操作を10秒以内にさせたい。

 

なので、1キャラが操作対象になる都度、10秒カウントダウンしたい。

 

freesworder.net

 

上記の方法だと

画面表示した瞬間にカウントダウンが始まってしまう。

 

teratail.com

 

なので上記のサイトの回答を参考にして

 

・カウントダウンのスクリプトAに

フラグを作り、falseに設定しておいて、

画面表示の時には

カウントダウンのUpdate()の処理が実行されないようにしておく。

 

・カウントダウンのスクリプトAに

フラグをtrueにするメソッドαを登録しておいて、

 

・メインのスクリプトBから

必要なタイミングで

カウントダウン内のメソッドαを呼び出す。

 

・カウントダウンのUpdate()が実行されて

カウントが0になったら自分のフラグをfalseにして

Update()がそれ以上行われないようにする。

 

・かつ、メインのスクリプトBのメソッドβを呼び出して

タイムアウトした時にさせたい処理を実行する。

 

という風にしました。

 

 メインのスクリプトは他の処理も入っているので

とりあえずカウントダウンのスクリプトだけ貼っておきます。

 


using UnityEngine;
using UnityEngine.UI;

public class CountDownTimer : MonoBehaviour
{

    //カウントダウンタイマー関連
    public Image ImageC;
    public Text TextCountDown;
    float totalTime = 10f;
    int seconds;

    private bool m_isVisibleTimer = false;

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

        if (m_isVisibleTimer)
        {
            totalTime -= 1 * Time.deltaTime;
            seconds = (int)totalTime;

            if (seconds >= 0)
            {
                TextCountDown.text = seconds.ToString();

                if (seconds == 0)
                {
                    m_isVisibleTimer = false;

                    //0秒になったらCashirボタンを押したのと同じ判定処理をする
                    GameObject manager = GameObject.Find("GameManager");
                    manager.GetComponent<GameManager>().FromCountDown();
                   
                }
            }

        }
    }

    public void TimerStart(){
        m_isVisibleTimer = true;
        totalTime = 10f;
    }
}