몇 주동안 묶혀두었던 프로젝트를 드디어 다시 꺼냈다.
계속 타이머가 작동 안하는 문제가 있었는데, 들여다보자면
public Text timeTxtSec
float time = 0f;
float min = 0f;
void Update()
{
time += Time.deltaTime;
if (time >= 60f)
{
min++;
time = 0f;
}
timeTxtSec.text = string.Format("{0:D2}:{1:D2}", min, (int)time);
이렇게 코드를 작성 했을 때, 00:00 이렇게 시간이 업데이트 되길 원했는데, 게임을 실행해보면 작동을 하지 않았다.
아는 지식은 deltatime을 통해서 시간을 실시간으로 올리는 방법 뿐이었고, 00:00으로 표시하고 싶어 구글 검색을 해봤다. 처음에 블로그를 통해 string.Format을 사용하면 된다고 했을 때, 적용을 했는데 안되길래 스트레스를 많이 받았다.
공식 문서를 참고해봐야겠다란 생각으로
https://learn.microsoft.com/ko-kr/dotnet/api/system.string.format?view=net-8.0#system-string-format(system-string-system-object-system-object-system-object)
이곳에 들어가서 보니까

이렇게 써있길래 내가 뭘 잘못했지? 맞는거 같은데? 계속 고민하다가 결국 안되겠어서 이가 아니면 잇몸이란 생각으로 00과 : 그리고 00으로 텍스트를 따로따로 관리할까란 단계까지 왔었다.
그러다가 다행히도 지인에게 물어볼 찬스가 있었는데, 생각보다 간단하게 해결되었다.
변수형의 문제였다.
{n:D2}는 정수형 변수 int만 받을 수 있었고, 위쪽에서 min을 float으로 정의했기 때문에 작동을 안한거였다. 블로그 내용을 어설프게 복사하다보니 뒤쪽만 (int)time 이렇게 쓴 게 오히려 혼란을 가중시켰던 것 같다.
min은 위쪽에서 int형 변수로 변경하니 해결되었고, 해당 부분에 대한 공식 문서 링크도 받아서 의문이 깔끔하게 해결되었다.
감사합니다.
https://learn.microsoft.com/ko-kr/dotnet/standard/base-types/standard-numeric-format-strings
