유니티에서 해당 씬을 일시정지하고 리로드하는 부분에서 timeScale을 사용했더니 게임 전체가 멈춰버리는 오류가 생겼었다.
그래서 처음에 해당 버튼에 timeScale을 1로 설정하는 코드를 넣었더니 해당 버튼을 눌렀을 때 인식하지 못했었다..
(timeScale이 유니티의 라이프사이클을 멈춰서 해당 UI버튼까지 멈춰버린 것 같은데, 그렇다기엔 SceneManager은 작동한다.
timeScale보다 SceneManager이 더 우선도를 갖고 있는 걸까?)
그래서 이 때는 update가 scaleTime에 관계없이 계속 프레임당 정보를 업데이트하는 걸로 알고 있어서 아래와 같이 작성했다.
void Update()
{
time += Time.deltaTime;
timeTxt.text = time.ToString("N2");
if(time < 60.0f)
{
Time.timeScale = 0.0f;
retryBtn.SetActive(true);
}
if(retryBtn.activeSelf == false)
{
Time.timeScale = 1.0f;
}
}
위 코드 대신 아래처럼 if문 범위를 바꿔서 해결했다.
그리고 생각해보니 위처럼 코드를 작성하면 Time은 전역적이니까 다른 씬까지 영향을 끼쳐서 비효율적인 방법인 것 같다.
timeScale=0으로 했다가 조건을 바꿀 때 적용되지 않는 경우도 있다고 하는데, 이게 케이스마다 다르고 공식문서에도 명시되어있지 않아 계속 겪어봐야 아는 느낌이다..
void Update()
{
time += Time.deltaTime;
timeTxt.text = time.ToString("N2");
if(time < 2.0f)
{
time += Time.deltaTime;
timeTxt.text = time.ToString("N2");
}
else
{
retryBtn.SetActive(true);
}
}
timeScale과 lifecycle 관련 공식문서를 더 봐야겠다.
'unity' 카테고리의 다른 글
| Unity 개발을 위한 IDE 세팅 (0) | 2025.04.07 |
|---|---|
| 유니티 버그 관련 이슈 (0) | 2023.08.10 |
| 0531_리베이스 관련한 충돌 이슈 (0) | 2023.05.31 |
| [Obstacle_Course] 관련 공부 내용 정리 (0) | 2023.01.19 |
| [Obstacle_Course] 0. 게임 기획 (0) | 2023.01.16 |