[Unity/UI] 절전모드의 표시 시간 및 절전시간 구현

이형원·2026년 3월 29일

주간 공부

목록 보기
5/7

1. 구현 목표

절전 모드에서 현재 시간을 표기 및 절전한 시간을 표기하는 기능을 구현한다.
이때 현재 시간 표기는 국가별 변경사항에 따른 방식을 고려한다.

2. 설계 방식

우선은 한국 시간을 기준으로 구현을 시도하고, 다른 국가로 변경할 수 있는 방식의 간단한 구현만 진행함

using System;
using System.Collections;
using TMPro;
using UnityEngine;

public class UiTime : MonoBehaviour
{
    [SerializeField] private TMP_Text _currentTime;
    [SerializeField] private TMP_Text _progressTime;
    [SerializeField] private string _timeZoneId = "Korea Standard Time";

    private Coroutine _coroutine;
    private float _startTime;
    private TimeZoneInfo _timeZone;

    private void Awake()
    {
        _timeZone = TimeZoneInfo.FindSystemTimeZoneById(_timeZoneId);
    }

    private void OnEnable()
    {
        if (_coroutine != null)
            StopCoroutine(_coroutine);

        _startTime = Time.realtimeSinceStartup;
        _coroutine = StartCoroutine(TimeCoroutine());
    }

    IEnumerator TimeCoroutine()
    {
        while (true)
        {
            DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, _timeZone);
            _currentTime.text = localTime.ToString("HH : mm : ss");

            float elapsed = Time.realtimeSinceStartup - _startTime;
            TimeSpan timeSpan = TimeSpan.FromSeconds(elapsed);

            _progressTime.text = $"{timeSpan.Minutes:D2}min {timeSpan.Seconds:D2}sec";

            yield return new WaitForSecondsRealtime(1f);
        }
    }
}

3. 결과

4. 참고사항

Time Zone Id 같은 경우는 컴퓨터의 레지스트리 편집기를 통해서 확인할 수 있으며, 필요에 따라 커스텀 Time Zone을 추가할 수도 있다.

profile
게임 개발을 위한 화력 태우기

0개의 댓글