시간 기반 액션을 다룰때 주의할 점 : 게임의 프레임 속도는 일정하지 않고,
Update()의 콜 사이의 시간 간격은 일정하지 않다.
이를 해결하기 위해서는 Time.deltaTime에서 읽어오는 프레임 시간에 맞춰서 스케일링 한다.
고정 타임스텝(Fixed Timestep)
- Unity의 물리 시스템은 고정 타임스텝으로 작동함
- 물리 업데이트를 시작할때 마지막 물리 업데이트가 끝난 시점에 고정 타임스텝 값을 추가하여 알람을 설정하고, 해당 알람이 꺼질 때까지 물리 시스템에서 계산을 수행함
- 고정 타임 스텝은 타임 관리자에서 변경 가능
• 낮으면 물리 업데이트가 자주 일어나지만, CPU로드 비용이 커진다.
- Time.fixedDeltaTime을 사용해서 읽을 수 있다.
- 단점 : 고정 타임 스텝은 물리 시뮬레이션을 정확히 유지하게 하지만, 물리계산이 많이 사용되고, 프레임 속도가 낮아질 수록 문제를 일으킬 수 있다.
- 단점 : 프로세싱할 것이 많다면 하나의 프레임 동한 여러번의 물리 이벤트가 일어날 수 있고, 그렇게 되면 프레임 시간, 오브젝트 포지션, 기타 프로퍼티는 프레임 시작 시점에 고정되기 때문에 물리가 더 자주 업데이트 되면서 그래픽과의 싱크가 어긋날 수 있다 -> 이럴때 사용하는게 최대 허용 타임 스텝
최대 허용 타임스텝(Maximum Allowed Timestep)
- 물리 시간을 늦추어 프레임과의 싱크를 맞추는 옵션
- 주어진 프레임 업데이트 동안 물리 프로세싱에 사용되는 시간과 FixedUpdate() 호출 수에 제한을 둔다.
- 프레임 업데이트 처리가 설정한 최대 물리 처리 시간보다 오래 걸린다면 물리 엔진은 시간을 멈춰서 프레임 프로세싱이 따라잡을때까지 기다린다.
- 물리 계산이 느리게 실행되지만, 게임 상에서는 눈에 잘 띄지 않으며 성능을 위해 감수할 만하다.
시간 스케일(Time Scale)
- 시간 스케일을 사용하면 게임시간이 현실 시간에 대비해서 흘러가는 속도 조절 가능
- 값이 0이면 시간이 멈추고, 2이면 유니티에서 시간이 2배의 속도로 흘러간다.
- 실제로 느리게 실행되는 것이 아니라, Time.deltaTime과 Time.fixedDeltaTime을 통해 전해지는 타임 스텝만을 변경한다.
- Update() 함수는 더 자주 호출되지만, deltaTime 스텝은 줄어든다.
- 다른 스크립트 함수는 시간 스케일의 영향을 바지 않는다.
- ex) GUI 함수는 정상적으로 동작한다.
캡처 프레임 속도(Capture Framerate)
- 게임 플레이를 녹화하는 것은 게임 프레임 속도를 저하시킨다.
- 캡처 프레임 속도 프로퍼티를 사용하면 해결 가능
'개발툴 > Unity' 카테고리의 다른 글
| IL2CPP (0) | 2023.09.30 |
|---|---|
| Null 레퍼런스 예외 해결방법 (0) | 2023.07.28 |
| FixedUpdate의 고정된 시간 간격으로 인해 Update와 FixedUpdate의 호출 빈도가 달라지면 성능 문제가 일어나지 않는가? (0) | 2023.07.11 |
| FixedUpdate는 프레임에 영향을 받지 않는가? (0) | 2023.07.11 |
| <이벤트 함수> (0) | 2023.07.11 |