Fusion2 Leg Compensation Null 오류
LegCompensation을 사용하는데 Null이 뜬다. 초기화를 잘못 해줬다? 클라이언트는 Null이 맞다? 여러 가지 해결책이 있었는데 전부 듣지 않았다. 우습게도 NetworkProjectConfig에서 Lag Compenmstation Enable 옵션을 꺼서 발생하는 문제였다.
아래는 개념입니다.
- 출처: Fusion2 매뉴얼
지연 보상은 빠른 속도의 멀티플레이어 게임에서 근본적인 문제를 해결합니다. 즉, 클라이언트를 완전히 신뢰할 수 없는 상황에서도 클라이언트에게 '보이는 대로' (What You See Is What You Get) 경험을 제공하는 것입니다.
문제는 네트워크상의 어느 머신도 게임의 정확히 동일한 틱에 있지 않다는 점입니다. 한 클라이언트가 보는 것과 그에 기반해 행동하는 것은 오직 자신의 관점에서만 100% 정확합니다. 대표적인 예로, 먼 거리의 대상을 정확하게 맞추는 샷 감지를 들 수 있습니다.
지연 보상을 통해 서버는 각 클라이언트의 관점에서 잠시 동안 세계를 바라보고, 그들이 실제로 불가능해 보이는 샷을 할 수 있는 위치에 있었는지 판단할 수 있습니다. 불행하게도, 이 과정은 대상이 플레이어의 예상과 달리 이미 안전하게 벽 뒤로 숨어있다고 느껴지더라도 맞게 될 수 있음을 의미합니다. 그러나 이러한 현상은 눈에 띄게 될 가능성이 훨씬 적습니다.
Fusion은 히트박스가 이전에 어디에 위치했는지의 기록을 보관하며, 각 클라이언트의 시점이 현재 서버 상태에 비해 얼마나 뒤처져 있는지 알고 있습니다. 이 기록을 사용하여 Fusion은 과거의 레이캐스트를 통해 지연을 보상할 수 있습니다.
초고정밀을 위해, Fusion은 지연 보상을 한 단계 더 진행합니다. AAA 게임의 프레임률은 보통 네트워크 틱률보다 높기 때문에, 플레이어가 화면에서 실제로 보는 것은 개별 틱이 아니라 두 틱 사이의 보간 결과입니다. Fusion은 지연 보상이 적용된 레이캐스트가 두 틱 사이에서 정확히 어느 정도 진행되었는지 알고 있으며, 이를 사용하여 서브 틱(sub-tick) 레이캐스트 정확도를 달성할 수 있습니다.