Photon Fusionは、Photon EngineがUnity向けに提供しているマルチプレイヤー用のネットワークSDKです。同じAPIのままShared・Host・Serverの3つの接続形態を選べる点が、旧来のPUN2との大きな違いです。この記事では、2026年9月時点の現行版Fusion 2.1.2を前提に、できることと動作要件、3モードの選び方、料金プラン、PUN2から移行するときに詰まりやすい点、Unityで最初のセッションを立ち上げるまでの流れを、公式ドキュメントの記述に沿って整理します。
まとめ:Fusion 2.1の採用判断とモード選定
- Photon Fusionは状態同期型のUnity向けネットワークライブラリで、クライアント側予測・ラグ補償・関心領域(AOI)を標準で持つ
- 現行の安定版はFusion SDK 2.1.2(2026年8月13日)。対応Unityは2021.3.45・2022.3.45・6.0.x・6.3.x
- モードは3つ。モバイルとWebGLはShared、2〜4人で物理の多いゲームはHost、チート対策を重視する競技系はServer
- Serverモードの専用サーバーはPhotonが提供しないため、ホスティング費は別にかかる
- 料金は開発用20CCUと、1アプリ限定の100CCUが無料。有料は100CCU・12か月95ドルの買い切り型プランがあり、月額契約は500CCU・月125ドルから(2026年9月時点・英語版料金ページ)
- PUN2はメンテナンス/LTS期に入っており、公式は新規プロジェクトにFusionかQuantumを勧めている
以下、それぞれの根拠と判断の分かれ目を順に説明します。
Photon Fusionの位置づけと現行バージョン
Fusionが標準で持つ同期の仕組み
公式ドキュメントはFusionを「Unity向けの高性能な状態同期ネットワークライブラリ」と説明しています。データ圧縮、クライアント側予測、ラグ補償の仕組みを備えています。ただしラグ補償はHost/Server限定で、有効化設定、Hitboxの構成、専用クエリによる判定が必要です。また、帯域を抑える圧縮アルゴリズムと、プレイヤー数が多い場面向けに設定可能な関心領域(Area of Interest)の仕組みを備えています。
書き味はMonoBehaviourに近く、同期したい値はプロパティに[Networked]属性、RPCはメソッドに[Rpc]属性を付けるだけで、シリアライズ処理を手で書く必要はありません。ネットワークオブジェクトはプレハブとして定義でき、ネストやバリアントもそのまま使えます。
「ECS(Entity Component System)」を名乗っているのは同じPhotonの別製品Quantumで、公式は決定論的なECSフレームワーク(最大128人)と説明しています。Fusionの設計はECSではありません。多人数の実例としては、Fusion 2の公式サンプルBR200が最大200人・ネットワークシミュレーション60Hzのバトルロイヤルとして公開されています。
SDKのバージョンと動作要件
公式のSDK配布ページには、2.1系が2.1.2(2026年8月13日)と2.1.1(2026年6月30日)、2.0系が2.0.12(2026年3月19日)まで並んでいます。2.0系から上げる場合は、先に2.0系の最新版へ更新してから2.1へ進むよう指定されています。
| 項目 | Fusion 2.1の要件 |
|---|---|
| AppId | Photon DashboardでFusion 2用に発行 |
| Unity | 2021.3.45 / 2022.3.45 / 6.0.x / 6.3.x |
| Asset Serialization | Force Text(必須) |
| PC | Windows 10・11、macOS |
| モバイル・XR | iOS、Android、visionOS |
| コンソール | PS4・PS5、Xbox One・Series X|S、Switch・Switch 2 |
| ブラウザ | WebGL |
Unity 6.3系で組む場合は、エディタ側の変更点をUnity 6.3 LTSの新機能と6.2からの主な変更点で先に確認しておくと、SDKの不具合とエディタの仕様変更を切り分けやすくなります。音声チャットを載せる場合、Voice 2.63はFusion 2.1用とFusion 2.0用で別パッケージになっており、互換性がない点にも注意が要ります。
3つのネットワークモードの違いと選び方
Fusionでは接続形態を「Mode」と呼び、Dedicated Server・Client Host・Shared Authorityの3つに加えて、ネットワークに接続しないSingle Playerモードがあります(公式のNetwork Topologies)。コードの書き方はServerとHostで共通、Sharedだけが権限の持ち方が異なります。
| モード | GameMode | 状態の権限 | ラグ補償 | サーバー費用 | 公式の推奨 |
|---|---|---|---|---|---|
| Shared | Shared | 各クライアントが分担 | なし | 不要 | カジュアル・多人数・モバイル・WebGL |
| Host | Host / Client | ホスト役のプレイヤー | あり | 不要 | 2〜4人・物理が多いゲーム |
| Server | Server / Client | 専用サーバー | あり | 自前で必要 | 多人数の競技系・永続ワールド |
| Single Player | Single | ローカル | ― | 不要 | オフライン動作 |
最初にどのモードで作るかを決める理由は、権限の持ち方がゲームロジックの書き方そのものを変えるからです。公式の移行ガイドも、PUNの知識がそのまま通じるのはSharedだけで、Host/Serverには当てはまらないと明記しています。
Sharedでは、各クライアントが自分でスポーンしたオブジェクトの状態権限(State Authority)を持ち、Photonクラウド上のルームが権限の移動と状態の完全なコピーを管理します。接続先はクラウドなので、プレイヤー同士のNAT越えは発生しません。
公式はモバイルの推奨モードをSharedとし、WebGLでも強く推奨しています。再シミュレーションを実行しない唯一のモードで、CPU負荷が低いことが理由です。一方、ティックレートは上限32Hzで、Fusion 2.0では32Hz/送信16Hzに固定されていました(2.1で32Hz以下なら変更可能)。
Host Mode:少人数で物理を多用するゲーム
プレイヤーの1人がサーバーとクライアントを兼ねます。サーバーのホスティング費はかかりませんが、ホストは任意の値を書き換えられるため、ホスト本人の不正は防げません。
接続はUDPのNATパンチスルーでホストへ直接つなぎ、失敗したプレイヤーだけがリレー経由になります。公式の目安では、リレーになるのはおよそ10人に1人です。ただしモバイル回線はパンチスルーの成功率が低く、ホストの離脱も多いため、公式はモバイルでのHostを特殊な用途以外は推奨していません。GameMode.AutoClientOrHostを使うと、ルームに最初に入ったプレイヤーが自動でホストになります。
Server Mode:不正対策を優先する競技系
Unityプロジェクトからヘッドレスのサーバービルドを作り、それが全オブジェクトの状態権限を持ちます。クライアントは入力の送信かRPCでしか状態を変えられないので、NetworkInputとNetworked Propertyを用い、入力やRPCの内容をサーバー側で検証する設計なら、クライアントのメモリ改ざんを権威あるゲーム状態に直接反映させずに済みます。公式が「残りうる」とするのはエイムボットとウォールハックで、後者は関心領域で緩和できます。
注意点は費用です。Photonは専用サーバーのホスティングを提供していません。セッションごとにUnityインスタンスを動かすサーバーを自社で運用するか、PlayFabのような外部のゲームサーバーホスティングを別契約で用意する必要があります。公式もモバイルでのServerは「ARPUの高いタイトル向け」としています。
手軽さからSharedで始めたくなりますが、次のどれかに当てはまるなら最初からHostかServerで設計したほうが作り直しを避けられます。
- 対戦結果にランキングや報酬が絡む:Sharedは各クライアントが自分のオブジェクトの値やRPCを自由に送れるため、追加の対策なしでは改ざんを防げない
- 遠距離の撃ち合いで当たり判定の公平性が要る:ラグ補償はServerとHostでしか使えない
- 32Hzを超えるティックレートが要る:Sharedは2.1でも32Hzが上限
Sharedでもサーバー側で検証を挟む手段として、2.1からShared Mode Custom Plugins(Photonサーバー上でコードを実行する機能)が追加されましたが、利用にはEnterprise Cloudの契約が必要です。費用と提供条件をPhotonへ確認したうえで採用を判断してください。
Photon Fusionの料金プランとCCUの考え方
課金の単位は同時接続数(CCU)で、プラン判定では各リージョンのピークCCUを合算します。以下はゲーム向けプランの2026年9月13日時点の英語版料金ページの表記で、日本円表示や改定は公式ページで確認してください。
| プラン | 料金 | CCU上限 | 月間トラフィック | 条件 |
|---|---|---|---|---|
| Development | 無料 | 20 | 60GB | 開発・非商用 |
| Free 100 CCU | 無料 | 100 | 0.3TB | 1顧客1アプリ |
| 100 CCU | 95ドル(12か月) | 100 | 0.3TB | 上限固定 |
| 500 CCU | 125ドル/月 | 500 | 1.5TB | CCUバースト込み |
| 1000 CCU | 250ドル/月 | 1,000 | 3.0TB | CCUバースト込み |
| 2000 CCU | 500ドル/月 | 2,000 | 6.0TB | CCUバースト込み |
含まれるトラフィックはピークCCU1あたり月3GBで計算されています。超えた分は、欧州・米国・カナダのリージョンが1GBあたり0.05ドル、アジア(日本を含む)やオーストラリアなどが0.10ドルです。このほか使用量課金のPremium Cloud(1CCUあたり0.50ドル、最低月額1,000ドル)と、個別見積もりのEnterprise Cloudがあります。
表の「上限固定」と「CCUバースト込み」は上限に達したときの挙動が違います。100CCUまでのプランでは上限を超えた接続がMaxCcuReachedで切断され、500CCU以上のプランは超過分をそのまま受け入れて次回の請求で超過料金になります。無料枠でリリースする場合は、この切断をゲーム側で受けて「混雑中」と案内する処理を用意しておく必要があります。
見積もりで抜けやすいのは2点です。Serverモードでは上の料金とは別に専用サーバーのホスティング費がかかること、そして日本向けタイトルは超過トラフィック単価が欧米の2倍になることです。無料の100CCUプランは公式の目安で月間アクティブユーザー約4万人規模とされていますが、ティックレートや同期するオブジェクト数で転送量は大きく変わるため、開発中に実測した1CCUあたりの転送量から逆算するのが確実です。
PUN2との違いと移行で詰まりやすい点
PUN2の現状と公式の推奨
PUN2のドキュメントには「メンテナンス/LTSモードであり、修正以外の機能追加は予定していない」と明記されています。既存のPUN2プロジェクトは引き続き動きますが、新規プロジェクトではFusionかQuantumを検討するよう案内されています。移行ガイドはPUNについて、プレイヤー数の増加、プレイヤー操作の正確な再現、権限の扱いといった現代的なマルチプレイの要件に対応しきれないと評価しています。
PUN2とFusionのAPI対応
公式の移行ガイド(Coming from PUN2)にある対応表のうち、書き換えの頻度が高いものを抜き出しました。
| PUN2 | Fusion 2 |
|---|---|
PhotonNetwork |
Runner / Object |
MonoBehaviourPunCallbacks |
SimulationBehaviour / NetworkBehaviour |
PhotonNetwork.Instantiate() |
Runner.Spawn() |
PhotonView |
NetworkObject |
OnPhotonSerializeView() |
自動実装プロパティと入力同期 |
PhotonTransformView |
NetworkTransform |
PhotonAnimatorView |
NetworkMecanimAnimator |
[PunRPC] |
[Rpc] |
PhotonNetwork.LoadLevel() |
Runner.LoadScene() |
PhotonNetwork.OfflineMode |
GameMode.Single |
この表はSharedモードへ移す際の概念・APIの対応であり、単純な名前の置換だけで移行できるわけではありません。PUNは全クライアントが共有するルームでの分散権限モデルしか持たないため、Host/Serverへ移るなら入力と状態権限の設計からやり直すことになります。
PUN2移行時の識別子・設定・コールバック・RPCの変更
- プレイヤー番号の振り方:PUN2向け移行ガイドには「
PlayerRefは0からMaxPlayers - 1、ホストはMaxPlayers - 1」とあるが、これはFusion 1の仕様。Fusion 2では接続ごとに固有の値が振られて退出者の値は再利用されず、ホストは1になる(Fusion 1からの移行資料に明記)。番号がMaxPlayers未満に収まる前提で配列の添字やチーム分けに使うと壊れる - 設定ファイルの分割:PUNの
PhotonServerSettingsに相当する内容が、接続情報のPhotonAppSettingsと、ティックレートや最大人数などを持つNetworkProjectConfigに分かれる - コールバックの登録:
PhotonNetwork.AddCallbackTarget(this)に相当する登録は、Network RunnerのGameObject(とその子)に付けたコンポーネントならStartGame時に自動で行われる。セッション単位はINetworkRunnerCallbacks、オブジェクト単位はNetworkBehaviourのSpawnedなどで受け取る - RPCのサイズ:Fusion 2.0までRPCは512バイトが上限。2.1では
RpcChannel.ReliableLargeDataで超えられるが、ティック精度と順序は保証されない
Fusion 2.1の同期・物理・通信制御の変更
2.0から2.1への更新で、実装判断に影響する変更は次のとおりです。
- ティックレート:8Hz〜256Hzの任意値を指定可能に(2.0は選択肢が限定)。送信レートはティックレートを割り切れる範囲で1/8まで下げられる
- Forecast Physics:物理の完全な予測をせず外挿で各プレイヤーのローカル時間に物理オブジェクトを置く方式。Host・Server・Sharedで使え、CPU負荷を大きく抑えられる
- Object Send Priority:オブジェクトごとに送信頻度を下げられる。
NetworkObject.SetPriority(player, 2)なら送信ティック2回に1回 - SharedのAOI設定:2.0で32ユニット固定だったセルサイズとグリッドを
NetworkProjectConfigで変更可能に - 入力遅延:Server/Hostで入力遅延を加え、高遅延時の再シミュレーション回数を抑えられる(既定は無効)
- マスタークライアントの再割り当て要求:応答しないが切断もされていないマスタークライアントを、他のクライアントが
RequestMasterClientReassign()で交代させられる。既定のしきい値は2秒
最後の機能は、しきい値を0にすると応答中のマスターも誰でも奪えるようになり、公式も悪意あるクライアントによるセッション乗っ取りに悪用されうると警告しています。有効にする場合は0にしないことが前提です。SDKの更新手順は、プロジェクトをバックアップしてPhotonフォルダを削除し、新しいパッケージをインポートしたあと、NetworkProjectConfig.fusionとPhotonAppSettings.assetの変更を元に戻す流れです。
Unityでの始め方:AppId発行から最初のセッションまで
Fusion SDKのインポートとAppId・シーンの設定
- Photon DashboardでFusion 2用のAppIdを発行する
- SDK配布ページからFusion SDK 2.1.2のパッケージを取得し、対応バージョンのUnityプロジェクトへインポートする
- Project Settings > Editor > Asset SerializationのModeをForce Textにする
- Fusion HubでAppIdを設定する(
PhotonAppSettingsに保存される) - Sharedなら、Hierarchyの右クリックメニューからFusion > Scene > Setup Networking in Sceneを選び、Prototype RunnerとPrototype Network Startを追加する
Unityのエディタを日本語表示で使っている場合、メニュー名が英語の手順書と一致しません。Unityの日本語化とエディタ言語設定の手順を参考に、導入中だけ英語表示へ戻しておくと迷いません。
Host/Serverでセッションを開始するコード
Host/Serverでは、NetworkRunnerのStartGameをコードから呼びます。公式チュートリアル(Host Mode Basics)のコードを抜粋します。MonoBehaviourを継承したクラス(チュートリアルではBasicSpawner)の中に置くフィールドとメソッドで、Fusion・UnityEngine・UnityEngine.SceneManagementのusingが必要です。シーンはBuild Settingsに登録しておきます。原典はScene = sceneですが、直前で組み立てたsceneInfoを渡すよう1行だけ変えています。
private NetworkRunner _runner;
async void StartGame(GameMode mode)
{
// Create the Fusion runner and let it know that we will be providing user input
_runner = gameObject.AddComponent<NetworkRunner>();
_runner.ProvideInput = true;
// Create the NetworkSceneInfo from the current scene
var scene = SceneRef.FromIndex(SceneManager.GetActiveScene().buildIndex);
var sceneInfo = new NetworkSceneInfo();
if (scene.IsValid)
{
sceneInfo.AddSceneRef(scene, LoadSceneMode.Additive);
}
// Start or join (depends on gamemode) a session with a specific name
await _runner.StartGame(new StartGameArgs()
{
GameMode = mode,
SessionName = "TestRoom",
Scene = sceneInfo,
SceneManager = gameObject.AddComponent<NetworkSceneManagerDefault>()
});
}
チュートリアルでは、このメソッドをOnGUIのボタンからGameMode.Host(ホストとして開始)とGameMode.Client(参加)で呼び分けます。同じコードのGameModeをServerに変えれば専用サーバーとして起動でき、ServerとHostでプログラムの書き方が共通という前述の説明はこの部分を指しています。
Sharedでは各クライアントが自分のアバターを自分でスポーンし、そのオブジェクトの状態権限を持ちます。公式チュートリアル(Shared Mode Basics)のスポーン処理です。PlayerSpawnerをPrototype Runnerと同じGameObjectに追加し、NetworkObjectを付けたプレハブをPlayerPrefabに割り当てます。位置も同期する場合はプレハブにNetworkTransformを追加します。再生後にStart Shared Clientを選ぶと、各参加者のアバターが生成されます。
using Fusion;
using UnityEngine;
public class PlayerSpawner : SimulationBehaviour, IPlayerJoined
{
public GameObject PlayerPrefab;
void IPlayerJoined.PlayerJoined(PlayerRef player)
{
if (player == Runner.LocalPlayer)
{
Runner.Spawn(PlayerPrefab, new Vector3(0, 1, 0), Quaternion.identity);
}
}
}
player == Runner.LocalPlayerの判定がSharedの権限モデルを表しています。この条件を外すと、誰かが入室するたびに全クライアントがアバターを生成してしまいます。
よくある質問
Photon Fusionは無料で使えますか?
開発中は20CCUまでの開発専用プランが無料です。リリース後も1顧客1アプリに限り、100CCUまでのプランを無料で使えます(2026年9月時点の料金ページ)。Serverモードの専用サーバー費用はこれとは別です。
Fusion 2.0のプロジェクトはそのまま2.1に上げられますか?
公式は、先に2.0系の最新版(2026年9月時点で2.0.12)へ更新してから2.1へ上げるよう指定しています。音声チャットのVoiceパッケージは2.0用と2.1用で互換性がないため、あわせて差し替えが必要です。
Host Modeはプレイヤー同士のP2P接続ですか?
ホストへの直接接続をNATパンチスルーで試み、失敗したプレイヤーはPhotonのリレー経由でつながります。公式の目安では、リレーになるのはおよそ10人に1人です。モバイル回線ではリレーになる割合が上がります。
専用サーバーはPhotonが用意してくれますか?
用意されません。公式ドキュメントに、Fusionの専用サーバーアプリケーションをホストするサーバーはPhotonが提供しないと明記されています。自社運用か外部のホスティングサービスを使います。
PUN2のプロジェクトは使い続けても大丈夫ですか?
既存のPUN2プロジェクトは引き続き動作します。ただしメンテナンス/LTS期のため修正以外の機能追加は予定されておらず、新規開発では公式もFusionかQuantumを勧めています。