앞선 꿀팁 1, 2를 숙지했다는 기준으로 실제 구조로 꿀팁을 적었습니다.
꼭 끝까지 읽어보시길...
1️⃣ 아키텍처 기준 설계 원칙
좋은 구조는 이렇게 나뉜다:
Input Layer
Logic Layer
Physics Layer
Presentation Layer
Unity 함수와 매핑하면:
| Layer | Unity 함수 |
| Input | Update |
| Logic | Update |
| Physics | FixedUpdate |
| Presentation | LateUpdate |
2️⃣ MMORPG 기준 — 실제 구조 예시
이제 MMORPG 만든다고 가정해보자.
🎮 플레이어 캐릭터 구조 예시
📌 1단계 — 입력 처리 (Update)
void Update()
{
inputDirection = new Vector2(
Input.GetAxis("Horizontal"),
Input.GetAxis("Vertical")
);
if (Input.GetKeyDown(KeyCode.Space))
skillInput = true;
}
여기서 하는 일
- 이동 방향 저장
- 스킬 버튼 입력 저장
- 공격 버튼 저장
- UI 입력 체크
- 채팅 입력 체크
❗ 절대 이동하지 않음 (Rigidbody라면) - 이유는 꿀팁4에 있습니다.
📌 2단계 — 이동 계산 (Update or FixedUpdate)
🔹 Case 1: Transform 이동 기반
void Update()
{
Vector3 move = new Vector3(inputDirection.x, 0, inputDirection.y);
transform.position += move * speed * Time.deltaTime;
}
🔹 Case 2: Rigidbody 기반 (권장)
void FixedUpdate()
{
Vector3 move = new Vector3(inputDirection.x, 0, inputDirection.y);
rb.MovePosition(rb.position + move * speed * Time.fixedDeltaTime);
}
📌 3단계 — 상태머신 처리 (Update)
void Update()
{
stateMachine.Update();
}
- Idle → Move
- Move → Attack
- Attack → Cooldown
- Skill Casting
이건 프레임 기반이 맞다.
📌 4단계 — 애니메이션 세팅 (Update)
animator.SetFloat("Speed", inputDirection.magnitude);
애니메이션 파라미터는 Update에서 설정.
📌 5단계 — 카메라 추적 (LateUpdate)
void LateUpdate()
{
camera.transform.position = player.transform.position + offset;
}
이걸 Update에서 하면?
→ 캐릭터 이동 후 카메라가 먼저 계산될 수도 있음
→ 1프레임 밀림 발생
📌 6단계 — UI 추적 (LateUpdate)
- HP바 위치 추적
- 이름표 위치 추적
- 월드 좌표 → 스크린 좌표 변환
3️⃣ 네트워크 MMORPG 기준 설계
MMORPG는 여기서 더 정교해진다.
✔ Update에서 하는 것
- 입력 수집
- 로컬 예측 이동
- 패킷 생성
- 서버에서 받은 패킷 처리
- 상태머신 업데이트
✔ FixedUpdate에서 하는 것
- 물리 기반 이동 보정
- Rigidbody 이동
- 넉백 계산
✔ LateUpdate에서 하는 것
- 보간 처리
- 카메라
- 위치 스무딩
- 렌더링 보정
4️⃣ 가장 흔한 실수
❌ 입력을 FixedUpdate에서 받음
→ 입력 씹힘
❌ 카메라를 Update에서 이동
→ 프레임 밀림
❌ Rigidbody를 Update에서 이동
→ 충돌 오작동
❌ 상태머신을 FixedUpdate에서 돌림
→ 프레임마다 다르게 동작
5️⃣ 실전 설계 규칙 요약
🔥 규칙 1
입력은 무조건 Update
🔥 규칙 2
물리는 FixedUpdate
🔥 규칙 3
카메라는 LateUpdate
🔥 규칙 4
상태머신은 Update
🔥 규칙 5
Rigidbody 쓰면 transform 직접 건들지 말 것
6️⃣ 고급 설계 팁
✔ 입력 버퍼링 시스템
Update에서 입력 저장 → FixedUpdate에서 소비
Update → inputCache 저장
FixedUpdate → inputCache 기반 물리 이동
✔ 실행 순서 강제
Unity Script Execution Order 사용
핵심 매니저 먼저 실행
✔ Update 분리 패턴
void Update()
{
HandleInput();
UpdateLogic();
}
void FixedUpdate()
{
HandlePhysics();
}
void LateUpdate()
{
HandlePresentation();
}
🔚 결론 — 개발자 기준 철학
Update = 의사결정
FixedUpdate = 물리적 실행
LateUpdate = 시각적 정리
'Unity > 초보자가 알면 좋을 팁' 카테고리의 다른 글
| LateUpdate에 캐릭터 이동을 넣지 않는 이유에 대하여 (0) | 2026.03.03 |
|---|---|
| Unity 기본 아키텍쳐 흐름은 이해해보자 - Rigidbody, Update, LateUpdate, FixedUpdate (0) | 2026.03.03 |
| 유니티 Update / LateUpdate / FixedUpdate 사용 원칙 (꿀팁) - 4 (0) | 2026.03.03 |
| 유니티 Update / LateUpdate / FixedUpdate 사용 원칙 (꿀팁) - 2 (0) | 2026.03.03 |
| 유니티 Update / LateUpdate / FixedUpdate 사용 원칙 (꿀팁) - 1 (0) | 2026.03.03 |