---
title: "Photon Fusionとは？Fusion 2.1の3モードの違い・料金試算・PUN2からの移行【2026年10月】"
url: "https://www.issoh.co.jp/tech/details/6888/"
published: 2025-05-23
updated: 2026-10-26
categories: ["シミュレーション"]
publisher: "株式会社一創"
---

# Photon Fusionとは？Fusion 2.1の3モードの違い・料金試算・PUN2からの移行【2026年10月】

Photon Fusion（フュージョン）は、Photon EngineがUnity向けに提供しているマルチプレイヤー用のネットワークSDKです。同じAPIのままShared・Host・Serverの3つの接続形態を選べる点が、旧来のPUN2との大きな違いです。この記事では、2026年10月時点の現行版Fusion 2.1.3を前提に、動作要件、3モードの選び方、同期手段の使い分け、料金の試算、PUN2や他のネットワークライブラリとの違い、Unityで最初のセッションを立ち上げるまでを、公式ドキュメントの記述に沿って整理します。

## まとめ：Fusion 2.1の採用判断とモード選定

- Fusionは状態同期型のUnity向けネットワークライブラリで、クライアント側予測・ラグ補償・関心領域（AOI）を標準で持つ
- 現行の安定版は**Fusion SDK 2.1.3（2026年9月17日）**。対応Unityは2021.3.45・2022.3.45・6.0.x・6.3.x
- モバイルとWebGLはShared、2〜4人で物理の多いゲームはHost、不正対策を重視する競技系はServer。Serverの専用サーバーはPhotonが提供しない
- 料金は開発用20CCUと1アプリ限定の100CCUが無料で、95ドルの12か月プランを重ねると200CCUまで広がる。月額は500CCU・125ドルから（英語版料金ページ）
- CCUはリージョンごとのピークの合算で数え、転送量の超過単価は日本を含むアジアが欧米の2倍。日本リージョンで月2.75TBを超えるなら、500CCU未満でも1000CCUプランのほうが安い
- PUN2はメンテナンス／LTS期で、新規開発ならFusionかQuantum。Unreal Engine・Godot向けのFusion 3はまだプレビュー版

以下、それぞれの根拠と判断の分かれ目を順に説明します。

## Photon Fusionの位置づけと現行バージョン

### Photon製品群の役割とFusionの位置づけ

「Photon」で検索すると複数の製品が並びますが、役割は分かれています。コードに`PhotonNetwork`クラスが出てくるのはPUN2で、Fusionでは`NetworkRunner`が入口になります。

| 製品         | 対象                  | 役割                       | 状態（2026年10月）           |
| ---------- | ------------------- | ------------------------ | ---------------------- |
| Fusion 2   | Unity               | 状態同期（Shared／Host／Server） | 安定版2.1.3               |
| Fusion 3   | Unreal Engine・Godot | 状態同期                     | プレビュー                  |
| Quantum    | Unity               | 決定論的シミュレーション             | 現行                     |
| PUN 2      | Unity               | 旧来のルーム型同期                | メンテナンス／LTS             |
| Realtime   | C#ほか                | ルーム・マッチメイキングの基盤          | Fusion 2.1.3は5.1.20を同梱 |
| Voice・Chat | 各エンジン               | 音声・テキスト                  | Voice 2.64             |

ECS（Entity Component System）を採っているのはQuantumで、FusionはECSではありません。

### Fusionが標準で持つ同期の仕組み

