This document is about: FUSION 2
SWITCH TO

Fusion 2 소개

개요

Fusion 1.1에서 2.0으로 변경된 목록은 이 페이지를 확인하십시오

Fusion은 유니티를 위한 새로운 고성능 상태 동기화 네트워킹 라이브러리입니다. Fusion은 기본적으로 데이터 압축, 클라이언트 측 예측 및 지연 보상과 같은 고급 기능을 제공하는 동시에 일반적인 유니티 워크플로우에 자연스럽게 통합되도록 단순성을 염두에 두고 구축되었습니다.

Fusion은 최첨단 압축 알고리즘에 의존하여 최소한의 CPU 오버헤드로 대역폭 요구사항을 줄입니다. 데이터는 궁극적으로 일관성을 유지하면서 부분 청크로 전송됩니다. 매우 높은 플레이어 수를 지원할 수 있도록 완전히 구성 가능한 관심 영역 시스템이 제공됩니다.

Fusion API는 일반적인 유니티 MonoBehaviour 코드와 유사하도록 설계되었습니다. 예를 들어, 명시적인 직렬화 코드가 필요하지 않고 MonoBehaviour의 메소드 및 속성에 대한 속성으로 RPC 및 네트워크 상태를 정의하며, 네트워크 개체는 네스팅 및 변형과 같은 유니티의 최신 프리팹 기능을 모두 사용하여 프리팹으로 정의할 수 있습니다.

입력, 네트워크 속성 및 RPC는 Fusion으로 게임 플레이 코드를 작성할 수 있는 기반을 제공합니다.

핵심 fusion apis의 개요
핵심 Fusion APIs의 개요

Fusion에서 네트워크 속성 사용:

C#

[Networked] public byte life { get; set; }

클라이언트 측 예측 이동에 네트워크 입력 사용:

C#

public override void FixedUpdateNetwork
{
    if (GetInput(out NetworkInputData data))
    {
        data.direction.Normalize(); // normalize to prevent cheating with impossible inputs
        _characterController.Move(5 * data.direction * Runner.DeltaTime);
    }
}

Fusion에서 원격 프로시저 호출(RPC) 선언:

C#

[Rpc(RpcSources.InputAuthority, RpcTargets.StateAuthority)]
public void RPC_Configure(string name, Color color)
{
    playerName = name;
    playerColor = color;
}

올바른 모드 선택하기

Fusion은 동일한 API로 두 개의 근본적으로 다른 네트워크 토폴로지와 네트워크 연결이 없는 단일 플레이어 모드를 지원합니다.

Fusion으로 시작할 때 첫 번째 단계는 서버/호스트와 공유 모드 중 하나를 선택하는 것입니다.

Quadrant는 애플리케이션에 적합한 모드를 결정하기 위한 좋은 출발점을 제공합니다.

the quadrant

전체 크기

튜토리얼

어떤 모드를 사용할지에 대한 좋은 아이디어가 이미 있다면 튜토리얼을 시작할 수 있습니다. 그렇지 않으면 계속해서 읽어서 모드에 대해 더 자세히 알아볼 수 있습니다:

공유 모드 기본

호스트 (서버) 모드 기본

토폴로지 차이점

fusion 네트워크 토폴로지
Fusion 네트워크 토폴로지

서버 모드

서버 모드에서 서버는 모든 객체에 대해 전체 및 독점적인 상태 권한을 갖지만 예외는 없습니다.

클라이언트는 서버에 입력을 전송하거나(서버가 입력에 응답하도록 함) RPC를 사용하여 변경을 요청함으로써 네트워크 객체만 수정할 수 있습니다.

서버 애플리케이션은 유니티 프로젝트를 기반으로 제작되었으며, 전체 헤드리스 유니티 빌드를 실행합니다. 이 헤드리스 빌드는 서버 머신이나 클라우드 호스팅 서버에서 호스팅 되어야 합니다. Photon은 전용 Fusion 서버 애플리케이션을 호스팅 하기 위한 서버를 제공하지 않습니다.

클라이언트 측 예측

클라이언트 측 예측은 클라이언트가 서버로부터 확인을 받기 전에 자신의 입력을 사용하여 자신의 움직임을 예측하는 인기 있는 멀티플레이어 아키텍처입니다. 이를 통해 게임 플레이가 불쾌감을 느낄 수 있는 지연 시간을 숨깁니다.

