fusion | v2 switch to V1  

Fusion Introduction

## 概要

Fusion 1.1から2.0への変更点一覧はこちらをご覧ください

Fusionは、Unity用の新しい高性能ステート同期ネットワーキングライブラリです。Fusionは、一般的なUnityのワークフローに自然に統合できるよう、シンプルさを念頭に構築されており、データ圧縮、クライアント側の予測、ラグ補正などの高度な機能もすぐに利用できます。

その裏側で、FusionはCPUのオーバーヘッドを最小限に抑えながら帯域幅の要件を削減する最先端の圧縮アルゴリズムに依存しています。データは部分的なチャンクとして転送され、最終的な一貫性を保ちます。プレイヤー数が非常に多い場合にも対応できるよう、完全に設定可能な関心領域システムが提供されています。

Fusion APIは、通常のUnity MonoBehaviourコードと同様に設計されています。例えば、RPCやネットワークの状態は、MonoBehaviourのメソッドやプロパティのアトリビュートで定義され、明示的なシリアライゼーションコードは必要ありません。

Inputs、Networked Properties、RPCは、Fusionでゲームプレイコードを書くための基礎となります。

Overview of the Core Fusion APIs
Core Fusion APIの概要

FusionでNetworked Propertyを使用:

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

クライアント側の予測移動にネットワーク入力を使用します:

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)を宣言します:

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

適切なモードの選択

Fusionは、同じAPIで2つの異なるネットワークトポロジーに対応しています。

Fusionを使い始める際に最初に行うのは、Server/HostモードとSharedモードのどちらかを選択することです。

Quadrantをご覧いただくことは、どのモードがアプリケーションに適しているかを判断するための良い出発点となります。

The Quadrant

フルサイズ

チュートリアル

使用するモードの見当がついたら、さっそくチュートリアルを始めましょう。まだモードの判断ができなければ、モードについて詳しく知るためにもう少し読み進めましょう。

Sharedモードの基本

Host(Server)モードの基本

トポロジーの違い

Fusion Network Topologies
Fusion Networkトポロジー

Serverモード

Serverモードでは、サーバーは例外なく全てのオブジェクトに対して完全かつ排他的なステート権限を持ちます。

クライアントは、サーバーに入力を送るか(サーバーがその入力に反応するか)、RPCを使って変更をリクエストすることでしか、ネットワーク上のオブジェクトを変更することができません。

サーバーアプリケーションはUnityプロジェクトからビルドされ、フルヘッドレスUnityビルドを実行します。このヘッドレスビルドは、サーバーマシンまたはクラウドホスティングサーバーでホストする必要があります。Photonは、専用のフュージョンサーバアプリケーションをホスティングするためのサーバーを提供していません。

クライアントサイド予測

Client Side Predictionは、人気のあるマルチプレイヤーアーキテクチャで、サーバーからの確認を受け取る前に、クライアントが自身の入力を使って動きを予測します。これにより、ゲームプレイがより軽快になり、レイテンシーを隠すことができます。

FusionのServerモードでは、クライアントがネットワーク上の状態に直接変更を加えることはローカル予測に過ぎず、サーバーからのスナップショットを受信した際に、そのスナップショットが上書きされます。これはリコンシリエーション(調整)と呼ばれ、クライアントはサーバーから提供された状態にロールバックされ、ローカルの(予測された)ティックまで再シミュレーションされます。

以前の予測が正確だった場合、このプロセスはシームレスに行われます。正確でなかった場合、ステートは更新され、ネットワーク状態はレンダリング状態から分離されているため、レンダリングはこの新しい状態にスナップするか、さまざまな形式の補間、エラー修正、および修正によって生じる視覚的なアーチファクトを低減するためのスムージングを使用します。

Hostモード

Hostモードでは、ホストはサーバーとクライアントの両方の役割を果たします。ホストはローカルプレーヤーを持ち、そのために入力をポーリングし、クライアントに期待されるようにレンダリング時に補間します。

全体的に、このモードは専用サーバーと同等ですが、専用サーバーのホスティングコストが発生しないため、運用コストははるかに安くなります。この利点は、信頼できる権威を失うという犠牲を伴うものです。言い換えれば、不正なホストが不正を働く可能性があるということです。

ファイアウォールやルーターの後ろからホストモードを実行する場合、Photonクラウドは必要に応じてUDPパンチスルーやパッケージリレーを透過的に提供します。

セッションはホストが所有するため、ホストが切断するとセッションは失われます。Fusionは、現在のホストが切断された場合に新しいクライアントにネットワーク権限を移行するためのホストマイグレーションメカニズムを提供しています。Sharedモードとは異なり、クライアントコードで特別な処理が必要であることに注意してください。

Sharedモード

Sharedモードでは、ネットワーク・オブジェクトに対する権限はすべてのクライアントに分散されます。具体的には、各クライアントは自分がスポーンしたオブジェクトに対するステート権限を最初に持ちますが、そのステート権限を他のクライアントに自由に解放できます。オプションとして、クライアントは自由にステート権限を取得することができます。

Sharedモードでは、クライアント側の予測やロールバックなどの機能は使用できません。シミュレーションは常にすべてのクライアントで同じティックレートで進みます。

SharedモードのネットワークセッションはPhotonクラウドによって所有され、クライアントが接続されている限り生き続けます。Photonクラウドはパッケージリレーの役割を果たし、Unityを実行することなくネットワーク状態にフルアクセスできるため、専用のサーバーハードウェアを立ち上げることなく、軽量なサーバーロジックやデータ検証(チート防止など)を実装できます。

Photon Unity Networking (PUN)からFusionへ移行した方へ。 Sharedモードは多くの点でPUNに似ていますが、より機能が充実し、高速で、ランタイムアロケーションのオーバーヘッドがありません。

コスト

すべてのモードで同じCCUコストが適用されます。サーバーとクライアントは、接続管理のために常にPhoton Cloudに接続する必要があります。Serverモードでは、クラウドサービスや独自のハードウェアで専用サーバーをホスティングするための追加コストが発生します。

Fusionを選ぶ理由

まだFusionを使用する決心がつきませんか?こちらのページでBoltでもPUNでもなくFusionを使用する利用についてご覧ください。

ドキュメントのトップへ戻る