[unity] 時間経過・Coroutine・Invokeなど

時間経過処理

	[SerializeField] private int minute;
	[SerializeField] private float seconds;
	private float oldSeconds;
	private Text timerText;
 
	void Start () {
		minute = 0;
		seconds = 0f;
		oldSeconds = 0f;
		timerText = GetComponentInChildren<Text> ();
	}
 
	void Update () {
		seconds += Time.deltaTime;
		if(seconds >= 60f) {
			minute++;
			seconds = seconds - 60;
		}
		// 値が変わった時だけテキストUIを更新
		if((int)seconds != (int)oldSeconds) {
			timerText.text = minute.ToString("00") + ":" + ((int) seconds).ToString ("00");
		}
		oldSeconds = seconds;
	}

参考記事:https://gametukurikata.com/program/time

Coroutine・Invoke

Coroutine
private float time = 3.5f;

void Start(){
    StartCoroutine("TimeStart");
}
IEnumerator TimeStart()
{
    //timeの時間処理が停止し、経過後処理が進む
    yield return new WaitForSeconds(time);
    //処理をかく
}

//連続して処理したい時
IEnumerator TimeStarted()
{
    for(int h = 0; h < 3; h++){
        yield return new WaitForSeconds(time);
        //処理をかく
    }
}

//処理を停止させたいときは
StopCoroutine("TimeStart");
Invoke
void Start()
{
    //3.5秒後にTimeStartの処理が始まる
    Invoke("TimeStart", 3.5f);
}
private void TimeStart()
{
    //処理をかく
}

コメント

タイトルとURLをコピーしました