This document is about: FUSION 2-SHARED
SWITCH TO

Physics

Fusion 2.1부터 NetworkTransform은 공유 모드와 클라이언트-서버 모드 모두에서 Rigidbody 사용을 지원합니다.

두 가지 내장 접근 방식이 있습니다:

  • Forecast : 보간/외삽을 사용하여 모든 플레이어의 로컬 시간에 물리 오브젝트를 배치합니다. 모든 클라이언트에서 부드럽게 상호작용할 수 있습니다.

  • Forecast 비활성화: 권한에서 다른 클라이언트로 물리 오브젝트를 동기화하는데, 이는 비물리 오브젝트가 동기화되는 방식과 동일합니다. 단, 권한을 제외한 다른 클라이언트에서는 해당 오브젝트가 원격 시간에 존재하며 Rigidbody가 Kinematic으로 설정됩니다. 이는 클라이언트-서버 게임에서 상호작용이 필요 없는 물리에 가장 적합합니다.

네트워크 프로젝트 환경 구성 - 글로벌 설정

Physics Forecast

Forecast Physics의 전역 설정입니다. Forecast Physics 외삽을 허용하려면 반드시 활성화해야 합니다. 체크 해제 시 물리는 원격 시간으로 모든 프록시에 동기화됩니다. 체크하면 NetworkTransform 단위로 Forecast Physics를 제어할 수 있습니다.

Network Transform 제어 설정

Forecast Physics 활성화

오브젝트 단위로 Forecast Physics를 제어하는 옵션입니다. NetworkProjectConfig에서 Forecast Physics가 활성화된 경우에만 동작합니다.

Forecast

Forecast Physics는 네트워크로 수신된 위치를 외삽하여 물리 오브젝트를 모든 플레이어의 로컬 시간에 배치합니다. 이 경우 모든 클라이언트는 로컬에서 전체 물리를 실행하고, 로컬 물리 결과를 외삽된 위치와 조정합니다. 이를 통해 물리 오브젝트 간의 부드러운 상호작용이 가능해집니다.

Forecast 오브젝트가 부드럽게 움직이려면 유니티 Rigidbody에서 보간을 활성화해야 합니다:

Rigidbody set to Interpolate.

Forecast는 Fusion 내에서 특수한 경우로, 활성화된 오브젝트는 Update()FixedUpdateNetwork()가 아닌 FixedUpdate()를 사용해야 합니다. Fusion과 물리 통합 예제도 있으며, 여기서는 차량 제어를 다룹니다.

예를 들어 자동차와 같이 플레이어가 제어하는 물리 오브젝트의 경우, 플레이어 입력을 모든 클라이언트에 전송하고 모든 클라이언트가 제어 코드와 물리를 로컬에서 실행하도록 하는 것이 일반적으로 더 나은 결과를 제공합니다.

제한 사항

최근 유니티 버전은 FixedUpdate() 대신 Update()에서 물리를 실행할 수 있도록 지원하지만, Forecast Physics에서는 지원되지 않습니다.

수신된 데이터의 외삽은 월드 내의 장애물을 인식하지 못합니다. 하지만 물리는 로컬에서 실행되므로, 오브젝트가 벽이나 장애물 안으로 잘못 들어가는 일은 발생하지 않습니다. 다만 움직이는 오브젝트가 모든 클라이언트에서 정확히 같은 위치에 보이지 않을 수 있으며, 특히 공이 바닥에 튀어 오르는 것처럼 급격히 방향이 바뀔 때 가장 눈에 띕니다.

네트워크 된 물리 품질은 다른 네트워크 코드와 마찬가지로 클라이언트의 핑 시간이 증가할수록 떨어집니다.

Forecast 비활성화

Forecast 비활성화는 권한에서 다른 클라이언트로 물리 오브젝트를 동기화하는데, 이는 비물리 오브젝트의 동기화 방식과 동일합니다. 프록시에서는 Rigidbody가 기본적으로 Kinematic으로 설정되어 모든 물리 상호작용이 권한에서만 처리됩니다.

이는 클라이언트-서버 게임에서 캐릭터가 물리 오브젝트를 밀 수 없는 등 상호작용이 필요 없는 경우에 가장 적합합니다. 프록시는 원격 시간에 있으며, 물리 상호작용이 활성화되어 있어도 일반적으로 부드럽게 동작하지 않습니다.

Fusion 2.1에서는 Fusion 2.0과 동작이 달라졌습니다. Fusion 2.0은 프록시 Rigidbody를 Kinematic으로 설정하지 않았습니다. Fusion 2.0과 동일하게 동작하도록 하려면 코드에서 NetworkTransform.PhysicsSettings.SetForecastDisabledProxyRigidbodiesToKinematic 속성을 false로 설정하면 됩니다.

Back to top