Fusionイントロダクション
概要
Fusionは、Unityのための新しい高パフォーマンスな状態同期ネットワークライブラリです。単一のAPIで、専用サーバー、クライアントホスト型、共有/分散権限など、様々なネットワークアーキテクチャに対応します。
「シンプルさ」を大切に構築しており、Unityの代表的なワークフローとシームレスに統合できます。また 、データ圧縮、クライアント側予測、遅延補正等をアドバンスト機能もデフォルトで搭載しているため、さまざまなユースケースに対応します。
Fusionでは、内蔵された調整機能を備えた、ティックベースのシミュレーションと状態スナップショットシステムを実装しています。これにより、FusionはUnity PhysXのような非決定論的なライブラリとシームレスに連携することができます。
クラウドベースの共有(Shared)モード(以前のPUNのように各クライアントが自分のオブジェクトの全権限を持つ)の他に、Fusionには2つの完全なサーバー権限モードがあります。
- 専用のヘッドレスUnityインスタンスを用いた厳密なクライアント/サーバー設定、または
- クライアントの1つがサーバーとクライアント(ホスト)の両方の役割を果たす「Player-as-host」。
PUN、Bolt、Fusionの比較
PUNとBoltは堅実なネットワーキング・ソリューションですが、そのアーキテクチャではさらなる最適化ができません。Fusionは、PUNとBoltの優れたコンセプトをすべて融合させるとともに、高性能なアーキテクチャーを一から構築し、最先端の機能をすぐに利用できるようにしました。次の図は、その改良点をまとめたものです。
最先端機能
Fusionでは、最新の機能がベースSDKに直接盛り込まれています。
- Delta Snapshot と Eventual Consistency の状態転送モードです。Fusionは、a)圧縮された完全な状態(CPU負荷が非常に低い新しい独自のデルタ圧縮技術を使用)、またはb)制御されたチャンクでの状態変更(最終的な一貫性)のいずれかを転送することができます。このモードでは、すべてのインタレスト管理バリエーションも有効です。
- クライアント側の予測とサーバー側の調整:内部のネイティブデータバッファを使用することで、Unityが保持するデータはレンダリングのために常に滑らかに保たれ、調整と補間は自動的に(またはカスタムで)処理されます。
- 遅延補正:簡単に設定できるヒットボックスと、遅延補正された包括的なクエリAPIを組み合わせたもの。同期したアニメーションと組み合わせることで、ティックまたはサブティック精度の対戦用シューティングメカニクスを実現します。
- RPC: 高パフォーマンスRPCは、FusionのAPIのファーストクラスのコンセプトです。
- UnityMonoBehaviours用に作成: ゲームの状態は、Unityのビヘイビアの一部として完全に定義されています。シリアライズやその他の複雑なコードを書く必要はありません。ネスティングやバリアントなど、Unityの最新のプレハブ機能のすべてに対応しています。
1つのライブラリで多くのアーキテクチャ
FUSIONは2つの既存のPhotonステート転送製品(Bolt及びPUN)に置き換わるものとして開発されました。これらの製品が対応している全アーキテクチャに新機能が加えられています。
- シングルプレイヤー:同じコードでローカルに。接続は不要。
- 専用サーバー:完全なサーバー権限でUnityヘッドレスインスタンスを展開します。
- クライアントホスト型: プレイヤーがホストする server + clientで、パンチスルー、フォールバックとしてのリレー、完全なホスト移行が組み込まれています(Photon Cloudがサポート)。
- 共有モード: Photon Cloudに対するクライアントの権限は、データに基づいてサーバーが管理するスナップショットで、「Eventual Consistency」(EC)と関心事の管理(「AoI」:Area of Interest)を使用しており、高いプレイヤー数にも対応しています。
- カスタムサーバーと共有モード。FusionのPhoton Serverプラグインは、Unityがなくてもゲーム状態に完全にアクセスできます。軽いサーバーのゲームロジックを書くことは、難しくありません。
プレハブ
Fusionはすぐに使えるUnityの最新プレハブ機能のほぼすべてに対応しています:
- Prefab Variants(プレハブ変数)
- Nested Prefabs(ネスト状のプレハブ)
- Nested Networked Objects (非プレハブ) (ネスト状のネットワークオブジェクト)