본문 바로가기
unity

timeScale 관련 이슈

by mazayong 2023. 8. 9.

유니티에서 해당 씬을 일시정지하고 리로드하는 부분에서 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