움직임 동기화¶
실시간 멀티플레이어 게임 대부분은 위치와 방향, 속도를 동기화하여 해당 월드 안에서 플레이어의 움직임을 정확히 나타내야 합니다.
Strix Replicator 요소는 동기화에 필요합니다. 단, 액터 속성을 동기화할 수는 있지만 특정 변수를 구성된 대로만 동기화합니다. 여기에 Unreal 월드의 액터에 포함된 기존 변형 및 속도 속성은 포함되지 않습니다.
이 속성들을 수동으로 동기화할 수는 있지만, Strix에는 이 목적으로 쓸 수 있는 Strix Movement Synchronizer가 있습니다.
Strix Movement Synchronizer 요소¶
참고
간단한 위치 동기화는 가벼운 Strix Transform Sync 요소로 할 수 있습니다. 변환 동기화를 참조해 주십시오.
Strix Movement Synchronizer는 Strix Replicator 요소로 아무 액터에나 추가할 수 있습니다. Movement Synchronizer는 방장의 움직임에 맞춰 레플리카 액터의 포지션과 속도를 업데이트합니다.
이것은 예측을 실시하고 개체를 각 프레임에서 바른 포지션으로 옮기는 역할을 합니다. 그래서 빠르고 복잡한 동작으로 움직이는 개체, 그리고 멀리서 제어하는 게 아닌 것처럼 자연스럽게 보이는 개체에 적합합니다.
PawnMovementComponents가 있는 Pawn에서 사용하면 제일 좋습니다. 다른 액터에 사용해도 되지만, 경고가 발생하고 기본 업데이트가 아니라 포지션 업데이트로 폴백이 일어납니다. 이것은 매끄러운 동기화를 저해합니다. Strix Transform Sync보다 훨씬 더 성능 집약적이지만(변환 동기화 참조) 움직임은 훨씬 부드럽습니다.
Movement Synchronizer는 Strix Unreal SDK에서 가장 복잡한 요소입니다. 들어 있는 설정이 많기 때문입니다. 움직임 동기화의 정밀도와 부드러움은 액터의 특정 움직임에 좌우됩니다. 개발자들은 아래 설정으로 플레이해 보며 이용 사례별로 가장 적절한 값을 정하기를 권장합니다. Strix Unreal Sample은 액터 타입 간에 움직임 설정이 다릅니다.
Near Distance |
float |
현재 위치에서 원하는 위치까지 허용 오차 거리.
너무 높게 설정하면 고무 밴딩이 발생할 수 있습니다.
|
|
Max Speed |
float |
액터가 이동하는 최대 속도.
너무 낮게 설정하면 움직임이 일정하지 않습니다.
너무 높게 설정하면 액터가 부자연스럽게 빨리 움직입니다.
|
|
Acceleration |
float |
액터의 최대 가속입니다.
너무 낮게 설정하면 움직임이 일정하지 않습니다.
너무 높게 설정하면 액터가 부자연스럽게 빨리 가속합니다.
|
|
Damping |
float |
평탄화 값.
낮은 값을 적용하면 보간이 더 부드러워지지만, 높은 값을 적용하면 움직임의 반응성이 떨어집니다.
|
|
Sync Period Min |
int |
업데이트 최소 간격입니다. 단위는 밀리초입니다.
이 값이 작으면 업데이트가 더 많이 일어나고 따라서 움직임이 더 정확해집니다.
|
|
Sync Period Max |
int |
업데이트 최대 간격입니다. 단위는 밀리초입니다.
이 값이 작으면 정지해 있을 때 업데이트를 더 많이 합니다.
Sync Period Min과 연계되어, 많이 움직이지 않을 때 네트워크 성능을 줄여 주는 역할을 합니다.
|
|
Reachable Distance |
float |
한 번 업데이트로 이동할 수 있는 최대 거리를 말합니다.
이 값을 너무 낮게 설정하면 알고리즘이 따라오지 못해 움직임이 둔탁합니다.
여기서 주목해야 할 점은, 무언가를 오를 때 보이는 행동입니다. 2차원 공간에서 동기화할 때 3차원 움직임을 한다면 실제 움직이는 거리는 알고리즘이 예상하는 것보다 대체로 더 큽니다(Unreal Engine의 UCharacterMovementComponent에서 bMaintainHorizontalGroundVelocity에 관한 노트 참조).
|
|
Movement Sync Type |
RPC 또는 Sync Properties |
RPC는 기본값으로, 업데이트는 업데이트 틱마다 원격 프로시저 호출로 일어납니다.
Sync Properties는 Strix의 내부 동기화 로직을 이용합니다.
Sync Properties는 서버에서 동기화 데이터를 최신 상태로 유지하지만, 이로 인해 서버 부하가 높아집니다.
|
|
Sync Jump |
bool |
기본값은 참으로 설정되어 있습니다.
이것을 활성화하면 이 요소는 오리지널 액터가 점프할 때(레플리카가 떨어지고 있지 않다면) 복제된 액터에서 Character::Jump() 메서드를 호출합니다.
캐릭터 액터에서만 작동하며, 이렇게 하면 동기화된 점프를 간단히 구현할 수 있습니다. 단, 점프 로직이 복잡하다면 이것을 비활성화하고 Strix Blueprint RPC 함수나 Sync Z Velocity 옵션, 또는 둘 다 사용해도 됩니다.
|
|
Sync X Velocity |
bool |
X방향으로 속도를 동기화할지 여부를 제어하는 옵션입니다.
기본값은 참으로 설정되어 있습니다. X방향으로 움직일 일이 없다면 비활성화합니다.
|
|
Sync Y Velocity |
bool |
Y방향으로 속도를 동기화할지 여부를 제어하는 옵션입니다.
기본값은 참으로 설정되어 있습니다. Y방향으로 움직일 일이 없다면 비활성화합니다.
|
|
Sync Z Velocity |
bool |
Z방향으로 속도를 동기화할지 여부를 제어하는 옵션입니다.
기본값은 거짓으로 설정되어 있습니다.
일반적으로 게임에는 Z방향으로 중력이 작용합니다. 레플리카도 중력에 영향을 받아 바르게 떨어지면서 환경(지형 등)과 상호작용을 합니다. 이때 Z 속도는 동기화할 필요가 없습니다. 단, 게임에서 위아래로 움직임이 많거나 날거나 Z축에 대한 제어(예: 젯팩)를 허용한다면 이 옵션을 활성화해야 합니다.
|
|
Interpolate Rotation |
bool |
기본값은 참으로 설정되어 있습니다.
이것을 활성화하면 구선형 보간(SLERP)으로도 회전이 보간됩니다. 활성화하지 않으면 회전은 직접 업데이트됩니다.
부드러운 회전이 필요하지 않고 소폭으로 성능 향상을 원한다면 이 옵션을 비활성화하십시오.
|
|
Send RPC Spawn |
bool |
기본값은 참으로 설정되어 있습니다.
이것을 활성화하면, 액터가 이 싱크로나이저를 원격으로 스폰할 때 포지션이 즉시 업데이트됩니다.
|