Network Project Config
概要
Network Project Configは、Photon Fusionを導入したプロジェクトに影響を与える様々な情報やパラメーターを保持するアセットです。
- バージョン
- モード
- デフォルトのプレイヤー数
- ネットワーク状況のテスト
- 暗号化
- プレハブ情報の表示
このアセットはAssets/Photon/Fusion/Resources/NetworkProject.Config.fusionにあります。UnityエディターのトップメニューのTools > Fusion > NetworkProjectConfigからアクセスすることもできます。アセットを変更した後は適用する必要があるため、下部の「Apply」ボタンを押すか、変更を保存する確認ダイアログを承認してください。
 
    Fusion Version
このセクションでは、現在使用中のFusionのバージョンが表示されます。ドロップダウンを展開すると、Fusionが使用しているダイナミックリンクライブラリ(DLL)の詳細が表示されます。
Scene Settings
- Peer mode:- Single:通常のユースケースとして、ビルドやエディター上で単一のピア(サーバー/ホスト/クライアント)を実行します
- Multiple:エディター上で複数のピアを有効にできます
 
Peer ModeをMultipleに設定すると、複数のピアが接続するセッションを、ビルドを作成せずにテストするのに役立ちます。
詳細はマルチピアモードをご覧ください。
Lag Compensation
Lag Compensation(ラグ補償)を有効にすると、プレイヤー視点による当たり判定の精度が向上するため、FPS(一人称視点のシューティング)などのハイペースなゲームで非常に便利です。これは、ヒットボックスのスナップショットの履歴を保持することで行われます。各スナップショットに含める情報量は、ユーザー側で設定でき、当たり判定の精度に影響を与えます。
- Hitbox Buffer Length In Ms:ヒットボックスのデータを格納するバッファの長さをミリ秒で指定します。長いほど、ヒットボックスのスナップショットが最新のものに上書きされずに残ることになります。
- Hitbox Default Capacity:各スナップショットに格納できるヒットボックスの個数(デフォルト)で、最小は16です。
- Cached Static Colliders Size:デフォルトのラグ補償クエリで使用される、静的コライダー(PhysX/Box2D)のキャッシュ配列サイズです。
詳細はラグ補償をご覧ください。
Physics
Fusion 2.1.x以降から、Physics Forecastを有効にすることで、Rigidbodyに対するNetworkTransformの補外が可能になります。これによって、オブジェクトにローカル時間を適用して、すべてのクライアント上でスムーズなインタラクションを行うことができます。
Miscellaneous
このセクションでは、Fusionのプロジェクトに関する補助的なパラメーターを設定できます。
- Enqueue Incomplete Synchronous Spawns:有効にすると、未完了の同期スポーン(Addressablesなど)は、例外をスローするかわりに、キューに追加されます。これは- Fusion.NetworkSpawnStatus.Queuedを返し、次のフレームでオブジェクトのスポーンを試みます。Fusion 1.xからの移行時に、有効にすると便利です。
- Invoke Render In Batch Mode:有効にすると、Unityのバッチモード再生時に- Fusion.SimulationBehaviour.Renderコールバックが呼び出されます。バッチモードで実行するには、Unityのコマンドライン引数に- -batchmodeを渡します。バッチモードで動作するヘッドレスサーバーを使用する場合は、無効にすると便利です。詳細はUnityのバッチモードをご覧ください。
- Network Id Is Object Name:有効にすると、新規にスポーンしたオブジェクトの名前にネットワークIDが追加され、- [Network Id] Original Object Nameのようになります。
- Hide Network Object Inactivity Guard:- NetworkObjectが一度もアクティブにならずに破棄された場合に発生する問題を回避するため、- NetworkObjectInactivityGuardという名前のゲームオブジェクトが- NetworkObjectの- OnDestroyを監視します。このオプションを有効にすると、- NetworkObjectInactivityGuardはヒエラルキーに表示されません。
- Allow Client Server Modes in WebGL: ホストモード使用時、デフォルトではWebGLビルドが無効になっています。低パフォーマンス・信頼できないホスト・頻繁な切断が発生することから、WebGLのホストモードは推奨されません。これを有効にすると、ホストモードでもWebGLが利用できる設定になります。詳細はこちらをご覧ください。
Simulation
Fusionのシミュレーションの挙動を設定します。
- Replication Features:- None:デフォルトの設定です。ゲームプレイを通して、ティック毎のデータ制限を超えないなら、これが最適です。
- Scheduling:ティック毎のデータ制限に達すると、一部のネットワークオブジェクトの(サーバーからクライアントへの)複製がカリングされます。カリングされたオブジェクトは、次の- Tickの更新で優先度が上がります。
- Scheduling and Interest Management:- Schedulingに加えて、インタレストマネジメント機能(- Area of Interestや- Explicit Interest)が有効になります。詳細はインタレストマネジメントをご覧ください。
 