Fusion 서버 모드에서 클라이언트가 네트워크 상태로 직접 변경하는 것은 로컬 예측일 뿐이며, 변경 내용이 수신되면 서버의 실제 권한 스냅샷으로 무시됩니다. 클라이언트가 서버 제공 상태로 롤백 되고 로컬(예측된) 틱으로 재시뮬레이션되기 때문에 이를 조정이라고 합니다.

이전 예측이 정확했다면 이 프로세스는 매끄럽게 진행됩니다. 그렇지 않으면 상태가 업데이트되고 네트워크 상태가 렌더링 상태와 분리되어 있기 때문에 렌더링이 이 새로운 상태로 스냅 되거나 수정으로 인한 시각적 아티팩트를 줄이기 위해 다양한 형태의 보간, 오류 수정 및 평활화를 사용할 수 있습니다.

호스트 모드

호스트 모드에서 호스트는 서버와 클라이언트의 역할을 모두 수행합니다. 호스트에는 로컬 플레이어와 폴링 입력이 있으며 클라이언트의 예상대로 렌더링 시 보간 됩니다.

전체적으로 전용 서버 호스팅 비용이 발생하지 않기 때문에 실행하기에는 훨씬 저렴하지만 전용 서버와 동등합니다. 이 이점은 신뢰할 수 있는 권한을 잃는 대신 발생합니다. 즉, 악성 호스트가 속임수를 쓸 수 있습니다.

방화벽이나 라우터 뒤에서 호스트 모드를 실행할 때 Photon Cloud는 필요에 따라 UDP 펀치 쓰루나 패키지 릴레이를 투명하게 제공합니다,

세션은 호스트 소유이므로 호스트 연결이 끊어지면 손실됩니다. Fusion은 현재 호스트 연결이 끊어지면 새 클라이언트로 네트워크 권한을 전송할 수 있는 호스트 마이그레이션 메커니즘을 제공합니다. 이는 공유 모드와 달리 클라이언트 코드에서 특별한 처리가 필요합니다.

공유 모드

공유 모드에서 네트워크 객체에 대한 권한은 모든 클라이언트에게 분산됩니다. 구체적으로 각 클라이언트는 처음에 자신이 생성하는 객체에 대한 상태 권한을 갖지만 다른 클라이언트에게 해당 상태 권한을 자유롭게 해제할 수 있습니다. 선택적으로 클라이언트가 마음대로 상태 권한을 가져가도록 허용할 수도 있습니다.

공유 모드에서는 클라이언트 측 예측 및 롤백과 같은 기능을 사용할 수 없습니다. 시뮬레이션은 모든 클라이언트에서 항상 동일한 틱 속도로 전진합니다.

공유 모드 네트워크 세션은 Photon Cloud가 소유하며 어떤 클라이언트라도 Photon Cloud에 연결되어 있는 한 계속 유지됩니다. Photon Cloud는 패키지 릴레이 역할을 하며 유니티를 실행할 필요 없이 네트워크 상태에 완전히 액세스할 수 있으므로 전용 서버 하드웨어를 스핀 업할 필요 없이 경량 서버 로직 및 데이터 검증(예: 치트 보호)을 구현할 수 있습니다.

PUN(Photon Unity Networking)에서 온 사람들을 위해. 공유 모드는 더 많은 기능이 완전하고, 더 빠르며, 런타임 할당 오버헤드가 없지만 많은 면에서 PUN과 유사합니다.

비용

모든 모드에 동일한 CCU 비용이 적용됩니다. 연결 관리를 위해서는 서버와 클라이언트 모두가 항상 Photon Cloud에 연결되어야 합니다. 서버 모드에서는 클라우드 서비스나 자신의 하드웨어에 전용 서버를 호스팅 하기 위한 추가 비용이 발생합니다.

왜 Fusion인가요?

Fusion을 사용하는 것에 대해 여전히 확신이 서지 않습니까? 이 페이지를 읽어보고 Fusion을 Bolt와 PUN에서 사용하는 이유에 대해 자세히 알아보십시오.

Back to top