[Unity] 타이머 구현

조히·2023년 7월 21일
0

Unity

목록 보기
5/5

두가지 형태의 타이머 구현

타이쿤 개발하면서 손님들의 개별 타이머와 전체 타이머를 구현했다.
개별 타이머는 바 형식, 전체 타이머는 숫자로 표현함
모두 코루틴을 이용하여 구현하였다.

숫자 형식의 타이머 (ToString Format)

처음에 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는 Image TypeFilled로 바꾸어주고 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;
        }
    }
}
profile
Juhee Kim | Game Client Developer

0개의 댓글