🎯 싱글 게임에서 시간 동기화란?
> "게임 내 모든 시스템(애니메이션, 물리, AI 등)이 동일한 '시간의 흐름'을 기준으로 움직이도록 동기화하는 것."
---
⏱️ 1. 주요 용어
용어 설명
deltaTime 이전 프레임과 현재 프레임 간 경과 시간 (초 단위)
Fixed timestep 일정한 시간 간격으로 게임 로직/물리 처리 (예: 16.6ms = 60FPS)
Unscaled time 게임 일시정지/슬로우모션과 관계없는 실시간 흐름
Scaled time Time.timeScale과 함께 사용하는, 게임 내 시간의 흐름 속도
---
🔧 2. 싱글 게임에서 주로 사용되는 시간 동기화 알고리즘
✅ A. Fixed Time Step 알고리즘 (권장)
기본 구조:
accumulator += deltaTime
while accumulator >= fixedDeltaTime:
updatePhysics(fixedDeltaTime)
accumulator -= fixedDeltaTime
render()
장점:
물리/AI/이벤트 등의 업데이트가 항상 같은 시간 간격으로 실행됨
재현성 높음 (같은 입력 → 같은 결과)
튀는 프레임에도 게임 로직 안정
단점:
렌더링과 로직이 분리되기 때문에 interpolation 필요
너무 낮은 fixedDeltaTime은 CPU 과부하
---
✅ B. Variable Time Step 알고리즘 (간단하지만 불안정)
updateGameLogic(deltaTime)
render()
매 프레임마다 실제 경과 시간만큼 로직 실행
deltaTime은 불안정할 수 있어 물리엔진이나 정밀 시뮬레이션에 부적합
---
✅ C. Time Scaling & Pause-safe Time
게임 일시정지나 슬로우모션을 위해 Time.timeScale 활용
Time.deltaTime × timeScale → 게임 내 시간 흐름
UI 애니메이션 등은 unscaledDeltaTime 사용하여 독립적 동작
---
⚙️ 3. Unity 기준 예시 (C#)
void Update() {
float dt = Time.deltaTime; // 프레임 간 시간
float realTime = Time.unscaledDeltaTime; // 일시정지 무시 시간
timePassed += dt;
if (timePassed >= fixedInterval) {
DoGameLogic(); // 고정 틱마다 처리
timePassed = 0f;
}
AnimateUI(realTime); // UI는 항상 실시간 기준
}
---
📚 추천 자료
📘 Game Programming Patterns - “Game Loop” & “Update Method” 챕터
📘 Fix Your Timestep by Glenn Fiedler (GafferOnGames): https://gafferongames.com/post/fix_your_timestep/
📘 Unity 공식 문서: Time
---
✅ 결론 요약
알고리즘 특징 사용 용도
Fixed Time Step 일정한 간격으로 업데이트, 재현성 ↑ 물리, AI, 정밀 이벤트 처리
Variable Time Step 구현 쉬움, 프레임마다 경과시간 처리 일반 로직, 빠른 프로토타입
Time Scaling 시간 흐름 제어 (슬로우모션, 일시정지 등) 게임 컨트롤, UI 동기화 등
카테고리 없음