반응형
비동기 내용을 찾다보면 프레임을 건너뛴다라는 말이 많이 나온다 그게 무슨말일까?
Unity는 프레임 단위로 게임을 실행한다.
Frame 1
├ Input 처리
├ Update 실행
├ Physics
├ Rendering
└ 화면 출력
Frame 2
├ Input 처리
├ Update 실행
├ Physics
├ Rendering
└ 화면 출력
이 과정이 게임 루프(Game Loop) 로 계속 반복된다.
게임은 보통 1초에 30 ~ 120번 정도 이 루프를 반복한다.
예를 들어 60fps라면
1초 = 60 프레임
따라서 한 프레임의 시간은
약 0.016초
이다.
코루틴과 async에서 프레임 대기
코루틴의
yield return null;
비동기의
await Awaitable.NextFrameAsync();
의 의미는
지금 실행을 멈추고
다음 프레임에서 이어서 실행한다
이다.
왜 프레임을 기다려야 하는가
예를 들어 카메라 FOV를 줄일 때 부드러운 애니메이션을 만들려면
Frame1 → 60
Frame2 → 58
Frame3 → 56
Frame4 → 54
...
Frame60 → 30
처럼 프레임마다 조금씩 값이 변경되어야 한다.
만약 프레임을 기다리지 않는다면?
프레임 대기 없이 while 루프를 돌리면
한 프레임 안에서
while 루프가 수천 번 실행된다.
그래서 실제 시간은 지나지 않았는데
60 → 30
이 즉시 계산되어 버린다.
결과적으로
부드러운 애니메이션이 만들어지지 않는다.
Update와 while의 차이
Update
→ Unity가 프레임마다 한 번씩 호출
→ 자연스럽게 프레임 기반 실행
while
→ 한 프레임 안에서 계속 실행
→ 프레임을 기다리지 않음
그래서
Update / Coroutine / async
→ 프레임 기반 로직
while
→ CPU 루프
가 된다.
반응형
'유니티' 카테고리의 다른 글
| Unity Linux Server 빌드란 (0) | 2026.03.17 |
|---|---|
| [Unity Linux Server] GLIBC란? (0) | 2026.03.17 |
| CancellationTokenSource test code (0) | 2026.03.13 |
| Addressables 세팅 방법 및 샘플 코드 (0) | 2026.03.12 |
| Unity Garbage Collection (0) | 2026.03.11 |