Network Project Config
概要
Network Project Configは、Photon Fusionを導入したプロジェクトに影響を与える様々な情報やパラメーターを保持するアセットです。
- バージョン
- モード
- デフォルトのプレイヤー数
- ネットワーク状況のテスト
- 暗号化
- プレハブ情報の表示
このアセットはAssets/Photon/Fusion/Resources/NetworkProjectConfig.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が利用できる設定になります。詳細はこちらをご覧ください。
2.1.x以降、以下の新しい設定が追加されました:
Allow Master Client Reassign Request:有効にすると、非マスタークライアントが新しいマスタークライアントに選出されるように要求できるようになります。Clients Record Frame And Packet Timing Traces:有効にすると、各クライアントがフレームとパケットのタイミング情報をローカルファイル(Application.persistentDataPathにセッションごとに1ファイル)に記録します。
タイミング関連の問題は多くの外部要因に依存するため、意図的に再現するのは困難です。トレースをキャプチャしておくことで問題を再現し、より効率的に虎フルシューティングを行うことができます。
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)です。セッション開始時にプレイヤー数を指定しなかった場合は、この値が使用されます。
備考:共有モードでは、ティックレート/送信レートの設定値の上限が32になっています!Fusion 2では、両方の値が固定(それぞれ32/16)で変更できませんでしたが、Fusion 2.1以降では制限範囲内で調整できるようになりました。
Client & Server Tick Rate:クライアント/サーバーが更新されるティックレートです。以前は選択肢が限定されていましたが、Fusion 2.1以降では8~256の間で任意の値が設定できるようになりました。Client Send Rate:クライアントがサーバーへデータを送信する頻度で、1~8の範囲で表されます。1の場合は毎ティック、2の場合は2ティックに1回データが送信されることを意味します。利用可能な値(結果的な送信レート)は、選択したティックレートで割り切れるものに限定されます。Server Send Rate:サーバーがクライアントへデータを送信する頻度です。この値には、Client Send Rateと同じオプションと制限が適用されます。
共有モードでは、悪意のあるクライアントにより望ましくない値を設定されないように、ティックレート/送信レートを以下の方法で制限することもできます。
Time
Time設定は、Fusion 2.1以降で利用可能です。
Input Receive Buffer Settingsによって、クライアントがサーバーへどれだけ早く入力を送信するかを制御できます。
Max Late Inputs:クライアントは、この値のジッターを除いたすべてのパケットをカバーできるだけの十分な余裕をもって、入力を早めに送信します。これは本質的にジッターに対するカットオフです。- この値が3%の場合、クライアントはジッター値の97パーセンタイル(最悪の3%を除外)を使用して、送信の早さを決定します。
Redundant Inputs:クライアントは、この数の入力パケットが連続して失われた場合でも、入力が時間通りに到着するだけ十分に早く入力を送信します。これは本質的にMax Late Inputsのパーセンテージ値に対する乗数です。Input Receive Buffer Delay Added:クライアントは、この値に相当するミリ秒/ティックの分だけ、さらに入力を早めに送信します。
Input Delay Settingsによって、入力の送信に対してクライアントのローカル時間をどれだけ遅らせるかを制御できます。
Minimum Input Delay:プレイヤーの入力遅延は、少なくともこの値(ミリ秒/ティック)の分だけ遅れます。Clients Can Add Input Delay To Limit Resims:有効にすると、予測ティック数がClient Max Resims Per Frameを下回るだけの十分な入力遅延を追加します。Client Max Resims Per Frame:1フレーム内で発生する最大予測ティック数です。これが、クライアントが予測できる範囲の上限となります。
Input delayは、Server Mode/Host Modeのみでサポートされます。
State Receive Buffer Settingsによって、スナップショット受信に対してクライアントのローカル時間をどれだけ遅らせるかを制御できます。
Max Late Snapshots:クライアントは、この値のジッターを除いたすべての時間をカバーできるだけ十分な余裕をもって、スナップショット補間を遅延させます。これは本質的にジッターに対するカットオフです。- この値が3%の場合、クライアントはジッター値の97パーセンタイル(最悪の3%を除外)を使用して、遅延時間を決定します。
Redundant Snapshots:クライアントは、この数のスナップショットのパケットが連続して失われた場合でも、スムーズな状態が維持されるだけ十分に長くスナップショット補間を遅延させます。これは本質的にMax Late Snapshotsのパーセンテージ値に対する乗数です。State Receive Buffer Delay Added:クライアントは、この値に相当するミリ秒/ティックの分だけ、さらにスナップショット補間を遅延させます。
さらなる詳細は、時間の同期をご覧ください。
Encryption
FusionのプロジェクトのEncryption(暗号化)の有効/無効を切り替えます。Photon App SettingsのEncryption Modeを合わせて更新する必要があることに注意してください。
詳細は接続の暗号化をご覧ください。
Network Conditions
この設定で、異なるネットワーク状況(遅延やパケットロス)をシミュレーションしたりテストしたりすることが可能です。
Enabled:有効にすると、以下のオプションが表示されますDelay Shape:遅延の波形パターンを設定しますNoiseSineSquareTriangleSawReverse 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.UnityAssemble-CSharpAssembly-CSharp-firstpassFusion.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:有効にすると、シャットダウン時にすべてのプレハブがアンロードされます
プレハブのアンロードは、メモリ使用量の最適化目的では不要ですが、必要に応じて再ロードしたい場合には有効です。
Log
Fusionからのログを制御します。これらはコンフィグファイルには書き込まれず、UnityのScripting Define Symbols(Player Settings内)を更新するため、いずれかの値を変更するとスクリプトが再コンパイルされます。コンパイル時にログを制限することで、ログレベルやチャンネルをビルドから完全に除外することが可能で、それによって生じる実行時オーバーヘッドを排除できます。
Log Level:コンパイルで組み込まれるメッセージの最小レベルを設定するドロップダウンメニューです。選択したレベルより低いメッセージはすべて削除されます。Trace Channels:コンパイルで組み込まれるログのチャンネルを制御します。指定したサブシステムに対して選択的にログを有効にするために使用できます。
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:プレハブのファイルパスです