타이쿤 개발하면서 손님들의 개별 타이머와 전체 타이머를 구현했다.
개별 타이머는 바 형식, 전체 타이머는 숫자로 표현함
모두 코루틴을 이용하여 구현하였다.
처음에 00:00 포맷으로 어떻게 만들지 했는데 ToStrnig
으로 포맷 지정을 할 수 있었다.
minute.ToString("00")
형식으로 지정하면 알아서 포맷에 맞게 바꾸어줌
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class Timer : MonoBehaviour
{
[SerializeField] private TMP_Text text;
[SerializeField] private float time;
[SerializeField] private float curTime;
int minute;
int second;
private void Awake()
{
time = 70;
StartCoroutine(StartTimer());
}
IEnumerator StartTimer()
{
curTime = time;
while(curTime > 0)
{
curTime -= Time.deltaTime;
minute = (int)curTime / 60;
second = (int)curTime % 60;
text.text = minute.ToString("00") + ":" + second.ToString("00");
yield return null;
if(curTime <= 0)
{
Debug.Log("시간 종료");
curTime = 0;
yield break;
}
}
}
}
인스펙터에서 끌어다 줄 Image는 Image Type
을 Filled
로 바꾸어주고 Fill Method
를 이용해 어떤 방식으로 줄어들지 고를 수 있다. Fill Amount
를 조절하면서 확인하면 쉬움
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class CustomerTimer : MonoBehaviour
{
[SerializeField] private Image gauge;
private float time = 20;
private float timeSpeed;
private float curTime;
public bool isEnd;
private void Awake()
{
isEnd = false;
StartCoroutine(OrderTimer());
}
IEnumerator OrderTimer()
{
curTime = time;
while(curTime > 0)
{
curTime -= Time.deltaTime * timeSpeed;
gauge.fillAmount = curTime / time;
yield return null;
if(curTime <= 0)
{
isEnd = true;
curTime = 0;
yield break;
}
}
}
public void InitTimeSpeed(float speed)
{
timeSpeed = speed;
}
public void PlusTime(float plus)
{
curTime += plus;
if(curTime>time)
{
curTime = time;
}
}
}