본문 바로가기

유니티

유니티 Update vs FixedUpdate

반응형

유니티로 게임을 개발하면 보통 일시정지 기능을 구현한다. 일시정지되면  Time.timescale=0 이되게 구현하는것이 보통이다. 그런데 일시정지를 했는데도 점수가 계속 올라가는 현상을 발견했었다. 

간단하게 얘기하면 Update는 Timescale에 영향을 안받고 FixedUpdate는 영향을 받는다. 

일시정지를 시켜도 배경음악은 보통 나오게 구현되어있다. 즉 프레임은 진행된다는 뜻이다. 

 

Update는 매 프레임마다 호출된다. 그래서 각 호출간격이 일정하지 않다. 그렇기에 Time.timeScale에 영향을 받지 않는다.

FixedUpdate는 고정된 시간마다 계속 호출된다고 한다.

FixedUpdate의 타이머

 

만약 점수가 상승하는 함수를 Update 안에 넣었으면 timeScale이 0이 되도 올라간다.

FixedUpdate는 함수 호출간격이 일정하기에 물리 계산이나 Ray처리에 주로 사용된다고 한다.

유니티 공식문서에 따르면 만약 Time.timeScale을 변경하게 된다면  Time.fixedDeltaTime도 수정하길 권장하고 있다.

Time.fixedDeltaTime = 0.02f * Time.timeScale

보통 이렇게 수정한다고 한다.

 

비슷한 예시로 코루틴에서 사용하는 WaitForSeconds는 Time.timeScale이 반영된 시간을 기다리고,

WaitForSecondsRealTime은 Time.timeScale과 별개로 현실에서 흘러가는 시간을 기다린다.

반응형