본문 바로가기

프로그램/유니티 스크립트 소스

[유니티 스크립트 소스] 타이머 - 카운트 다운

728x90
반응형

1. 소스

카운트 다운 되는 타이머를 만든 소스입니다.

 

네임스페이스
using System;

 

멤버 변수로 m_TotalSeconds를 사용하며, 혹시 Component에 추가 후 수정을 하고 싶으면, 꼭 인스펙트 창에서 값을 수정하시기 바랍니다.

 

멤버 변수
public float m_TotalSeconds = 5 * 60; // 카운트 다운 전체 초(5분 X 60초), 인스펙트 창에서 수정해야 함.

 

메서드
private string CountdownTimer(bool IsUpdate = true)
{
    if(IsUpdate)
        m_TotalSeconds -= Time.deltaTime;

    TimeSpan timespan = TimeSpan.FromSeconds(m_TotalSeconds);
    string timer = string.Format("{0:00}:{1:00}:{2:00}.{3:000}",
        timespan.Hours, timespan.Minutes, timespan.Seconds, timespan.Milliseconds);

    return timer;
}

 

2. 데모

아래 데모 소스를 만든 후, 인스펙트 창에서 Text에 카운트가 찍힐 Text UI를 할당 한 후 사용하시기 바랍니다.

이 소스는 m_IsPlaying가 처음에 false로 잡혀 있기 때문에, Space 키를 눌려야 시작하며, 다시 Space 키를 누르면 타이머가 멈추게 되어 있습니다.

만약 카운트 다운이 0이 되었을 때 어떤 이벤트를 원하면, 아래 빨간 색으로 되어 있는 [이벤트]부분에 넣으면 됩니다.

 

스페이스키를 눌려야 시작합니다.

그리고 또 스페이키를 누려면 멈추기, 다시 누려면 시작합니다.

 

using UnityEngine; 
using UnityEngine.UI; 
using System; 

public class Countdown : MonoBehaviour 
{ 
    public string m_Timer = @"00:00:00.000"; 
    public KeyCode m_KcdPlay = KeyCode.Space; 
    private bool m_IsPlaying; 
    public float m_TotalSeconds = 5 * 60; // 카운트 다운 전체 초(5분 X 60초), 인스펙트 창에서 수정해야 함. 
    public Text m_Text; 

    private void Start() 
    { 
        m_Timer = CountdownTimer(false); // Text에 초기값을 넣어 주기 위해
    } 

    private void Update() 
    {        
        if (Input.GetKeyDown(m_KcdPlay)) 
            m_IsPlaying = !m_IsPlaying; 

        if (m_IsPlaying) 
        { 
            m_Timer = CountdownTimer(); 
        } 

        // m_TotalSeconds이 줄어들때, 완전히 0에 맞출수 없기 때문에  
        if (m_TotalSeconds <= 0) 
        { 
            SetZero(); 
            //... 여기에 카운트 다운이 종료 될때 [이벤트]를 넣으면 됩니다. 
        } 

        if (m_Text) 
            m_Text.text = m_Timer; 
    } 
        
    private string CountdownTimer(bool IsUpdate = true) 
    { 
        if(IsUpdate) 
            m_TotalSeconds -= Time.deltaTime; 

        TimeSpan timespan = TimeSpan.FromSeconds(m_TotalSeconds); 
        string timer = string.Format("{0:00}:{1:00}:{2:00}.{3:000}", 
            timespan.Hours, timespan.Minutes, timespan.Seconds, timespan.Milliseconds); 

        return timer; 
    } 

    private void SetZero() 
    { 
        m_Timer = @"00:00:00.000"; 
        m_TotalSeconds = 0; 
        m_IsPlaying = false; 
    } 
}

 

3. 결과

코더제로 유니티 스크립트 소스 타이머 - 카운트 다운
그림. 타이머 - 카운트 다운

 

728x90
반응형