- Input Transfer Mode:入力の転送方法を決定します- Redundancy:デルタ圧縮と冗長化を施した入力を送信します。多くのゲームに適しています。
- Latest State:最新の入力のみを送信します。VRのような大きい入力構造体(頭や手の位置データを含むなど)を利用するゲームに適しています。
 
- Player Count:デフォルトのプレイヤー数(1~255)です。セッション開始時にプレイヤー数を指定しなかった場合は、この値が使用されます。
備考:Fusion 2.1から、共有モードのティックレートと送信レートの設定を調整できるようになりました。ただし、32が上限です(以前まではティックレートは32、送信レートは16に固定され変更できませんでした)。無効な値を使用しようとすると、Client Tick Rateは32、Client Send Rateは16になります。
- Client Tick Rate:クライアントのティックレートです。ドロップダウンから値(8~256)を選択できます。
- Client Send Rate:クライアントがサーバーにデータを送信するレートで、以下の設定が可能です。- 1/8:クライアントのティックレートが240以上の時のみ適用可能
- 1/4:クライアントのティックレートが4の倍数の時のみ適用可能
- 1/2
- 1:1:クライアントのティックレートと同じ値になります
 
- Server Tick Rate:サーバーが更新されるレートです。- Client Send Rateと同じ選択肢があります。
- Server Send Rate:サーバーがクライアントにデータを送信するレートです。- Client Send Rateと同じ選択肢がありますが、- Server Tick Rateよりは大きくできません。
Network
- Connection Timeout:更新を受信できなくなってから切断するまでの時間(秒)です。サーバーは更新を受信できないクライアントを切断します(クライアントは更新を受信できないサーバーから切断されます)。
- Connecting Shutdown Time:接続ステータスがシャットダウンになった後、接続周りのリソースが解放されるまでの時間(秒)です。
 - Reliable Data Transfer Modes:データ転送の信頼性を決定します- Client to Server:クライアントからサーバーへのデータ転送の信頼性が確保されます
- Client to Client With Server Proxy:サーバープロキシを使用したクライアント間のデータ転送の信頼性が確保されます
 
Host Migration
ホストマイグレーションの挙動を設定します。
- Enable Auto Update:有効にすると、ホストマイグレーションが自動的に更新されます
- Update Delay:ホストマイグレーションのスナップショットが、Photon Cloudにアップロードされるまでの時間(秒)です
Encryption
FusionのプロジェクトのEncryption(暗号化)の有効/無効を切り替えます。Photon App SettingsのEncryption Modeを合わせて更新する必要があることに注意してください。
詳細は接続の暗号化をご覧ください。
Network Conditions
この設定で、異なるネットワーク状況(遅延やパケットロス)をシミュレーションしたりテストしたりすることが可能です。
- Enabled:有効にすると、以下のオプションが表示されます
- Delay Shape:遅延の波形パターンを設定します- Noise
- Sine
- Square
- Triangle
- Saw
- Reverse Saw
 
- Delay Min:最小の遅延秒数(0~0.5)
- Delay Max:最大の遅延秒数(0~0.5)
- Delay Period:遅延の周期の秒数
- Delay Threshold:波形パターンの値がしきい値(0~1)未満になると、遅延は- Delay Minになる
- Additional Jitter:波形パターンから遅延の値が決定された後、その値にランダムな値(0~設定値)が追加される
- Loss Chance Shape:ロスの波形パターンを設定します(選択肢は- Delay Shapeと同じです)
- Loss Chance Min:パケットロス率の最小値(0(0%)~1(100%))
- Loss Chance Max:パケットロス率の最大値(0(0%)~1(100%))
- Loss Chance Threshold:波形パターンの値がしきい値(0~1)未満になると、パケットロス率は- Loss Chance Minになる
- Loss Chance Period:パケットロス率の周期の秒数
- Additional Loss:波形パターンからパケットロス率の値が決定された後、その値にランダムな値(0~正規化された設定値)が追加される
遅延とロスの設定は、値を秒数とパーセンテージで決定すること以外はほぼ同じで、パケットロス率は0%から100%でシミュレーションされます。
Heap
Fusionで使用するメモリの事前割り当て量を定義して、メモリ管理を最適化し、パフォーマンスを向上できます。
- Page Shift:各- Heap Pageのサイズ(1KB~256KB)を指定します。メモリ割り当ての粒度に影響し、サイズに比例してメモリ割り当て量は増加します。
- Page Count:ヒープの初期ページ数(16~4096)を指定します。初期の合計メモリ割り当て量に影響します。
Weaver Settings
Fusion IL Weaverに影響する設定で、低レベルなネットコードを生成してAssembly-CSharp.dllに注入するために使用されます。
- Assemblies to Weave:IL Weaver対象にするアセンブリのリストで、大文字小文字は区別しません。デフォルトで、以下が含まれます。- Fusion.Unity
- Assemble-CSharp
- Assembly-CSharp-firstpass
- Fusion.Addons.Physics(プロジェクトでFusionの物理システムを使用する場合)
 
