유니티에서 타이머 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 변수는 시간 제어 용도로만 사용합니다. 코드의 의도가 더 명확해지는 것입니다.
이렇게 변수를 클래스화 해서 의도를 명확히 전달하는 것이 좋습니다.
내용 끝까지 읽어주셔서 감사합니다.
배너 클릭은 저에게 많은 힘이 됩니다.
감사합니다 🙂