🎯 1. 왜 보간과 예측이 필요할까?
- 네트워크 지연(Latency): 서버에서 받은 좌표가 실제보다 늦게 적용됨
- 패킷 손실(Packet Loss): 데이터가 유실될 경우 캐릭터가 순간이동하는 것처럼 보임
- 불규칙한 갱신 속도: 데이터가 일정한 간격으로 도착하지 않음
이 문제를 해결하기 위해 **보간(Interpolation)**과 **예측(Extrapolation)**을 사용해 움직임을 보정합니다.
🟢 2. 선형 보간법 (Lerp, Interpolation)
과거의 위치(이전 패킷)와 현재 위치(새로운 패킷)를 보간하여 자연스럽게 이동
네트워크에서 받은 좌표값이 불규칙하게 들어올 수 있기 때문에, 이를 부드럽게 연결하는 방식이야.
Vector3 targetPosition; // 서버에서 받은 목표 위치
float interpolationSpeed = 5.0f;
void Update()
{
transform.position = Vector3.Lerp(transform.position, targetPosition, Time.deltaTime * interpolationSpeed);
}
🔹 유니티 코드 예제 (Lerp 사용)
Vector3 targetPosition; // 서버에서 받은 목표 위치
float interpolationSpeed = 5.0f;
void Update()
{
transform.position = Vector3.Lerp(transform.position, targetPosition, Time.deltaTime * interpolationSpeed);
}
➡️ 현재 위치에서 targetPosition으로 부드럽게 이동함.
즉, 서버 패킷이 불규칙하게 와도, 이전 값과 현재 값을 보간하여 부드러운 움직임을 구현할 수 있습니다.
🔴 3. 예측법 (Extrapolation)
보간법은 항상 과거 데이터를 사용하지만, 예측법은 미래 움직임을 예측하여 보정하는 방식입니다.
(특히 빠른 이동을 하는 게임에서 필수적! 🚀)
🔹 유니티 코드 예제 (Extrapolation)
Vector3 lastPosition;
Vector3 velocity;
float deltaTime = 0.1f; // 서버 간 패킷 시간 간격
void Update()
{
// 예측된 위치 계산
Vector3 predictedPosition = transform.position + velocity * deltaTime;
transform.position = Vector3.Lerp(transform.position, predictedPosition, Time.deltaTime * 5.0f);
}
// 서버로부터 새로운 패킷이 도착할 때 갱신
void OnReceiveNewPacket(Vector3 newPosition)
{
velocity = (newPosition - lastPosition) / deltaTime;
lastPosition = newPosition;
}
➡️ 새로운 데이터가 올 때마다 속도를 계산하여 예측된 위치로 보정.
즉, 서버 패킷이 늦게 도착해도 현재 속도를 이용해 미리 예측된 위치로 이동 가능! 🚀
🔥 4. 보간 vs 예측 언제 사용해야 할까?
방법장점단점추천 상황
보간법 (Lerp) | 부드러운 이동 | 약간의 지연 발생 | 일반적인 멀티플레이 (MOBA, FPS 등) |
예측법 (Extrapolation) | 빠른 반응 속도 | 예측 오류 가능 | 빠르게 움직이는 물체 (레이싱, 로켓) |
🔹 FPS, MOBA 게임
→ 보간법 사용 (일반적인 이동)
🔹 레이싱, 로켓 이동
→ 예측법 사용 (빠른 속도)
이제 유니티에서 네트워크 움직임을 다룰 때 보간법 (Lerp)과 예측법 (Extrapolation)을 조합하면 자연스러운 멀티플레이어 이동을 구현할 수 있습니다.
'부트캠프 > Unity [ 스파르타 ]' 카테고리의 다른 글
[스파르타 ][TIL] 유니티 스파르타 7기 33일차 - MVP패턴 (0) | 2025.03.10 |
---|---|
[스파르타 ][TIL] 유니티 스파르타 7기 32일차 - 캐릭터컨트롤러 (1) | 2025.03.07 |
[ 스파르타 ][TIL] 유니티 스파르타 7기 28일차 - MVC패턴 (0) | 2025.02.28 |
[ 스파르타 ][TIL] 유니티 스파르타 7기 27일차 - 대리호출자 (0) | 2025.02.27 |
[ 스파르타 ][TIL] 유니티 스파르타 7기 26일차 - BlendTree (0) | 2025.02.26 |