- Use Serialized Dictionary:有効にすると、ネットワークプロパティの初期値の格納に- Fusion.SerializableDictionaryを使用します。無効にすると、IL Weaverは- System.Generic.Dictionaryを使用します。- System.Generic.DictionaryはUnityではシリアライズ不可能ですが、Odinなどの独自のシリアライズシステムに対応します。
- Null Checks for Networked Properties:有効にすると、IL Weaverは、ネットワークプロパティを持つ- Fusion.NetworkBehaviourが- Fusion.NetworkObjectに紐付けられているかのチェックを追加します。
- Check Rpc Attribute Usage:有効にすると、IL Weaverは、- Fusion.RpcAttributeに対応していない型が使用されていないかをチェックします。例えば、- Fusion.RpcAttributeが- Unity.MonoBehaviourのメソッドに追加されていた場合、ログに「RPCは- Fusion.NetworkBehaviour/- Fusion.SimulationBehaviourにのみ追加できる」旨の警告が表示されます。すべての型をスキャンする必要があるため、IL Weavingとコンパイル時間が増加します。詳細はRPCをご覧ください。
- Check Networked Properties Being Empty:有効にすると、不適切な- Fusion.NetworkedAttributeでプロパティを定義した時に、警告が表示されるようになります。以下のように、プロパティのgetter/setterは空にする必要があります。
C#
[Networked]
public int NetworkedProperty {get; set;}
詳細はネットワークプロパティをご覧ください。
Prefabs
プレハブをアンロードする挙動を設定できます。
- Unload Prefab On Releasing Last Instance:有効にすると、インスタンスがすべて解放された時に、プレハブがアンロードされます
- Unload Prefabs On Shutdown:有効にすると、シャットダウン時にすべてのプレハブがアンロードされます
プレハブのアンロードは、メモリ使用量の最適化目的では不要ですが、必要に応じて再ロードしたい場合には有効です。
Auto-Generated
自動生成された情報が表示されるセクションです。
- Show Network Prefabs Inspector:プロジェクト内で、- Fusion.NetworkObjectコンポーネントが付いている(- Fusion.NetworkObject.IsSpawnableが有効になっている)プレハブを確認できるウインドウが開きます。
- Prefabs:プロジェクト内の、- NetworkObjectプレハブがリストされているドロップダウンリストです。このリストを直接更新することはできませんが、実行時に- Fusion.NetworkPrefabTable.TryAddSourceから、追加のプレハブを登録できます。
- Behaviour Meta:プロジェクト内の、すべての- Fusion.SimulationBehaviourのメタ情報(実行順など)を含むリストです。
Network Prefabs Inspector
前述した通り、Network Prefabs Inspectorでは、Fusion.NetworkObjectコンポーネントが付いている(Fusion.NetworkObject.IsSpawnableが有効になっている)プレハブを詳細に確認できます。
 
    ウインドウのメインツールバーには、以下の機能があります。
- Refresh:リストをリフレッシュし、新しいプレハブが追加された場合はリストが更新されます
- Sync Selection:有効にすると、Unityで選択したプレハブアセットが、ウインドウでハイライトされます
- Loaded Only:有効にすると、ロード済みのプレハブのみが表示されます
ウインドウの各行は異なるプレハブを表し、各列は以下を表します。
- State:プレハブがロード済みかどうかを示します
- Type:プレハブの種類(ロード方法)を示します- R:- Resourcesフォルダにあるプレハブです
- SL:- Resourcesフォルダ外にある静的なプレハブです
- A:- Addressableでロードされるプレハブです
 
- PrefabId:Fusionによってプレハブに割り当てられたIDです
- Path:プレハブのファイルパスです