Fusion Unreal とは?

Topology
SHARED AUTHORITY

概要

Photon Fusion Unrealは、Unreal Engine 5.4以降に対応したスケーラブルなマルチプレイヤーネットワーキングSDKです。ルームベースのマッチメイキング・途中参加者用スナップショットを備えた自動的なプロパティのレプリケーション・共有権限ターゲット機能を備えたカスタムRPC・インタレストマネジメント・UnrealのChaos Physicsと直接統合されている分散型物理演算予測モジュールForecastなどを提供します。

Fusionは、数千のタイトルを支えた実績のあるインフラストラクチャのPhoton Cloud上で動作します。Photonがホスティング・スケーリング・グローバルリージョンのルーティングを管理するため、サーバーの管理やメンテナンスは不要です。料金体系はCCUベースで、開発用の無料プランも用意されています。プランなどの詳細は、Pricingをご覧ください。

Fusionは、Unreal Engineのインスタンスがサーバーとして振る舞わないという点ではサーバーレスと言えますが、P2Pでもありません。各セッションはルーム(Photon Cloud上のステートフルサービス)内に存在し、ルーム全体の共有状態が保持され、プロパティの更新やRPCが関連するクライアントに複製されます。ゲームプレイのシミュレーションは、以降のセクションで説明する共有権限モデルのもと、クライアント上で実行されます。

Unreal標準ネットコードとの違い

Unreal標準ネットコードはクライアントサーバーモデルを採用していて、専用サーバー(サードパーティーのインフラ上で動作するヘッドレスUnrealビルド)またはリッスンサーバー(試合のホストを兼任する通常のクライアント)の2つのトポロジーのいずれかで動作します。どちらの場合でも、単一インスタンスがワールド全体のROLE_Authorityを保持し、他すべてのクライアントは、自身が制御するポーンはROLE_AutonomousProxy、それ以外はROLE_SimulatedProxyを実行します。AGameModeAuthority上のみで存在し、RPCはServer/Client/NetMulticastマークアップ経由でルーティングされます。

Fusion Unrealは、この単一の信頼ソースを共有権限に置き換えています。複製されたすべてのアクタには所有者がいて、その所有者(通常のゲームクライアント)がアクタのローカル権限者となります。ワールド全体を管理する単一のROLE_Authorityは存在しません。Photon Cloud上のルームは共有状態を保持し、関連するクライアントに更新情報を複製しますが、ゲームプレイのシミュレーションは行いません。

ルーム内のクライアントの1人は、マスタークライアントに選ばれます。マスタークライアントはサーバーではないため、追加のシミュレーションを実行することはありませんが、マップ変更やGameState更新などのルーム全体に対する決定権を持ちます。マスタークライアントがルームから退出すると、Photonは自動的に別のクライアントをマスタークライアントに昇格させます。具体的な影響については、ゲームクラスをご覧ください。

各トポロジーは、それぞれ適したゲームジャンルが異なります。専用サーバーは最も強力にチート対策を実行できますが、ホスティング費用や運用上の大きな負担(オーケストレーション・モニタリング・リージョン展開)が伴うため、競技性の高いタイトルでのみで推奨されます。リッスンサーバーはホスティング費用を節約できますが、ホストプレイヤーの端末が単一障害点となり、遅延・稼働時間・地域的なカバー範囲などがホストに依存し、切断・クラッシュ・バックグラウンド移行が発生すると、全員のセッションが終了してしまいます。共有権限なら、これらのリスクは一切ありません。Photon Cloudが21以上のリージョン・DDoS対策・SLA稼働率を管理し、セッションごとの運用費はF2P(基本無料)で提供できるほど低く抑えられます。ただしトレードオフとして、チート耐性は低下します。各クライアントが自身の状態を書き込めるため、ランク制の対戦PvPには依然として専用サーバーが必要になりますが、協力プレイ・カジュアルゲーム・パーティーゲーム・サンドボックス・ソーシャルスペース・永続的ワールド・モバイル・Web・XRなどの分野で共有権限が真価を発揮します。

  Fusion Host Dedicated
基本無料・モバイル・XR・Web クロスプレイ可能 PC/コンソールのみ クロスプレイ可能
コスト 低い + スケーラブル SteamやEOSでは「無料」 高い(10~50倍)
運用 シンプル リレー接続、マッチメイキングやSLAを考慮 高度
権限 分散型、サーバーコード 制御不可能なクライアント サーバーシミュレーション
ホストマイグレーション 不要 ホスト切断でセッション終了 不要
サービス品質(QoS) 21以上のリージョン・DDoS対策・SLA 制御不可能 オーケストレーション

エンジン優先のインテグレーション

Fusion UnrealはUnrealプラグインとして提供されます。プロジェクトのPlugins/フォルダーに配置し、プロジェクトファイルを再生成すると、すぐに開発を開始できます。エンジンのforkやカスタムツールチェインは不要です。

通常のケースでは、Unreal既存のレプリケーションのセマンティクスが引き継がれます。Replicated/ReplicatedUsing=OnRep_Xにマークされたプロパティは、Fusionを通じて既知の挙動で複製されます。FusionがサポートするUPROPERTY条件やライフタイムフラグの詳細については、マニュアルをご覧ください。

C++

UPROPERTY(ReplicatedUsing = OnRep_Health)
int32 Health = 100;

UFUNCTION()
void OnRep_Health();
変数の複製(ブループリントのRepNotify関数)
変数の複製(ブループリントのRepNotify関数)

特別な基底クラスは存在しません。アクタ・コンポーネント・プロパティの複製は、C++ またはブループリントから定義できます。ゲームプレイコードは C++ とブループリントの両方で、通常のUEのTick()から実行され、Unreal Engine機能の大部分がそのまま動作します。

Fusionが明確に異なる点は、RPCのターゲット指定です。一般的なサーバーが存在せず、アクタごとに所有権があり実行時に変更される可能性があるような環境では、標準の3つのオプション(ServerClientNetMulticast)は適切に機能しません。Fusionでは、カスタムブループリントノードまたは C++ のSEND_FUSIONRPCマクロとして公開されている明示的なターゲットオプションとして、OwnerMaster ClientAllEveryone Elseを追加しています。標準のRPCノードもコンパイル可能で、その挙動についてはRPC 基礎をご覧ください。

Forecast:物理演算予測

Fusion Unrealには、UnrealのChaos Physicsと直接統合されている分散型物理演算予測モジュール「Forecast」が搭載さされています。Simulate Physicsが有効になっているアクタが複製される場合、各クライアント上でローカルに予測が行われ、次の正しい更新が到着した際に微調整されます。ネットワーク更新頻度が20~30Hzでも、レンダリングレートに合わせてスムーズなモーションが行われます。

Players interacting with a physics-based object under Forecast
Players interacting with a physics-based object under Forecast

Simulate Physicsが有効なアクタの複製では、自動的にForecastが機能します。ACharacterを継承したアクタはUnreal標準のキャラクターネットワーキングに依存し、他の複製されるプロパティは補間なしで更新されます。アクタごとのForecastの調整は、Fusion Actor ComponentFusion|Forecast Physicsカテゴリから、スプリング・減衰・エラーしきい値・外挿しきい値などが設定可能で、デフォルト値はインタラクティブな小道具や乗り物に最適化されています。

次のステップ

Back to top