[unity] - 시간 흐름 [ deltaTime ]
구현의 목표는 8시부터 23시까지 시간이 10분단위로 표기되지만, 1분 표기는 실제시간 4초이다.
그리고 23시가 넘어가면 다음 요일로 넘어가게 한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using Unity.VisualScripting;
public TextMeshProUGUI text1;
public TextMeshProUGUI day;
public float time1;
public int minute=0;
public int hour=0;
public int day1=0;
text1은 시간이 나타나는 텍스트를 가리키고, day는 요일을 나타내는 텍스트를 가리킨다.
time1은 실제 흐르는 시간, minute , hour은 각자 분,초를 나타낸다.
day1은 요일 번호이다.
private void Start()
{
time1 = 8 * 240;
}
void Update()
{
if (day1<=6)
{
timeSet();
daySet();
}
else
{
EndGame();
}
}
time1을 8*240으로 초기화해주는데, 이는 8시로 초기화한것이다.
4초를 1분으로 해서, 4*60이 1시간이라 8을 곱해준것이다.
그리고 day1이 6이하인동안 계속 timeSet과 daySet함수를 실행시키고, 아니면 끝내준다.
public void timeSet()
{
Time.timeScale = 100.0f;
string st = "";
time1 += Time.deltaTime;
minute = (int)(time1 / 4);
if (minute >= 60)
{
minute %= 60;
}
hour = (int)(time1 / 240);
if (hour % 24 >=23)
{
day1 += 1;
time1 = 8*240;
return;
}
st += (hour / 10 == 0) ? "0" + hour.ToString() + ":" : hour.ToString() + ":";
st += (minute / 10 == 0) ? "0" + minute.ToString() : minute.ToString();
if (minute % 10 == 0)
{
text1.text = st;
}
}
timeScale을 100으로 해준이유는 좀더 빨리보기위해서 임시로 해둔것이다.
st를 통해서 계속 시간을 저장해준다.
time1으로 시간을 초단위로 받는다.
minute은 4초에 1분으로 잡아서 4로 나누어주고 int형으로 변환한다.
만약 60이 넘으면 60의 나머지로 만들어준다.
hour도 4초*60분이라 240을 나누어주었다.
hour%24가 23이상이면 23시가 된것이므로, 하루가 지난것으로 쳐서 day1를 증가시키고, time1을 8시로 초기화하고 리턴해준다.
23미만일때는 st에 hour이 10미만이면 08시,,이런식으로 표기되어야하므로 0에 ToString한걸 더해주고 :도 추가해준다. 아니라면 그냥 ToString이랑 :만 추가한다.
분도 똑같이 해준다.
그리고 10분마다 표기되기위해 마지막 if문을 썼다.
public void daySet()
{
switch (day1)
{
case 0:
day.text = "Mon";
break;
case 1:
day.text = "Tue";
break;
case 2:
day.text = "Wed";
break;
case 3:
day.text = "Thu";
break;
case 4:
day.text = "Fri";
break;
case 5:
day.text = "Sat";
break;
case 6:
day.text = "Sun";
break;
}
}
daySet은 day1숫자별로 요일을 표기해주는것이다. 간단하게 switch문으로 해줬다.
private void EndGame()
{
// 게임 종료 로직
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#else
Application.Quit();
#endif
}
게임을 끝내는 함수이다.