핵심 정리
Edit > Project Settings > Time
Fixed Timestep = 0.02
Maximum Allowed Timestep = 0.3333333구조 이해
Fixed Timestep이 성능에 미치는 영향
Fixed Timestep은 물리 업데이트 간격을 결정합니다. 값이 작을수록 물리 시뮬레이션이 더 자주 실행되어 정확도는 높아지지만 CPU 비용도 함께 커집니다. 반대로 값을 크게 하면 시뮬레이션 빈도가 줄어 가볍지만 충돌 정확도와 조작감이 저하될 수 있습니다. 저사양 플랫폼에서는 목표 프레임에 맞춰 시뮬레이션 빈도를 조금 낮추는 전략이 필요할 수 있습니다.
악순환 구조와 Maximum Allowed Timestep
Unity 공식 물리 최적화 가이드는 프레임이 밀릴 때 물리 시뮬레이션이 "따라잡기"를 하며 더 느려지는 악순환을 경고합니다. 프레임이 예산을 초과하면 물리가 보정을 위해 더 많은 스텝을 실행하고, 그로 인해 다음 프레임도 느려지는 연쇄가 생깁니다. Maximum Allowed Timestep은 한 프레임에서 허용할 물리 보정량 상한이라, 스파이크 통제와 물리 정확도 사이의 절충점입니다.
플랫폼별 조정 예시
목표 프레임과 기기 성능에 따라 두 값을 함께 조정해야 합니다. 예를 들어 모바일 30 fps 목표에서는 Fixed Timestep을 0.035 정도로 높이고, Maximum Allowed Timestep을 0.1로 낮춰 스터터 발생 시 물리 보정 폭을 제한할 수 있습니다. 조정 후에는 전투 중 대량 Instantiate 상황 같은 실제 스트레스 장면에서 물리 스터터 감소 여부를 반드시 측정해야 합니다.
예시 모바일 30 fps 목표:
- Fixed Timestep: 0.035
- Maximum Allowed Timestep: 0.1
테스트:
- 전투 중 대량 Instantiate 상황에서 물리 스터터 감소 여부 측정체크포인트
| 상황 | 적합한 선택 |
|---|---|
| 물리 정확도 높이기 (빠른 충돌 감지) | Fixed Timestep 감소 (ex. 0.02 → 0.01) |
| 모바일 물리 비용 줄이기 | Fixed Timestep 증가 (ex. 0.02 → 0.035) |
| 프레임 스파이크 시 물리 보정 폭 제한 | Maximum Allowed Timestep 낮추기 |
| 조정 효과 검증 | 실제 스트레스 장면(전투, Instantiate 다수)에서 측정 |
| 비교 | 더 잘 맞는 쪽 | 이유 |
|---|---|---|
| 정확도 우선 vs CPU 절약 우선 | timestep 감소 / 증가 | 투사체 충돌과 조작감, 플랫폼 예산이 다름 |
| 스파이크 추적 허용 vs 보정 상한 제한 | 최대 timestep 크게 / 작게 | 느린 프레임에서 물리 따라잡기 폭이 달라짐 |
| 수치 변경 vs 실제 장면 측정 | 측정 우선 | 체감과 병목은 장면 부하에 따라 달라짐 |
주의할 점
Fixed Timestep을 낮추면 정확도가 높아지지만 CPU 비용도 같이 올라갑니다. 조정 후에는 실제 장면에서 조작감, 충돌 정확도, 스파이크 패턴을 함께 측정해야 합니다.
// ❌ Fixed Timestep만 낮춤 → 물리 비용 급증 확인 없음
Time.fixedDeltaTime = 0.01f; // 100Hz → 모바일에서 과부하
// ✅ 플랫폼 목표에 맞게 조정 후 실측
모바일 30fps 목표:
Fixed Timestep: 0.035 (약 28Hz → 기본보다 가볍게)
Maximum Allowed Timestep: 0.1 (스파이크 시 보정 폭 제한)
조정 후 테스트:
1. 전투 중 대량 Instantiate 장면에서 FixedUpdate 비용 측정
2. 빠른 투사체 충돌 누락 여부 확인
3. 조작감(Rigidbody 반응성) 체감 점검
// ❌ Fixed Timestep만 바꾸고 입력/카메라 체감은 안 봄
// → 수치상 비용은 줄었지만 조작감이 무거워질 수 있음참고 링크
3 sources