유니티에서 타이머 Timer 만들기

유니티에서 타이머 만들기

timer

 

 


이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-변경금지 2.0 대한민국 라이선스에 따라 이용할 수 있습니다.

Timer 클래스

일정 시간마다 특정 처리를 실행하는 코드는 자주 사용됩니다. 이럴 때 Timer라는 클래스를 만들어 사용하면 편리하게 사용할 수 있습니다.

그 전에 먼저 자주 사용되는 타이머 코드를 살펴보겠습니다. elapsedTime 변수는 시간을 측정하기 위한 float 타입의 멤버 변수입니다.

// 타이머 업데이트.
_elapsedTime += Time.deltaTime;

// 타임아웃 체크.
if (_elapsedTime >= 60f)
{
    // 일정 시간마다 처리.

    // ... 생략.

    // 타이머 초기화.
    _elapsedTime = 0f;
}

 

위에서 처리한 기능을 추가해서, Timer 클래스를 작성해 보겠습니다.

public class Timer
{
    private float _elapsedTime = 0f;
    private float _limitTime = 0f;

    public Timer(float limitTime)
    {
        _elapsedTime = 0f;
        _limitTime = limitTime;
    }

    public void Update(float deltaTime)
    {
        _elapsedTime = Mathf.Min(_elapsedTime + deltaTime, _limitTime);
    }

    public bool IsTimeout
    {
        get { return _elapsedTime >= _limitTime; }
    }

    public void Reset()
    {
        _elapsedTime = 0f;
    }
}

 

이렇게 만든 Timer 클래스를 사용하면 코드가 다음과 같이 바뀝니다.

timer.Update(Time.deltaTime);
if (timer.IsTimeout)
{
    // 일정 시간마다 처리.

    // ... 생략.
    timer.Reset();
}

 

코드의 양(줄 수)은 변화가 없습니다. 하지만 주석으로 따로 설명해야 했던 것이 클래스로 표현되었습니다. 코드를 읽으면 바로 무슨뜻인지 알 수 있습니다. 매우 자기 설명적인 코드라고 할 수 있습니다.

float 타입은 범용적인 데이터 타입입니다. 따라서 elapsedTime 변수는 시간 제어와 관련된 용도 이외에도 사용할 수 있습니다. 하지만 Timer 클래스 내부의 elapsedTime 변수는 시간 제어 용도로만 사용합니다. 코드의 의도가 더 명확해지는 것입니다.

이렇게 변수를 클래스화 해서 의도를 명확히 전달하는 것이 좋습니다.

 

내용 끝까지 읽어주셔서 감사합니다.

배너 클릭은 저에게 많은 힘이 됩니다.

감사합니다 🙂

RonnieJ

프리랜서 IT강사로 활동하고 있습니다. 게임 개발, C++/C#, 1인 기업에 관심이 많습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Please turn AdBlock off

Notice for AdBlock users

Please turn AdBlock off