[公式の導入ページ](https://doc.photonengine.com/fusion/v2/fusion-intro)はFusionを「Unity向けの高性能な状態同期ネットワークライブラリ」と説明し、データ圧縮、クライアント側予測、ラグ補償を標準で備えるとしています。ラグ補償はHost／Server限定で、Hitboxの構成と専用クエリが別途要ります。

状態の転送は変化した部分だけを送る方式で、既定では1つのNetworkObjectの`[Networked]`プロパティがすべて同じティックで届く「Full Consistency」になっています。`SimulationConfig.ObjectDataConsistency`を`Eventual`にすると、プロパティごとに別のティックで届く代わりに帯域を減らせます。関心領域（Interest Management）で送る相手を絞る仕組みもあり、公式サンプルBR200は最大200人・60Hzのバトルロイヤルです。

### SDKのバージョンと動作要件

[公式のSDK配布ページ](https://doc.photonengine.com/fusion/v2/getting-started/sdk-download)には、2.1系が2.1.3（2026年9月17日）・2.1.2（8月13日）・2.1.1（6月30日）、2.0系が2.0.13（9月16日）まで並んでいます。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の新機能と変更点](/tech/details/10417/)で先に確認しておくと、SDKの不具合とエディタの仕様変更を切り分けやすくなります。音声チャットのVoice 2.64はFusion 2.1用（Realtime 5版）とFusion 2.0用で別パッケージで、互換性はありません。

### 2.1系で変わった点（2.1.3まで）

2.0から2.1への更新と、2026年9月の2.1.3で入った変更のうち、設計に影響するものです（[2.1のリリースノート](https://doc.photonengine.com/fusion/v2/getting-started/release-notes/release-notes-2-1)）。

- **ティックレート**：Host／Serverでは8Hz〜256Hzの任意値に。Sharedの上限は32Hz。送信レートはティックレートを割り切れる範囲で1/8まで下げられる
- **Forecast Physics**：物理を完全には予測せず、外挿で各プレイヤーのローカル時間に置く方式。2.1.3でデッドゾーン内の挙動を`Local Physics`と`Match Target`から選べるようになった
- **送信の間引き**：`NetworkObject.SetPriority(player, 2)`なら送信ティック2回に1回
- **権限の一括移動（2.1.3）**：`BatchRequestStateAuthority`（要求）と`BatchReleaseStateAuthority`（解放）で、最大16個のNetworkObjectの状態権限を全部成功か全部失敗の1回の呼び出しで扱える
- **マスタークライアントの交代**：応答しないマスターを`RequestMasterClientReassign()`で交代させられる。しきい値を0にすると応答中のマスターも奪えるため、公式はセッション乗っ取りに悪用されうると警告している

2.1.3では同時に読み込めるシーン数が8から31に増え、`[Networked]`な文字列の`Capacity(30)`に28文字しか入らなかった不具合も直りました。

### Fusion 3（Unreal Engine・Godot版）の状況

Unity向けのFusion 2とは別に、Fusion 3としてUnreal Engine版とGodot版が公開されています。Unreal版3.0.0はUE 5.4〜5.8向けで、配布ページの最新ビルドは2026年10月12日付です。Godot版3.0.0はGodot 4.6以降向けです。どちらも[配布ページ](https://doc.photonengine.com/fusion-unreal/v3/getting-started/sdk-download)で「プレビュー」とされ、リリースするゲームには使わないよう明記されています。AppIdもFusion 3用が別に要ります。

## 3つのネットワークモードの違いと選び方

Fusionでは接続形態を「Mode」と呼び、Dedicated Server・Client Host・Shared Authorityの3つに加えて、ネットワークに接続しないSingle Playerモードがあります（[公式のNetwork Topologies](https://doc.photonengine.com/fusion/v2/manual/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 Mode：モバイルとWebGLの第一候補

Sharedでは、各クライアントが自分でスポーンしたオブジェクトの状態権限（State Authority）を持ち、Photonクラウド上のルームが権限の移動と状態の完全なコピーを管理します。接続先はクラウドなので、プレイヤー同士のNAT越えは発生しません。

公式はモバイルの推奨モードをSharedとし、WebGLでも強く推奨しています。再シミュレーションを実行しない唯一のモードで、CPU負荷が低いことが理由です。ブラウザ向けの書き出しは[WebGLの仕組みとUnity WebGLビルドの手順](/tech/details/4884/)も参考になります。

### Host Mode：少人数で物理を多用するゲーム

プレイヤーの1人がサーバーとクライアントを兼ねます。サーバーのホスティング費はかかりませんが、ホストは任意の値を書き換えられるため、ホスト本人の不正は防げません。

接続はUDPのNATパンチスルーでホストへ直接つなぎ、失敗したプレイヤーだけがリレー経由になります。公式の目安では、リレーになるのはおよそ10人に1人です。モバイル回線はパンチスルーの成功率が低くホストの離脱も多いため、公式はモバイルでのHostを特殊な用途以外は推奨していません。`GameMode.AutoClientOrHost`なら最初の入室者が自動でホストになります。

### Server Mode：不正対策を優先する競技系

Unityプロジェクトからヘッドレスのサーバービルドを作り、それが全オブジェクトの状態権限を持ちます。クライアントは入力の送信かRPCでしか状態を変えられないので、入力やRPCの内容をサーバー側で検証する設計にすれば、クライアントのメモリ改ざんを権威あるゲーム状態へ直接反映させずに済みます。公式が「残りうる」とするのはエイムボットとウォールハックで、後者は関心領域で緩和できます。

注意点は費用です。**Photonは専用サーバーのホスティングを提供していません**。セッションごとにUnityインスタンスを動かすサーバーを自社で運用するか、[PlayFab](/tech/details/4904/)のような外部のゲームサーバーホスティングを別契約で用意します。公式もモバイルでのServerは「ARPUの高いタイトル向け」としています。

### Sharedを選ぶべきでない条件

手軽さからSharedで始めたくなりますが、次に当てはまるなら最初からHostかServerで設計したほうが作り直しを避けられます。

- 対戦結果にランキングや報酬が絡む：Sharedは各クライアントが自分のオブジェクトの値やRPCを自由に送れるため、追加の対策なしでは改ざんを防げない。Hostもホスト本人の不正は防げないので、この条件ならServerを選ぶ
- 遠距離の撃ち合いで当たり判定の公平性が要る：ラグ補償はServerとHostでしか使えない
- 32Hzを超えるティックレートが要る：Sharedは2.1でもティックレートと送信レートの上限が32Hz

Sharedでもサーバー側で検証を挟む手段として、2.1からShared Mode Custom Plugins（Photonサーバー上でコードを実行する機能）が追加されましたが、利用にはEnterprise Cloudの契約が必要です。

## 同期手段の使い分け：Networked Property・RPC・Input・Data Streaming

Fusionでピア間にデータを送る方法は4つあります（[公式のData Transfer](https://doc.photonengine.com/fusion/v2/manual/data-transfer/data-transfer)）。最初に決めておくべきなのは「その値は状態か、出来事か」です。

| 手段                 | 向く用途               | 配送          | 使えるモード        |
| ------------------ | ------------------ | ----------- | ------------- |
| Networked Property | 体力・スコアなど続く状態       | 変化分を自動で複製   | 全モード          |
| RPC                | 扉を開ける・チャットなど単発の出来事 | 既定はReliable | 全モード          |
| Player Input       | 移動・射撃など毎ティックの操作    | Unreliable  | Host／Serverのみ |
| Data Streaming     | 作成したマップなど大きなバイト列   | 分割して再組立て    | 全モード          |

使い分けで一番効くのは[RPCのページ](https://doc.photonengine.com/fusion/v2/manual/data-transfer/rpcs)にある注意です。RPCは状態を持たないため、途中参加したプレイヤーや再接続したプレイヤーには届きません。チャットのように消えてよいもの以外は、RPCを受けた側が`[Networked]`プロパティに結果を書き残す形にします。RPCのメソッド名は「RPC」で始めるか終えるかが必須で、通常のチャネルは512バイトまでです。2.1の`RpcChannel.ReliableLargeData`は上限を超えられますが、ティックへの整列と順序は保証されません。

次のコードは、公式マニュアル（Networked Properties・Change Detection・RPC・TickTimer）の例を1つのクラスにまとめた構成例で、この組み合わせでの実行は確認していません。NetworkObjectを付けたプレハブに追加し、`body`にはInspectorでMeshRendererを割り当てます。`RPC_SetColor`は入力権限を持つ本人のクライアントから呼ぶ想定で、Host／Serverではスポーン時にそのプレイヤーへInput Authorityを割り当てておきます。Sharedでは入力権限と状態権限が同じクライアントにあるため、RPCを介さず`PlayerColor`へ直接書けます。

```
using Fusion;
using UnityEngine;

public class Player : NetworkBehaviour
{
    // 値が変わると描画側でOnColorChangedが呼ばれる
    [Networked, OnChangedRender(nameof(OnColorChanged))]
    public Color PlayerColor { get; set; }

    [Networked] public TickTimer RespawnTimer { get; set; }

    public MeshRenderer body;

    public override void Spawned()
    {
        // OnChangedRenderは初回スポーン時に呼ばれないので自分で呼ぶ
        OnColorChanged();
    }

    public void OnColorChanged()
    {
        body.material.color = PlayerColor;
    }

    // 入力権限を持つ本人が送り、状態権限を持つ側で実行される
    [Rpc(RpcSources.InputAuthority, RpcTargets.StateAuthority)]
    public void RPC_SetColor(Color color)
    {
        PlayerColor = color;
    }

    // 状態権限を持つ側で呼ぶと3秒後に期限切れになる
    public void StartRespawn()
    {
        RespawnTimer = TickTimer.CreateFromSeconds(Runner, 3f);
    }

    public override void FixedUpdateNetwork()
    {
        if (RespawnTimer.Expired(Runner))
        {
            RespawnTimer = TickTimer.None;
        }
    }
}
```

色はRPCで1回だけ送られますが、受けた側が`PlayerColor`に書くので、後から入ったプレイヤーにも現在の色が届きます。[Change Detectionのページ](https://doc.photonengine.com/fusion/v2/manual/data-transfer/change-detection)によると`OnChangedRender`はスポーン直後には呼ばれないため、`Spawned`で初期化する1行が要ります。`TickTimer`は残り時間を減らしていく値ではなく目標ティックを1回書くだけなので、タイマー作動中に帯域を使いません。Host／Serverで移動などを予測させたい場合は、状態の変更を`FixedUpdateNetwork`の中に置き、操作は`OnInput`で集めた入力として送ります。

## Photon Fusionの料金プランとCCUの考え方

### Fusionの料金・CCU上限・転送量一覧（2026年10月時点）

課金の単位は同時接続数（CCU）です。以下はゲーム向けプランの2026年10月26日時点の[英語版料金ページ](https://www.photonengine.com/fusion/pricing)の表記です。

| プラン          | 料金         | 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    | バースト可       |
| 1000 CCU     | 250ドル／月    | 1,000 | 3.0TB    | バースト可       |
| 2000 CCU     | 500ドル／月    | 2,000 | 6.0TB    | バースト可       |

95ドルの100CCUプランは単独でも、無料100CCUや月額プランに重ねても使えます。無料100CCUに重ねれば200CCU、500CCUプランに重ねれば600CCUです。100CCUまでのプランは上限を超えた接続が`MaxCcuReached`で切断されるので、無料枠でリリースする場合はこの切断を受けて「混雑中」と案内する処理を用意しておきます。500CCU以上は超過分を受け入れて翌月の請求に載せますが、最初のバーストから48時間以内にプランを上げないと、Photonの判断でCCUを契約数に制限されることがあります。

このほか、使用量課金のPremium Cloud（1CCUあたり0.50ドル、最低月額1,000ドル）と、個別見積もりのEnterprise Cloudがあります。

### CCUの数え方とリージョン設計

プランの判定に使うCCUは、全リージョンのピークの合計です。料金ページの例では、欧州のピークが420CCU、米国が230CCUなら合計650CCUで、1000CCUプランが必要になります。2つの地域のピークが別の時間帯に来て、実際の同時接続が最大500人だった月でも、請求は650CCUで判定されます。

接続先のリージョンは、`PhotonAppSettings`で指定しなければ「Best Region」（pingで自動選択）になります。[公式のRegionsページ](https://doc.photonengine.com/fusion/v2/manual/connection-and-matchmaking/regions)は、Best Regionは決定的でなく、同じネットワークにいるクライアントでも別のリージョンにつながることがあると書いています。日本のプレイヤーだけを想定するタイトルなら、東京（コード`jp`）に固定するか、DashboardのRegion Allowlistを`jp`のみに設定するのが確実です。マッチングの母数が地域ごとに割れるのを防げるうえ、課金の基準になるピークも1リージョンにまとまります。

### 転送量込みの試算：1000CCUプランのほうが安くなる境目

月額プランに含まれるトラフィックは契約CCU1あたり月3GB（1000CCUプランなら3TB）で、超えた分は欧州・米国・カナダが1GBあたり0.05ドル、日本を含むアジアやオーストラリアなどが0.10ドルです。ここから、月額プランを1段上げたほうが安くなる転送量の境目を計算できます（基本料＋超過GB×単価で比較）。

| 比べるプラン         | 月額の差  | 日本リージョン       | 欧米リージョン |
| -------------- | ----- | ------------- | ------- |
| 500 → 1000CCU  | 125ドル | 月2.75TB超で上が安い | 逆転しない   |
| 1000 → 2000CCU | 250ドル | 月5.5TB超で上が安い  | 逆転しない   |

たとえば日本リージョンでピーク450CCU、1CCUあたり月8GBを使うゲームなら転送量は3.6TBです。500CCUプランでは超過2.1TB分の210ドルが加わって335ドル、1000CCUプランなら超過0.6TB分の60ドルで310ドルになり、CCUに余裕があっても上のプランが安くなります。1CCUあたり月5GBなら、500CCUプランが200ドル、1000CCUプランが250ドルで逆転しません。欧米リージョンは超過単価が半分なので、転送量がいくら増えても下のプランのほうが安く、上のプランの付属枠を超えた後も50〜100ドルの差が残ります。1CCUあたりの転送量はティックレートや同期するオブジェクト数で大きく変わるため、開発中に統計表示で実測した値で計算してください。

無料の100CCUは公式の目安で月間アクティブユーザー約4万人規模です（1CCU≒DAU20人、DAU1人≒MAU20人の経験則）。Serverモードでは専用サーバーの費用が別にかかります。

## Fusionを選ばないほうがよい場面と他のライブラリ

Unityのマルチプレイには、Fusion以外にUnity純正のNetcode for GameObjects（NGO）や、ソースが公開されているMirror（MITライセンス）・FishNet（ゲーム用途は無償だが、他のネットワークライブラリへの流用を禁じる独自ライセンス）があります。違いが一番出るのは、何に対して課金されるかです。

| 選択肢                     | 現行版      | 権限モデル                               | 費用の単位                      |
| ----------------------- | -------- | ----------------------------------- | -------------------------- |
| Photon Fusion           | 2.1.3    | Shared／Host／Server                  | リージョン合算のピークCCU＋転送量         |
| Photon Quantum          | ―        | 決定論的（入力を同期）                         | Photonのプラン                 |
| Netcode for GameObjects | 3.1.0    | Client-Server／Distributed Authority | Relayは平均CCU、DAは接続時間（各＋転送量） |
| Mirror                  | v96.11.3 | Client-Server（ホスト可）                 | ライブラリはMIT・サーバーは自前          |
| FishNet                 | 4.7.4    | Client-Server（ホスト可）                 | 無償の独自ライセンス・サーバーは自前         |

[Unity Gaming Servicesの料金ページ](https://unity.com/products/gaming-services/pricing)では、Relayは月平均50CCUまで無料で、超えた分が平均CCUあたり0.16ドルです。Relayの転送量は1CCUあたり3GiB（月150GiBまで）が無料で、超過はアジア・オーストラリアが1GiBあたり0.16ドル、米国・EUが0.09ドルです。NGOでSharedに近い使い方をするDistributed Authorityは月6,000接続時間まで無料、以降は1接続時間0.001ドルで、送信100GiBを超えた分に同じ地域別の単価がかかります。接続数の課金だけを比べると、夜だけ混むゲームのようにピークと平均の差が大きいほど、ピークで課金されるPhotonが不利です。総額は転送量の単価と無料枠まで含めて比べてください。逆に、予測・ラグ補償・関心領域をそろえて作るなら、Fusionはそれらを最初から持っている点で工数が減ります。

NGOは3.0（2026年9月）からNetcode for Entitiesが必須の依存になり、EntitiesやBurstも一緒にプロジェクトへ入ります。Unityのパッケージレジストリでは3.x系の最小対応版が6000.7.0b1、2.13系が6000.0と登録されており、ドキュメントの「Unity 6.0+」と食い違っています。Unity 6.6以前のプロジェクトでは2.13系を前提にし、Package Managerで実際に入る版を確かめてください。

Fusionを選ばないほうがよいのは、次のような場合です。

- 格闘ゲームやRTSのように、全員の入力から同じ結果を再現する必要がある：同じPhotonでもQuantumの領域
- 自前の専用サーバーを既に運用していて、クラウドのCCU課金を避けたい：MirrorやFishNetならライブラリ自体は無料
- Unreal EngineやGodotで今すぐ製品を出す：Fusion 3はプレビューなので、エンジン標準のネットワーク機能が先になる

音声も載せる予定なら、Photon VoiceとUnityのVivoxでは課金の単位がさらに異なります。比較は[ボイスチャットの実装方法（WebRTC自作とVivox・Photon Voice等SDKの比較）](/tech/details/2292/)にまとめています。

## PUN2との違いと移行で詰まりやすい点

### PUN2の現状と公式の推奨

PUN2のドキュメントには「メンテナンス／LTSモードであり、修正以外の機能追加は予定していない」と明記されています。既存のPUN2プロジェクトは引き続き動きますが、新規プロジェクトではFusionかQuantumを検討するよう案内されています。

### PUN2とFusionのAPI対応

[公式の移行ガイド（Coming from PUN2）](https://doc.photonengine.com/fusion/v2/getting-started/migration/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モードへ移す際の対応であり、名前の置換だけで移行できるわけではありません。PUNは全クライアントが共有するルームでの分散権限モデルしか持たないため、Host／Serverへ移るなら入力と状態権限の設計からやり直すことになります。

### PUN2移行時の識別子・設定・コールバックの変更

- **プレイヤー番号**：移行ガイドには「`PlayerRef`は0から`MaxPlayers - 1`、ホストは`MaxPlayers - 1`」とあるが、これはFusion 1の仕様。Fusion 2では接続ごとに固有の値が振られて退出者の値は再利用されず、ホストは1になる（Fusion 1からの移行資料に明記）。番号を配列の添字やチーム分けに使うと壊れる
- **設定ファイル**：PUNの`PhotonServerSettings`に相当する内容が、接続情報の`PhotonAppSettings`と、ティックレートや最大人数を持つ`NetworkProjectConfig`に分かれる
- **コールバック**：Network RunnerのGameObject（とその子）に付けたコンポーネントは`StartGame`時に自動で登録される。セッション単位は`INetworkRunnerCallbacks`、オブジェクト単位は`NetworkBehaviour`の`Spawned`などで受け取る

## Unityでの始め方：AppId発行から最初のセッションまで

### Fusion SDKのインポートとAppId・シーンの設定

1. Photon DashboardでFusion 2用のAppIdを発行する
2. SDK配布ページからFusion SDK 2.1.3のパッケージを取得し、対応バージョンのUnityプロジェクトへインポートする
3. Project Settings > Editor > Asset SerializationのModeをForce Textにする
4. Fusion HubでAppIdを設定する（`PhotonAppSettings`に保存される）
5. Sharedなら、Hierarchyの右クリックメニューからFusion > Scene > Setup Networking in Sceneを選び、Prototype RunnerとPrototype Network Startを追加する

SDKを更新するときは、プロジェクトをバックアップしてPhotonフォルダを削除し、新しいパッケージをインポートしたあと、`NetworkProjectConfig.fusion`と`PhotonAppSettings.asset`の変更を元に戻します。エディタを日本語表示で使っている場合はメニュー名が英語の手順書と一致しないので、[Unityの日本語化とエディタ言語設定の手順](/tech/details/4881/)を参考に、導入中だけ英語表示へ戻しておくと迷いません。

### Host／Serverでセッションを開始するコード

Host／Serverでは、`NetworkRunner`の`StartGame`をコードから呼びます。[公式チュートリアル（Host Mode Basics）](https://doc.photonengine.com/fusion/v2/tutorials/host-mode-basics/2-setting-up-a-scene)の`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`で呼び分けます。`Server`を渡せば専用サーバーとして起動します。

### Sharedでプレイヤーを出現させるコード

Sharedでは各クライアントが自分のアバターを自分でスポーンし、そのオブジェクトの状態権限を持ちます。公式チュートリアル（Shared Mode Basics）のスポーン処理です。PlayerSpawnerをPrototype Runnerと同じGameObjectに追加し、NetworkObjectを付けたプレハブをPlayerPrefabに割り当てます。位置も同期する場合はプレハブにNetworkTransformを追加します。

```
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の権限モデルを表しています。この条件を外すと、誰かが入室するたびに全クライアントがアバターを生成してしまいます。

### Multi-Peer Modeによる複数クライアントの動作確認

動作確認のたびにビルドを作る必要はありません。[公式のMulti-Peer Mode](https://doc.photonengine.com/fusion/v2/manual/testing-and-tooling/multipeer)を使うと、1つのUnityエディタの中で独立した`NetworkRunner`を複数動かせます。メニューのFusion > NetworkProjectConfigでPeer Modeを`Multiple`にし、Tools > Fusion > Windows > Network Runner Controlsから各Runnerの表示切り替えと、どのRunnerが入力を受け取るかを選びます。表示切り替えには、各NetworkRunnerのGameObjectまたはプレハブに`RunnerEnableVisibility`コンポーネントを追加しておく必要があります。

全Runnerが同じプロセスで動くため、シミュレーションに影響するstatic変数やシングルトンは衝突します。公式も避けるよう強く勧めており、Multi-Peerで壊れるコードは設計を直す合図です。AudioListenerやEventSystemは`EnableOnSingleRunner`で1つのRunnerだけに残します。

ゲーム全体の開発体制やサーバー側の運用まで含めて外部に相談したい場合は、[ゲームアプリ開発の支援内容](/service/apps/game/)も参考にしてください。

## よくある質問

### Photon Fusionは無料で使えますか？

開発中は20CCUまでの開発専用プランが無料です。リリース後も1顧客1アプリに限り、100CCUまでのプランを無料で使えます（2026年10月時点の英語版料金ページ）。95ドルの12か月プランを重ねると200CCUまで広げられます。Serverモードの専用サーバー費用はこれとは別です。

### Fusion 2.0のプロジェクトはそのまま2.1に上げられますか？

公式は、先に2.0系の最新版（2026年10月時点で2.0.13）へ更新してから2.1へ上げるよう指定しています。音声チャットのVoiceパッケージは2.0用と2.1用で互換性がないため、あわせて差し替えが必要です。

### Host Modeはプレイヤー同士のP2P接続ですか？

ホストへの直接接続をNATパンチスルーで試み、失敗したプレイヤーはPhotonのリレー経由でつながります。公式の目安では、リレーになるのはおよそ10人に1人です。

### 専用サーバーはPhotonが用意してくれますか？

用意されません。公式ドキュメントに、専用サーバーのホスティングはPhotonが提供しないと明記されています。自社運用か外部のホスティングサービスを使います。

### Unreal EngineやGodotでもFusionは使えますか？

Fusion 3としてUnreal Engine 5.4〜5.8向けとGodot 4.6以降向けのSDKが配布されていますが、2026年10月時点ではどちらもプレビューで、リリースするゲームには使わないよう案内されています。Unityで使う現行版はFusion 2.1系です。

## 関連記事

- [PlayFabとは？料金プラン・無料枠・Unity SDKの導入手順](/tech/details/4904/)
- [ボイスチャットの実装方法｜WebRTC自作とVivox・Photon Voice等SDKの比較](/tech/details/2292/)
- [Unity 6.3 LTS（6000.3）の新機能と変更点](/tech/details/10417/)
- [ゲーム開発の言語の選び方：Unity・Unreal・Godot・Webのエンジン別に比較](/tech/details/18883/)
- [WebGLとは？仕組み・対応ブラウザの確認・動くコードとUnity WebGLビルドの手順](/tech/details/4884/)

---

出典: [Photon Fusionとは？Fusion 2.1の3モードの違い・料金試算・PUN2からの移行【2026年10月】](<https://www.issoh.co.jp/tech/details/6888/>)（株式会社一創）
